> For the complete documentation index, see [llms.txt](https://knowledgebase.fabricdata.com/studio/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://knowledgebase.fabricdata.com/studio/integrations-and-apis/origin-studio-production-api/record-lifecycles.md).

# Record Lifecycles

Manage record lifecycles in the context of a tenant. A Record Lifecycle defines the set of statuses (nodes) and transitions (edges) a record of a given workType can move through — e.g. Draft, In Review, Published — and the allowed paths between them.

## Get all record lifecycles for a tenant

> Get all record lifecycles for a tenant, optionally filtered by workType.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Record Lifecycles","description":"Manage record lifecycles in the context of a tenant. A Record Lifecycle defines the set of statuses (nodes) and transitions (edges) a record of a given workType can move through — e.g. Draft, In Review, Published — and the allowed paths between them."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"RecordLifecycleFindManyResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleFindManyResponse","description":"JSON:API response for listing all record lifecycles in a tenant. Returns an array of lifecycle resources with their full graph definitions.","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the lifecycle"},"type":{"type":"string","enum":["recordLifecycles"]},"attributes":{"allOf":[{"$ref":"#/components/schemas/BaseResourceAttributes"},{"$ref":"#/components/schemas/RecordLifecycleAttributes"}]},"relationships":{"type":"object","properties":{"tenant":{"description":"The tenant that owns this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"author":{"description":"The user who originally created this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["users"]},"meta":{"type":"object","properties":{"tenantId":{"type":"string"},"type":{"type":"string"},"displayName":{"type":"string"}},"required":["tenantId","type","displayName"]}},"required":["id","type","meta"]},"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["data"]},"updatedBy":{"description":"The user who last modified this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["users"]},"meta":{"type":"object","properties":{"tenantId":{"type":"string"},"type":{"type":"string"},"displayName":{"type":"string"}},"required":["tenantId","type","displayName"]}},"required":["id","type","meta"]},"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["data"]}},"required":["tenant"],"additionalProperties":false}},"required":["id","type","attributes","relationships"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"BaseResourceAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBaseResourceAttributes","description":"Common timestamps present on all resource attribute objects. `created` is the ISO 8601 date-time when the resource was first created; `updated` is the date-time of the most recent modification.","type":"object","additionalProperties":false,"required":["created","updated"],"properties":{"created":{"type":"string","format":"date-time"},"updated":{"type":"string","format":"date-time"}}},"RecordLifecycleAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleAttributes","description":"Attributes defining a record lifecycle: work type, statuses, and transitions between statuses.","type":"object","required":["workType","statuses","transitions"],"additionalProperties":false,"properties":{"workType":{"$ref":"#/components/schemas/WorkTypes"},"statuses":{"type":"array","description":"The lifecycle statuses","items":{"$ref":"#/components/schemas/RecordLifecycleNodeAttributes"}},"transitions":{"type":"array","description":"The lifecycle transitions between statuses","items":{"$ref":"#/components/schemas/RecordLifecycleEdgeAttributes"}}}},"WorkTypes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"WorkTypes","description":"The classification type of an entertainment work. `Movie` is a standalone feature-length film. `MovieEdit` is a variation of a Movie. `Series` is a TV or streaming series. `Season` is a season within a Series. `Episode` is a single episode within a Season. `EpisodeEdit` is a variation of an Episode. `Compilation` is an editorially curated collection of existing records.","type":"string","enum":["Movie","MovieEdit","Series","Season","Episode","EpisodeEdit","Compilation"]},"RecordLifecycleNodeAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleStatusAttributes","description":"A single lifecycle status node: id, label, phase (drafting or published), and optional position.","type":"object","required":["id","label","phase"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the status"},"label":{"type":"string","description":"Display label for the status"},"phase":{"type":"string","enum":["drafting","published"],"description":"The phase this status belongs to"},"description":{"type":"string","description":"Optional description of the status"},"positionX":{"type":"number","description":"The x position of the status"},"positionY":{"type":"number","description":"The y position of the status"}}},"RecordLifecycleEdgeAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleTransitionAttributes","description":"Attributes of a directed edge in the lifecycle graph, representing a transition between two statuses. `fromStatusId` and `toStatusId` identify the source and target lifecycle status nodes. `direction` indicates whether the transition represents forward progression or a regression in the lifecycle.","type":"object","required":["id","label","fromStatusId","toStatusId","direction"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the transition"},"label":{"type":"string","description":"Display label for the transition action"},"fromStatusId":{"type":"string","description":"The source status ID"},"toStatusId":{"type":"string","description":"The target status ID"},"direction":{"type":"string","enum":["forward","backward"],"description":"The direction of the transition based on handles (east→west = forward)"},"description":{"type":"string","description":"Optional description for the transition action"}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/recordLifecycles":{"get":{"summary":"Get all record lifecycles for a tenant","operationId":"recordLifecycleFindMany","description":"Get all record lifecycles for a tenant, optionally filtered by workType.","tags":["Record Lifecycles"],"parameters":[{"name":"filter.workType","description":"Filter lifecycles by workType","in":"query","required":false,"schema":{"type":"string","enum":["Movie","MovieEdit","Series","Season","Episode","EpisodeEdit","Compilation"]}}],"responses":{"200":{"description":"Successfully retrieved lifecycles","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordLifecycleFindManyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Create a new record lifecycle

> Create a new record lifecycle for a specific workType. The tenant ID can optionally be provided as a query parameter.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Record Lifecycles","description":"Manage record lifecycles in the context of a tenant. A Record Lifecycle defines the set of statuses (nodes) and transitions (edges) a record of a given workType can move through — e.g. Draft, In Review, Published — and the allowed paths between them."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"RecordLifecycleCreateRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleCreateRequest","description":"Request body for creating a new record lifecycle. Defines the lifecycle's name, initial status nodes, allowed transitions (edges), and the visual layout positions of nodes in the lifecycle editor.","type":"object","properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","properties":{"type":{"type":"string","enum":["recordLifecycles"]},"attributes":{"$ref":"#/components/schemas/RecordLifecycleAttributes"}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"WriteRequestMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IWriteRequestMeta","description":"Optional audit metadata for a write request. `audit.source` is the issuing surface/channel (e.g. studio-web, mcp, api, system); `audit.reason` is a free-text justification. Both are optional and length-capped.","type":"object","additionalProperties":false,"properties":{"audit":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","maxLength":64},"reason":{"type":"string","maxLength":256}}}}},"RecordLifecycleAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleAttributes","description":"Attributes defining a record lifecycle: work type, statuses, and transitions between statuses.","type":"object","required":["workType","statuses","transitions"],"additionalProperties":false,"properties":{"workType":{"$ref":"#/components/schemas/WorkTypes"},"statuses":{"type":"array","description":"The lifecycle statuses","items":{"$ref":"#/components/schemas/RecordLifecycleNodeAttributes"}},"transitions":{"type":"array","description":"The lifecycle transitions between statuses","items":{"$ref":"#/components/schemas/RecordLifecycleEdgeAttributes"}}}},"WorkTypes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"WorkTypes","description":"The classification type of an entertainment work. `Movie` is a standalone feature-length film. `MovieEdit` is a variation of a Movie. `Series` is a TV or streaming series. `Season` is a season within a Series. `Episode` is a single episode within a Season. `EpisodeEdit` is a variation of an Episode. `Compilation` is an editorially curated collection of existing records.","type":"string","enum":["Movie","MovieEdit","Series","Season","Episode","EpisodeEdit","Compilation"]},"RecordLifecycleNodeAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleStatusAttributes","description":"A single lifecycle status node: id, label, phase (drafting or published), and optional position.","type":"object","required":["id","label","phase"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the status"},"label":{"type":"string","description":"Display label for the status"},"phase":{"type":"string","enum":["drafting","published"],"description":"The phase this status belongs to"},"description":{"type":"string","description":"Optional description of the status"},"positionX":{"type":"number","description":"The x position of the status"},"positionY":{"type":"number","description":"The y position of the status"}}},"RecordLifecycleEdgeAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleTransitionAttributes","description":"Attributes of a directed edge in the lifecycle graph, representing a transition between two statuses. `fromStatusId` and `toStatusId` identify the source and target lifecycle status nodes. `direction` indicates whether the transition represents forward progression or a regression in the lifecycle.","type":"object","required":["id","label","fromStatusId","toStatusId","direction"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the transition"},"label":{"type":"string","description":"Display label for the transition action"},"fromStatusId":{"type":"string","description":"The source status ID"},"toStatusId":{"type":"string","description":"The target status ID"},"direction":{"type":"string","enum":["forward","backward"],"description":"The direction of the transition based on handles (east→west = forward)"},"description":{"type":"string","description":"Optional description for the transition action"}}},"RecordLifecycleFindOneResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleFindOneResponse","description":"JSON:API response for fetching a single record lifecycle by ID. Contains the full lifecycle resource including its statuses, transitions, nodes, and edges that define the lifecycle graph.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the lifecycle"},"type":{"type":"string","enum":["recordLifecycles"]},"attributes":{"allOf":[{"$ref":"#/components/schemas/BaseResourceAttributes"},{"$ref":"#/components/schemas/RecordLifecycleAttributes"}]},"relationships":{"type":"object","properties":{"tenant":{"description":"The tenant that owns this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"author":{"description":"The user who originally created this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["users"]},"meta":{"type":"object","properties":{"tenantId":{"type":"string"},"type":{"type":"string"},"displayName":{"type":"string"}},"required":["tenantId","type","displayName"]}},"required":["id","type","meta"]},"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["data"]},"updatedBy":{"description":"The user who last modified this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["users"]},"meta":{"type":"object","properties":{"tenantId":{"type":"string"},"type":{"type":"string"},"displayName":{"type":"string"}},"required":["tenantId","type","displayName"]}},"required":["id","type","meta"]},"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["data"]}},"required":["tenant"],"additionalProperties":false}},"required":["id","type","attributes","relationships"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"BaseResourceAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBaseResourceAttributes","description":"Common timestamps present on all resource attribute objects. `created` is the ISO 8601 date-time when the resource was first created; `updated` is the date-time of the most recent modification.","type":"object","additionalProperties":false,"required":["created","updated"],"properties":{"created":{"type":"string","format":"date-time"},"updated":{"type":"string","format":"date-time"}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/recordLifecycles":{"post":{"summary":"Create a new record lifecycle","operationId":"recordLifecycleCreateOne","description":"Create a new record lifecycle for a specific workType. The tenant ID can optionally be provided as a query parameter.","tags":["Record Lifecycles"],"parameters":[{"name":"tenantId","description":"Optional tenant ID. If not provided, the tenant is inferred from the caller's authentication.","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Complete lifecycle definition including nodes, transitions, and metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordLifecycleCreateRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordLifecycleFindOneResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Get a record lifecycle by ID

> Get a specific record lifecycle by its unique ID.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Record Lifecycles","description":"Manage record lifecycles in the context of a tenant. A Record Lifecycle defines the set of statuses (nodes) and transitions (edges) a record of a given workType can move through — e.g. Draft, In Review, Published — and the allowed paths between them."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"RecordLifecycleFindOneResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleFindOneResponse","description":"JSON:API response for fetching a single record lifecycle by ID. Contains the full lifecycle resource including its statuses, transitions, nodes, and edges that define the lifecycle graph.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the lifecycle"},"type":{"type":"string","enum":["recordLifecycles"]},"attributes":{"allOf":[{"$ref":"#/components/schemas/BaseResourceAttributes"},{"$ref":"#/components/schemas/RecordLifecycleAttributes"}]},"relationships":{"type":"object","properties":{"tenant":{"description":"The tenant that owns this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"author":{"description":"The user who originally created this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["users"]},"meta":{"type":"object","properties":{"tenantId":{"type":"string"},"type":{"type":"string"},"displayName":{"type":"string"}},"required":["tenantId","type","displayName"]}},"required":["id","type","meta"]},"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["data"]},"updatedBy":{"description":"The user who last modified this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["users"]},"meta":{"type":"object","properties":{"tenantId":{"type":"string"},"type":{"type":"string"},"displayName":{"type":"string"}},"required":["tenantId","type","displayName"]}},"required":["id","type","meta"]},"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["data"]}},"required":["tenant"],"additionalProperties":false}},"required":["id","type","attributes","relationships"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"BaseResourceAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBaseResourceAttributes","description":"Common timestamps present on all resource attribute objects. `created` is the ISO 8601 date-time when the resource was first created; `updated` is the date-time of the most recent modification.","type":"object","additionalProperties":false,"required":["created","updated"],"properties":{"created":{"type":"string","format":"date-time"},"updated":{"type":"string","format":"date-time"}}},"RecordLifecycleAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleAttributes","description":"Attributes defining a record lifecycle: work type, statuses, and transitions between statuses.","type":"object","required":["workType","statuses","transitions"],"additionalProperties":false,"properties":{"workType":{"$ref":"#/components/schemas/WorkTypes"},"statuses":{"type":"array","description":"The lifecycle statuses","items":{"$ref":"#/components/schemas/RecordLifecycleNodeAttributes"}},"transitions":{"type":"array","description":"The lifecycle transitions between statuses","items":{"$ref":"#/components/schemas/RecordLifecycleEdgeAttributes"}}}},"WorkTypes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"WorkTypes","description":"The classification type of an entertainment work. `Movie` is a standalone feature-length film. `MovieEdit` is a variation of a Movie. `Series` is a TV or streaming series. `Season` is a season within a Series. `Episode` is a single episode within a Season. `EpisodeEdit` is a variation of an Episode. `Compilation` is an editorially curated collection of existing records.","type":"string","enum":["Movie","MovieEdit","Series","Season","Episode","EpisodeEdit","Compilation"]},"RecordLifecycleNodeAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleStatusAttributes","description":"A single lifecycle status node: id, label, phase (drafting or published), and optional position.","type":"object","required":["id","label","phase"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the status"},"label":{"type":"string","description":"Display label for the status"},"phase":{"type":"string","enum":["drafting","published"],"description":"The phase this status belongs to"},"description":{"type":"string","description":"Optional description of the status"},"positionX":{"type":"number","description":"The x position of the status"},"positionY":{"type":"number","description":"The y position of the status"}}},"RecordLifecycleEdgeAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleTransitionAttributes","description":"Attributes of a directed edge in the lifecycle graph, representing a transition between two statuses. `fromStatusId` and `toStatusId` identify the source and target lifecycle status nodes. `direction` indicates whether the transition represents forward progression or a regression in the lifecycle.","type":"object","required":["id","label","fromStatusId","toStatusId","direction"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the transition"},"label":{"type":"string","description":"Display label for the transition action"},"fromStatusId":{"type":"string","description":"The source status ID"},"toStatusId":{"type":"string","description":"The target status ID"},"direction":{"type":"string","enum":["forward","backward"],"description":"The direction of the transition based on handles (east→west = forward)"},"description":{"type":"string","description":"Optional description for the transition action"}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/recordLifecycles/{recordLifecycleId}":{"get":{"summary":"Get a record lifecycle by ID","operationId":"recordLifecycleFindOne","description":"Get a specific record lifecycle by its unique ID.","tags":["Record Lifecycles"],"parameters":[{"name":"recordLifecycleId","description":"The unique ID of the lifecycle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordLifecycleFindOneResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Delete a record lifecycle

> Delete an existing record lifecycle by its unique ID.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Record Lifecycles","description":"Manage record lifecycles in the context of a tenant. A Record Lifecycle defines the set of statuses (nodes) and transitions (edges) a record of a given workType can move through — e.g. Draft, In Review, Published — and the allowed paths between them."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"WriteMetaOnlyRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IWriteMetaOnlyRequest","description":"Optional request body carrying only audit metadata, used by mutations that otherwise take no body (e.g. resource DELETEs). Lets clients attach meta.audit.source/reason to such operations. The body itself is optional; it is not otherwise required.","type":"object","additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"}}},"WriteRequestMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IWriteRequestMeta","description":"Optional audit metadata for a write request. `audit.source` is the issuing surface/channel (e.g. studio-web, mcp, api, system); `audit.reason` is a free-text justification. Both are optional and length-capped.","type":"object","additionalProperties":false,"properties":{"audit":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","maxLength":64},"reason":{"type":"string","maxLength":256}}}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/recordLifecycles/{recordLifecycleId}":{"delete":{"summary":"Delete a record lifecycle","operationId":"recordLifecycleDeleteOne","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WriteMetaOnlyRequest"}}}},"description":"Delete an existing record lifecycle by its unique ID.","tags":["Record Lifecycles"],"parameters":[{"name":"recordLifecycleId","description":"The unique ID of the lifecycle to delete","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content - Lifecycle deleted successfully"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Update a record lifecycle

> Update an existing record lifecycle by its unique ID.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Record Lifecycles","description":"Manage record lifecycles in the context of a tenant. A Record Lifecycle defines the set of statuses (nodes) and transitions (edges) a record of a given workType can move through — e.g. Draft, In Review, Published — and the allowed paths between them."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"RecordLifecycleUpdateRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleUpdateRequest","description":"Request body for partially updating an existing record lifecycle. Only the fields included are modified. Supports updating the lifecycle name, status nodes, transitions, and node positions.","type":"object","properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the lifecycle"},"type":{"type":"string","enum":["recordLifecycles"]},"attributes":{"type":"object","additionalProperties":false,"properties":{"statuses":{"type":"array","description":"The lifecycle statuses","items":{"$ref":"#/components/schemas/RecordLifecycleStatusAttributes"}},"transitions":{"type":"array","description":"The lifecycle transitions","items":{"$ref":"#/components/schemas/RecordLifecycleTransitionAttributes"}}}}},"required":["id","type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"WriteRequestMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IWriteRequestMeta","description":"Optional audit metadata for a write request. `audit.source` is the issuing surface/channel (e.g. studio-web, mcp, api, system); `audit.reason` is a free-text justification. Both are optional and length-capped.","type":"object","additionalProperties":false,"properties":{"audit":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","maxLength":64},"reason":{"type":"string","maxLength":256}}}}},"RecordLifecycleStatusAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleStatusAttributes","description":"A lifecycle status definition: id, label, phase (drafting or published), optional description and position, and in-use metadata.","type":"object","required":["id","label","phase"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the status"},"label":{"type":"string","description":"Display label for the status"},"phase":{"type":"string","enum":["drafting","published"],"description":"The phase this status belongs to"},"description":{"type":"string","description":"Optional description for the status"},"positionX":{"type":"number","description":"The x position of the status"},"positionY":{"type":"number","description":"The y position of the status"},"meta":{"type":"object","description":"Metadata about the status","additionalProperties":false,"properties":{"inUse":{"type":"boolean","description":"Whether this status has records associated with it in the studio library"}}}}},"RecordLifecycleTransitionAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleTransitionAttributes","description":"Attributes of a lifecycle transition (the action that moves a record from one status to another). Defines the transition label shown to users, the source and destination status IDs, and the direction (forward or backward in the lifecycle progression).","type":"object","required":["id","label","fromStatusId","toStatusId","direction"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the transition"},"label":{"type":"string","description":"Display label for the transition action"},"fromStatusId":{"type":"string","description":"The source status ID"},"toStatusId":{"type":"string","description":"The target status ID"},"direction":{"type":"string","enum":["forward","backward"],"description":"The direction of the transition based on handles (east→west = forward)"}}},"RecordLifecycleFindOneResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleFindOneResponse","description":"JSON:API response for fetching a single record lifecycle by ID. Contains the full lifecycle resource including its statuses, transitions, nodes, and edges that define the lifecycle graph.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the lifecycle"},"type":{"type":"string","enum":["recordLifecycles"]},"attributes":{"allOf":[{"$ref":"#/components/schemas/BaseResourceAttributes"},{"$ref":"#/components/schemas/RecordLifecycleAttributes"}]},"relationships":{"type":"object","properties":{"tenant":{"description":"The tenant that owns this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"author":{"description":"The user who originally created this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["users"]},"meta":{"type":"object","properties":{"tenantId":{"type":"string"},"type":{"type":"string"},"displayName":{"type":"string"}},"required":["tenantId","type","displayName"]}},"required":["id","type","meta"]},"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["data"]},"updatedBy":{"description":"The user who last modified this lifecycle definition.","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["users"]},"meta":{"type":"object","properties":{"tenantId":{"type":"string"},"type":{"type":"string"},"displayName":{"type":"string"}},"required":["tenantId","type","displayName"]}},"required":["id","type","meta"]},"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["data"]}},"required":["tenant"],"additionalProperties":false}},"required":["id","type","attributes","relationships"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"BaseResourceAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBaseResourceAttributes","description":"Common timestamps present on all resource attribute objects. `created` is the ISO 8601 date-time when the resource was first created; `updated` is the date-time of the most recent modification.","type":"object","additionalProperties":false,"required":["created","updated"],"properties":{"created":{"type":"string","format":"date-time"},"updated":{"type":"string","format":"date-time"}}},"RecordLifecycleAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleAttributes","description":"Attributes defining a record lifecycle: work type, statuses, and transitions between statuses.","type":"object","required":["workType","statuses","transitions"],"additionalProperties":false,"properties":{"workType":{"$ref":"#/components/schemas/WorkTypes"},"statuses":{"type":"array","description":"The lifecycle statuses","items":{"$ref":"#/components/schemas/RecordLifecycleNodeAttributes"}},"transitions":{"type":"array","description":"The lifecycle transitions between statuses","items":{"$ref":"#/components/schemas/RecordLifecycleEdgeAttributes"}}}},"WorkTypes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"WorkTypes","description":"The classification type of an entertainment work. `Movie` is a standalone feature-length film. `MovieEdit` is a variation of a Movie. `Series` is a TV or streaming series. `Season` is a season within a Series. `Episode` is a single episode within a Season. `EpisodeEdit` is a variation of an Episode. `Compilation` is an editorially curated collection of existing records.","type":"string","enum":["Movie","MovieEdit","Series","Season","Episode","EpisodeEdit","Compilation"]},"RecordLifecycleNodeAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleStatusAttributes","description":"A single lifecycle status node: id, label, phase (drafting or published), and optional position.","type":"object","required":["id","label","phase"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the status"},"label":{"type":"string","description":"Display label for the status"},"phase":{"type":"string","enum":["drafting","published"],"description":"The phase this status belongs to"},"description":{"type":"string","description":"Optional description of the status"},"positionX":{"type":"number","description":"The x position of the status"},"positionY":{"type":"number","description":"The y position of the status"}}},"RecordLifecycleEdgeAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordLifecycleTransitionAttributes","description":"Attributes of a directed edge in the lifecycle graph, representing a transition between two statuses. `fromStatusId` and `toStatusId` identify the source and target lifecycle status nodes. `direction` indicates whether the transition represents forward progression or a regression in the lifecycle.","type":"object","required":["id","label","fromStatusId","toStatusId","direction"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique identifier for the transition"},"label":{"type":"string","description":"Display label for the transition action"},"fromStatusId":{"type":"string","description":"The source status ID"},"toStatusId":{"type":"string","description":"The target status ID"},"direction":{"type":"string","enum":["forward","backward"],"description":"The direction of the transition based on handles (east→west = forward)"},"description":{"type":"string","description":"Optional description for the transition action"}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/recordLifecycles/{recordLifecycleId}":{"patch":{"summary":"Update a record lifecycle","operationId":"recordLifecycleUpdateOne","description":"Update an existing record lifecycle by its unique ID.","tags":["Record Lifecycles"],"parameters":[{"name":"recordLifecycleId","description":"The unique ID of the lifecycle to update","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Fields to update on the existing lifecycle, such as node attributes, transitions, or status metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordLifecycleUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordLifecycleFindOneResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```
