> 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/records.md).

# Records

This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups.

## Create a new record

> Create a new record from scratch with associated metadata and relationships. All writes are executed atomically — the request either succeeds entirely or has no effect. Requests are limited to 100 total write operations: 1 for the record itself, plus 1 per compilation linkage, plus 1 per non-localized field value and 1 per localized field value per locale. Requests that exceed this limit will be rejected with a 400 error.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"NewRecordCreateRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"INewRecordCreateRequest","description":"Request body for creating a new record using the current (v2) format. Includes work type, initial metadata, optional parent relationship (for hierarchical works), and optional security tag assignments.","type":"object","properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]},"attributes":{"$ref":"#/components/schemas/RecordMetadataAttributes","required":["workType","primaryTitle"]},"relationships":{"description":"Optional relationships to establish at creation time.","type":"object","properties":{"parent":{"description":"The parent record in the work hierarchy (e.g. a Season's parent is its Series). Never set for a standalone record — a Movie, MovieEdit, Series, Compilation, or a limited-series Episode created directly under its Series.","$ref":"#/components/schemas/RecordRelationship"},"securityTags":{"description":"Security tags (permission groups) to apply to this record at creation. If omitted, the tenant's default security tag is applied instead.","$ref":"#/components/schemas/SecurityTagsRelationship"},"compilations":{"description":"Links this record, at creation time, to one or more already-existing Compilation records as a member.","type":"array","items":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"compilationMembers":{"description":"Seeds this Compilation's initial members at creation time (only meaningful when `attributes.workType` is `Compilation`). `ranking` sets each member's sort order within the compilation.","type":"array","items":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"},"ranking":{"type":"number"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}},"additionalProperties":false}},"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}}}}},"RecordMetadataAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordMetadataAttributes","description":"Dynamic map of custom field values stored on a record. Each key corresponds to a field's `key` identifier, and the value can be a string, number, boolean, object, or array depending on the field's schema. This open-ended schema accommodates the tenant-configurable field system.","type":"object","patternProperties":{"^.*$":{"anyOf":[{"type":"string"},{"type":"number","nullable":true},{"type":"boolean","nullable":true},{"type":"array","items":{"type":"string"},"nullable":true},{"type":"object","minProperties":1,"patternProperties":{"^.*$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]}},"additionalProperties":false}]}},"properties":{"primaryTitle":{"type":"string"},"workType":{"$ref":"#/components/schemas/WorkTypes"},"workTypeDetail":{"type":"string"},"lifecycleStatus":{"type":"string","description":"The current lifecycle status (e.g., draft, in-review, published)"},"lifecyclePhase":{"type":"string","enum":["drafting","published"],"description":"The lifecycle phase used for authorization"},"sequenceNumber":{"type":"integer","minimum":1},"genres":{"type":"object","minProperties":1,"patternProperties":{"^.*$":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"runLength":{"type":"number"},"releaseYear":{"type":"number"},"releaseDate":{"type":"string"},"countriesOfOrigin":{"type":"array","items":{"type":"string"}},"primarySpokenLanguage":{"type":"string"},"originNexusId":{"type":"string"},"eidrId":{"type":"string"},"imdbId":{"type":"string"},"gracenoteId":{"type":"string"},"tmdbId":{"type":"string"},"wikidataId":{"type":"string"},"wikipediaId":{"type":"string"},"facebookId":{"type":"string"},"xId":{"type":"string"},"instagramId":{"type":"string"},"upstreamId":{"type":"string"}}},"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"]},"RecordRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationship","description":"A relationship to a record","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]}},"required":["id","type"]},"meta":{"type":"object","properties":{"primaryTitle":{"type":"string"}}},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data"]},"LinksRelated":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ILinks","description":"A JSON:API links object with an absolute or relative 'related' link","type":"object","required":["related"],"properties":{"related":{"type":"string"}},"additionalProperties":false},"SecurityTagsRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ISecurityTagsRelationship","description":"A relationship to one or more security tags","type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","type"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["securityTags"]}}}}},"additionalProperties":false,"required":["data"]},"NewRecordFindOneResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"INewRecordFindOneResponse","description":"JSON:API response for fetching a single record using the current (v2) format. Contains the full record data, hierarchy path in `meta`, and a self link.","type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseResource"},{"type":"object","properties":{"attributes":{"$ref":"#/components/schemas/RecordMetadataAttributes","required":["workType","primaryTitle"]},"relationships":{"$ref":"#/components/schemas/RecordRelationships","required":["tenant"],"additionalProperties":false}},"required":["attributes","relationships"],"additionalProperties":false}]},"meta":{"$ref":"#/components/schemas/NewRecordMeta"},"links":{"type":"object","properties":{"self":{"type":"string"}}}}},"BaseResource":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBaseResource","description":"JSON:API resource identifier. All Origin Studio API resource objects include at least an `id` (unique string identifier) and a `type` (the JSON:API resource type name, e.g. records, contributors).","type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"],"additionalProperties":false},"RecordRelationships":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationships","description":"JSON:API relationships for a record resource.","type":"object","properties":{"parent":{"description":"The parent record in the work hierarchy, if any (e.g. an Episode's parent is its Season, or a Season's parent is its Series). Absent for standalone records such as a top-level Movie or Series.","$ref":"#/components/schemas/RecordRelationship"},"compilations":{"description":"Link to the compilation records this record belongs to as a member. Fetch via GET /records/{recordId}/compilations.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"compilationMembers":{"description":"Link to this record's own compilation members, present only when this record is itself a Compilation. Fetch via GET /records/{recordId}/compilationMembers.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"securityTags":{"description":"The security tags (permission groups) applied to this record for access control. A record always has at least one.","$ref":"#/components/schemas/SecurityTagsRelationship"},"creditLists":{"description":"Link to the credit lists (cast/crew credits) associated with this record.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"poster":{"description":"Link to this record's poster media asset, if one has been uploaded.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"tenant":{"description":"The tenant that owns this record.","$ref":"#/components/schemas/TenantRelationship"},"prevRecord":{"description":"The previous sibling record under the same parent, ordered by sequenceNumber (e.g. the prior Episode in a Season). Absent if this is the first sibling or has no siblings.","$ref":"#/components/schemas/RecordRelationship"},"nextRecord":{"description":"The next sibling record under the same parent, ordered by sequenceNumber (e.g. the following Episode in a Season). Absent if this is the last sibling or has no siblings.","$ref":"#/components/schemas/RecordRelationship"}},"required":["tenant"],"additionalProperties":false},"TenantRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantRelationship","description":"A relationship to a tenant","type":"object","properties":{"data":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"]},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data","links"],"additionalProperties":false},"NewRecordMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"INewRecordMeta","description":"Metadata for new-format record responses. Contains the record's hierarchical `path` (ancestry chain from the root work type down to the current record) for breadcrumb display and navigation.","type":"object","properties":{"path":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"primaryTitle":{"type":"string"}},"required":["id"],"additionalProperties":false}},"status":{"type":"string","enum":["ACTIVE","DELETED"]},"availableLocales":{"type":"array","items":{"type":"string"}},"viewingLocale":{"type":"string","description":"The locale the section/field visibility (redactions) was evaluated for. Echoes the request's `viewingLocale` query parameter (default 'en'). This is not content selection, the response always carries all locales."},"redactions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"path":{"type":"string"},"reason":{"type":"string","enum":["unauthorized","stale"]}}}}},"required":["path","status","availableLocales"],"additionalProperties":false},"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":{"/records":{"post":{"summary":"Create a new record","operationId":"newRecordCreateOne","description":"Create a new record from scratch with associated metadata and relationships. All writes are executed atomically — the request either succeeds entirely or has no effect. Requests are limited to 100 total write operations: 1 for the record itself, plus 1 per compilation linkage, plus 1 per non-localized field value and 1 per localized field value per locale. Requests that exceed this limit will be rejected with a 400 error.","tags":["Records"],"requestBody":{"description":"JSON payload defining the record to create, including core metadata, relationships, and custom field data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewRecordCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewRecordFindOneResponse"}}}},"400":{"description":"Bad Request — validation failure (e.g. invalid parent `workType` for the given child `workType`, or the 100 write-operation limit exceeded)","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"}}}}}}}}}
```

## Find a record by its unique Studio ID

> Find a record by its unique Studio ID.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"NewRecordFindOneResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"INewRecordFindOneResponse","description":"JSON:API response for fetching a single record using the current (v2) format. Contains the full record data, hierarchy path in `meta`, and a self link.","type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseResource"},{"type":"object","properties":{"attributes":{"$ref":"#/components/schemas/RecordMetadataAttributes","required":["workType","primaryTitle"]},"relationships":{"$ref":"#/components/schemas/RecordRelationships","required":["tenant"],"additionalProperties":false}},"required":["attributes","relationships"],"additionalProperties":false}]},"meta":{"$ref":"#/components/schemas/NewRecordMeta"},"links":{"type":"object","properties":{"self":{"type":"string"}}}}},"BaseResource":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBaseResource","description":"JSON:API resource identifier. All Origin Studio API resource objects include at least an `id` (unique string identifier) and a `type` (the JSON:API resource type name, e.g. records, contributors).","type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"],"additionalProperties":false},"RecordMetadataAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordMetadataAttributes","description":"Dynamic map of custom field values stored on a record. Each key corresponds to a field's `key` identifier, and the value can be a string, number, boolean, object, or array depending on the field's schema. This open-ended schema accommodates the tenant-configurable field system.","type":"object","patternProperties":{"^.*$":{"anyOf":[{"type":"string"},{"type":"number","nullable":true},{"type":"boolean","nullable":true},{"type":"array","items":{"type":"string"},"nullable":true},{"type":"object","minProperties":1,"patternProperties":{"^.*$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]}},"additionalProperties":false}]}},"properties":{"primaryTitle":{"type":"string"},"workType":{"$ref":"#/components/schemas/WorkTypes"},"workTypeDetail":{"type":"string"},"lifecycleStatus":{"type":"string","description":"The current lifecycle status (e.g., draft, in-review, published)"},"lifecyclePhase":{"type":"string","enum":["drafting","published"],"description":"The lifecycle phase used for authorization"},"sequenceNumber":{"type":"integer","minimum":1},"genres":{"type":"object","minProperties":1,"patternProperties":{"^.*$":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"runLength":{"type":"number"},"releaseYear":{"type":"number"},"releaseDate":{"type":"string"},"countriesOfOrigin":{"type":"array","items":{"type":"string"}},"primarySpokenLanguage":{"type":"string"},"originNexusId":{"type":"string"},"eidrId":{"type":"string"},"imdbId":{"type":"string"},"gracenoteId":{"type":"string"},"tmdbId":{"type":"string"},"wikidataId":{"type":"string"},"wikipediaId":{"type":"string"},"facebookId":{"type":"string"},"xId":{"type":"string"},"instagramId":{"type":"string"},"upstreamId":{"type":"string"}}},"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"]},"RecordRelationships":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationships","description":"JSON:API relationships for a record resource.","type":"object","properties":{"parent":{"description":"The parent record in the work hierarchy, if any (e.g. an Episode's parent is its Season, or a Season's parent is its Series). Absent for standalone records such as a top-level Movie or Series.","$ref":"#/components/schemas/RecordRelationship"},"compilations":{"description":"Link to the compilation records this record belongs to as a member. Fetch via GET /records/{recordId}/compilations.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"compilationMembers":{"description":"Link to this record's own compilation members, present only when this record is itself a Compilation. Fetch via GET /records/{recordId}/compilationMembers.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"securityTags":{"description":"The security tags (permission groups) applied to this record for access control. A record always has at least one.","$ref":"#/components/schemas/SecurityTagsRelationship"},"creditLists":{"description":"Link to the credit lists (cast/crew credits) associated with this record.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"poster":{"description":"Link to this record's poster media asset, if one has been uploaded.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"tenant":{"description":"The tenant that owns this record.","$ref":"#/components/schemas/TenantRelationship"},"prevRecord":{"description":"The previous sibling record under the same parent, ordered by sequenceNumber (e.g. the prior Episode in a Season). Absent if this is the first sibling or has no siblings.","$ref":"#/components/schemas/RecordRelationship"},"nextRecord":{"description":"The next sibling record under the same parent, ordered by sequenceNumber (e.g. the following Episode in a Season). Absent if this is the last sibling or has no siblings.","$ref":"#/components/schemas/RecordRelationship"}},"required":["tenant"],"additionalProperties":false},"RecordRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationship","description":"A relationship to a record","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]}},"required":["id","type"]},"meta":{"type":"object","properties":{"primaryTitle":{"type":"string"}}},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data"]},"LinksRelated":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ILinks","description":"A JSON:API links object with an absolute or relative 'related' link","type":"object","required":["related"],"properties":{"related":{"type":"string"}},"additionalProperties":false},"SecurityTagsRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ISecurityTagsRelationship","description":"A relationship to one or more security tags","type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","type"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["securityTags"]}}}}},"additionalProperties":false,"required":["data"]},"TenantRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantRelationship","description":"A relationship to a tenant","type":"object","properties":{"data":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"]},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data","links"],"additionalProperties":false},"NewRecordMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"INewRecordMeta","description":"Metadata for new-format record responses. Contains the record's hierarchical `path` (ancestry chain from the root work type down to the current record) for breadcrumb display and navigation.","type":"object","properties":{"path":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"primaryTitle":{"type":"string"}},"required":["id"],"additionalProperties":false}},"status":{"type":"string","enum":["ACTIVE","DELETED"]},"availableLocales":{"type":"array","items":{"type":"string"}},"viewingLocale":{"type":"string","description":"The locale the section/field visibility (redactions) was evaluated for. Echoes the request's `viewingLocale` query parameter (default 'en'). This is not content selection, the response always carries all locales."},"redactions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"path":{"type":"string"},"reason":{"type":"string","enum":["unauthorized","stale"]}}}}},"required":["path","status","availableLocales"],"additionalProperties":false},"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":{"/records/{recordId}":{"get":{"summary":"Find a record by its unique Studio ID","operationId":"newRecordFindOne","description":"Find a record by its unique Studio ID.","tags":["Records"],"parameters":[{"name":"recordId","description":"The unique Studio ID of the record to retrieve","in":"path","required":true,"schema":{"type":"string"}},{"name":"tenantId","description":"Overrides which tenant to retrieve the record from, instead of the caller's own tenant. Overriding is subject to the caller's own access-control permissions in the target tenant.","in":"query","required":false,"schema":{"type":"string"}},{"name":"meta.viewingLocale","description":"The locale currently being viewed. This does NOT select which data is returned (the response always carries all locales); it only sets the perspective used to evaluate which sections/fields are hidden (meta.redactions), so unauthorized sections are hidden even for locales that have no data yet. The resolved value is echoed back in meta.viewingLocale. Defaults to 'en'.","in":"query","required":false,"style":"form","explode":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewRecordFindOneResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Update a record's core metadata or its relationships using its unique Studio ID

> Update a record's core metadata, field values, or relationships using its unique Studio ID. Field value and core metadata writes are executed atomically — the request either succeeds entirely or has no effect. Requests are limited to 99 total field write operations (1 per non-localized field value and 1 per localized field value per locale). Requests that exceed this limit will be rejected with a 400 error.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"NewRecordUpdateOneRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"INewRecordUpdateOneRequest","description":"Request body for partially updating a record using the current (v2) format. Supports updating core metadata attributes and/or replacing the record's security tag relationships in a single request.","type":"object","required":["data"],"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","required":["id","type"],"additionalProperties":false,"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]},"attributes":{"type":"object","additionalProperties":true,"minProperties":1,"patternProperties":{"^.*$":{"anyOf":[{"type":"string"},{"type":"number","nullable":true},{"type":"null"},{"type":"boolean","nullable":true},{"type":"array","items":{"type":"string"},"nullable":true},{"type":"object","minProperties":1,"patternProperties":{"^.*$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]}},"additionalProperties":false}]}},"properties":{"primaryTitle":{"type":"string","nullable":true},"workType":{"$ref":"#/components/schemas/WorkTypes","nullable":true},"workTypeDetail":{"type":"string","nullable":true},"lifecycleStatus":{"type":"string","description":"The current lifecycle status (e.g., draft, in-review, published)","nullable":true},"sequenceNumber":{"type":"integer","nullable":true,"minimum":1},"genres":{"type":"object","minProperties":1,"nullable":true,"patternProperties":{"^.*$":{"oneOf":[{"type":"array","nullable":true,"items":{"type":"string"}},{"type":"null"}]}},"additionalProperties":false},"runLength":{"type":"number","nullable":true},"releaseYear":{"type":"number","nullable":true},"releaseDate":{"type":"string","nullable":true},"countriesOfOrigin":{"type":"array","items":{"type":"string"},"nullable":true},"primarySpokenLanguage":{"type":"string","nullable":true},"originNexusId":{"type":"string","nullable":true},"eidrId":{"type":"string","nullable":true},"imdbId":{"type":"string","nullable":true},"gracenoteId":{"type":"string","nullable":true},"tmdbId":{"type":"string","nullable":true},"wikidataId":{"type":"string","nullable":true},"wikipediaId":{"type":"string","nullable":true},"facebookId":{"type":"string","nullable":true},"xId":{"type":"string","nullable":true},"instagramId":{"type":"string","nullable":true}}},"relationships":{"description":"Relationships to replace on the record.","type":"object","additionalProperties":false,"properties":{"securityTags":{"description":"Fully replaces the record's current set of security tags with this list (unlike POST .../relationships/securityTags, which only appends). At least one tag must remain.","$ref":"#/components/schemas/SecurityTagsRelationship"}}}}}}},"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}}}}},"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"]},"SecurityTagsRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ISecurityTagsRelationship","description":"A relationship to one or more security tags","type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","type"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["securityTags"]}}}}},"additionalProperties":false,"required":["data"]},"NewRecordFindOneResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"INewRecordFindOneResponse","description":"JSON:API response for fetching a single record using the current (v2) format. Contains the full record data, hierarchy path in `meta`, and a self link.","type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseResource"},{"type":"object","properties":{"attributes":{"$ref":"#/components/schemas/RecordMetadataAttributes","required":["workType","primaryTitle"]},"relationships":{"$ref":"#/components/schemas/RecordRelationships","required":["tenant"],"additionalProperties":false}},"required":["attributes","relationships"],"additionalProperties":false}]},"meta":{"$ref":"#/components/schemas/NewRecordMeta"},"links":{"type":"object","properties":{"self":{"type":"string"}}}}},"BaseResource":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBaseResource","description":"JSON:API resource identifier. All Origin Studio API resource objects include at least an `id` (unique string identifier) and a `type` (the JSON:API resource type name, e.g. records, contributors).","type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"],"additionalProperties":false},"RecordMetadataAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordMetadataAttributes","description":"Dynamic map of custom field values stored on a record. Each key corresponds to a field's `key` identifier, and the value can be a string, number, boolean, object, or array depending on the field's schema. This open-ended schema accommodates the tenant-configurable field system.","type":"object","patternProperties":{"^.*$":{"anyOf":[{"type":"string"},{"type":"number","nullable":true},{"type":"boolean","nullable":true},{"type":"array","items":{"type":"string"},"nullable":true},{"type":"object","minProperties":1,"patternProperties":{"^.*$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]}},"additionalProperties":false}]}},"properties":{"primaryTitle":{"type":"string"},"workType":{"$ref":"#/components/schemas/WorkTypes"},"workTypeDetail":{"type":"string"},"lifecycleStatus":{"type":"string","description":"The current lifecycle status (e.g., draft, in-review, published)"},"lifecyclePhase":{"type":"string","enum":["drafting","published"],"description":"The lifecycle phase used for authorization"},"sequenceNumber":{"type":"integer","minimum":1},"genres":{"type":"object","minProperties":1,"patternProperties":{"^.*$":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"runLength":{"type":"number"},"releaseYear":{"type":"number"},"releaseDate":{"type":"string"},"countriesOfOrigin":{"type":"array","items":{"type":"string"}},"primarySpokenLanguage":{"type":"string"},"originNexusId":{"type":"string"},"eidrId":{"type":"string"},"imdbId":{"type":"string"},"gracenoteId":{"type":"string"},"tmdbId":{"type":"string"},"wikidataId":{"type":"string"},"wikipediaId":{"type":"string"},"facebookId":{"type":"string"},"xId":{"type":"string"},"instagramId":{"type":"string"},"upstreamId":{"type":"string"}}},"RecordRelationships":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationships","description":"JSON:API relationships for a record resource.","type":"object","properties":{"parent":{"description":"The parent record in the work hierarchy, if any (e.g. an Episode's parent is its Season, or a Season's parent is its Series). Absent for standalone records such as a top-level Movie or Series.","$ref":"#/components/schemas/RecordRelationship"},"compilations":{"description":"Link to the compilation records this record belongs to as a member. Fetch via GET /records/{recordId}/compilations.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"compilationMembers":{"description":"Link to this record's own compilation members, present only when this record is itself a Compilation. Fetch via GET /records/{recordId}/compilationMembers.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"securityTags":{"description":"The security tags (permission groups) applied to this record for access control. A record always has at least one.","$ref":"#/components/schemas/SecurityTagsRelationship"},"creditLists":{"description":"Link to the credit lists (cast/crew credits) associated with this record.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"poster":{"description":"Link to this record's poster media asset, if one has been uploaded.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"tenant":{"description":"The tenant that owns this record.","$ref":"#/components/schemas/TenantRelationship"},"prevRecord":{"description":"The previous sibling record under the same parent, ordered by sequenceNumber (e.g. the prior Episode in a Season). Absent if this is the first sibling or has no siblings.","$ref":"#/components/schemas/RecordRelationship"},"nextRecord":{"description":"The next sibling record under the same parent, ordered by sequenceNumber (e.g. the following Episode in a Season). Absent if this is the last sibling or has no siblings.","$ref":"#/components/schemas/RecordRelationship"}},"required":["tenant"],"additionalProperties":false},"RecordRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationship","description":"A relationship to a record","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]}},"required":["id","type"]},"meta":{"type":"object","properties":{"primaryTitle":{"type":"string"}}},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data"]},"LinksRelated":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ILinks","description":"A JSON:API links object with an absolute or relative 'related' link","type":"object","required":["related"],"properties":{"related":{"type":"string"}},"additionalProperties":false},"TenantRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantRelationship","description":"A relationship to a tenant","type":"object","properties":{"data":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"]},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data","links"],"additionalProperties":false},"NewRecordMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"INewRecordMeta","description":"Metadata for new-format record responses. Contains the record's hierarchical `path` (ancestry chain from the root work type down to the current record) for breadcrumb display and navigation.","type":"object","properties":{"path":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"primaryTitle":{"type":"string"}},"required":["id"],"additionalProperties":false}},"status":{"type":"string","enum":["ACTIVE","DELETED"]},"availableLocales":{"type":"array","items":{"type":"string"}},"viewingLocale":{"type":"string","description":"The locale the section/field visibility (redactions) was evaluated for. Echoes the request's `viewingLocale` query parameter (default 'en'). This is not content selection, the response always carries all locales."},"redactions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"path":{"type":"string"},"reason":{"type":"string","enum":["unauthorized","stale"]}}}}},"required":["path","status","availableLocales"],"additionalProperties":false}}},"paths":{"/records/{recordId}":{"patch":{"summary":"Update a record's core metadata or its relationships using its unique Studio ID","operationId":"newRecordUpdateOne","description":"Update a record's core metadata, field values, or relationships using its unique Studio ID. Field value and core metadata writes are executed atomically — the request either succeeds entirely or has no effect. Requests are limited to 99 total field write operations (1 per non-localized field value and 1 per localized field value per locale). Requests that exceed this limit will be rejected with a 400 error.","tags":["Records"],"parameters":[{"name":"recordId","description":"The unique Studio ID of the record to update","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Partial update payload describing the metadata or relationships to modify for the specified record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewRecordUpdateOneRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewRecordFindOneResponse"}}}}}}}}}
```

## Search for records in tenant library

> Search and filter for records in your tenant library.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"TenantLibrarySearchRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantLibrarySearchRequest","type":"object","description":"The request body for a search and filter request to the tenant library. `data.attributes.group` is a boolean tree of filters — see ITenantLibrarySearchQueryGroup and ITenantLibrarySearchCondition for the field/operator semantics, and the `examples` below for common patterns including nested AND/OR/NOT composition, genres, and hierarchy traversal.","properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","properties":{"type":{"type":"string","enum":["searchQueries"]},"attributes":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/ITenantLibrarySearchQueryGroup"}},"required":["group"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false,"definitions":{"ITenantLibrarySearchOperator":{"type":"string","description":"The operator to use for a search condition. eq — exact match. ne — exact exclusion; a record with NO value for the field satisfies ne (Salesforce SOQL-style: 'not equal' includes 'not set'), not the stricter SQL null-handling reading. contains — substring/token match on analyzed text fields (e.g. tenant custom text fields); on keyword-mapped fields (e.g. the genres field, or path) it degenerates to an exact match, not substring — there is no way to discover a field's underlying mapping from this API, so prefer eq/starts_with on fields you know are keyword-like. not_contains — negation of contains, with the same per-field keyword-vs-text caveat, and the same 'no value satisfies the negation' semantics as ne. starts_with — prefix match; not supported on numeric fields or on analyzed text fields without keyword search enabled. lt/lte/gt/gte — numeric or date range comparisons. exists — field has any non-null value. not_exists — field is absent or null; the strict/only correct way to test absence (ne does NOT distinguish absence from 'anything else' — both are satisfied).","enum":["eq","ne","contains","not_contains","starts_with","lt","lte","gt","gte","exists","not_exists"]},"ITenantLibrarySearchCondition":{"type":"object","properties":{"field":{"description":"A system-owned field name or a tenant custom field key. Notable fields: `genres` — matched against the request's `filter.locale` (or 'en' if omitted), the same way a localized tenant custom field is. `parentId` — matches only the immediate parent (one hierarchy level); to match an entire subtree at any depth (e.g. every Season and Episode under a Series), use `path` with operator `starts_with` and the ancestor's own recordId as the value instead — `path` is the full ancestor chain including the record's own ID, joined with '|'. Any field name not in the enum below is treated as a tenant custom field key — fetch valid keys via `GET /fields`.","oneOf":[{"type":"string","enum":["workType","workTypeDetail","primaryTitle","originNexusId","upstreamId","genres","releaseYear","sequenceNumber","created","updated","deletedAt","tenantId","recordId","status","lifecycleStatus","lifecyclePhase","parentId","path","securityTagIds","dataDeliveryPackages","eidrId","imdbId","gracenoteId","tmdbId","wikidataId","wikipediaId","facebookId","xId","instagramId"]},{"type":"string","pattern":"^[a-z][a-zA-Z0-9_-]{2,49}$","description":"Tenant custom field key"}]},"operator":{"$ref":"#/components/schemas/ITenantLibrarySearchOperator"},"value":{"description":"The value to search for. An array value with operator eq means 'matches any of these' (an OR/IN check on a single field), not 'equals this exact array'. Omit entirely for exists/not_exists.","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]}},"required":["field","operator"],"additionalProperties":false},"ITenantLibrarySearchQueryGroup":{"type":"object","properties":{"operator":{"type":"string","description":"How this node's own conditions and groups combine: AND — all must match; OR — at least one must match; NOT — negates the COMBINED result of all of this node's own conditions/groups (which are ANDed together first) — it does not distinguish or independently negate each one. To negate a single condition on its own, put it alone in its own NOT group rather than mixing it with siblings.","enum":["AND","OR","NOT"]},"conditions":{"type":"array","description":"Leaf filters evaluated at this node, combined per this node's own operator.","items":{"$ref":"#/components/schemas/ITenantLibrarySearchCondition"}},"groups":{"type":"array","description":"Nested where-nodes for arbitrary AND/OR/NOT composition, combined with this node's own conditions per this node's operator.","items":{"$ref":"#/components/schemas/ITenantLibrarySearchQueryGroup"}}},"required":["operator"],"anyOf":[{"required":["conditions"]},{"required":["groups"]}],"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}}}}},"ITenantLibrarySearchQueryGroup":{"type":"object","properties":{"operator":{"type":"string","description":"How this node's own conditions and groups combine: AND — all must match; OR — at least one must match; NOT — negates the COMBINED result of all of this node's own conditions/groups (which are ANDed together first) — it does not distinguish or independently negate each one. To negate a single condition on its own, put it alone in its own NOT group rather than mixing it with siblings.","enum":["AND","OR","NOT"]},"conditions":{"type":"array","description":"Leaf filters evaluated at this node, combined per this node's own operator.","items":{"$ref":"#/components/schemas/ITenantLibrarySearchCondition"}},"groups":{"type":"array","description":"Nested where-nodes for arbitrary AND/OR/NOT composition, combined with this node's own conditions per this node's operator.","items":{"$ref":"#/components/schemas/ITenantLibrarySearchQueryGroup"}}},"required":["operator"],"anyOf":[{"required":["conditions"]},{"required":["groups"]}],"additionalProperties":false},"ITenantLibrarySearchCondition":{"type":"object","properties":{"field":{"description":"A system-owned field name or a tenant custom field key. Notable fields: `genres` — matched against the request's `filter.locale` (or 'en' if omitted), the same way a localized tenant custom field is. `parentId` — matches only the immediate parent (one hierarchy level); to match an entire subtree at any depth (e.g. every Season and Episode under a Series), use `path` with operator `starts_with` and the ancestor's own recordId as the value instead — `path` is the full ancestor chain including the record's own ID, joined with '|'. Any field name not in the enum below is treated as a tenant custom field key — fetch valid keys via `GET /fields`.","oneOf":[{"type":"string","enum":["workType","workTypeDetail","primaryTitle","originNexusId","upstreamId","genres","releaseYear","sequenceNumber","created","updated","deletedAt","tenantId","recordId","status","lifecycleStatus","lifecyclePhase","parentId","path","securityTagIds","dataDeliveryPackages","eidrId","imdbId","gracenoteId","tmdbId","wikidataId","wikipediaId","facebookId","xId","instagramId"]},{"type":"string","pattern":"^[a-z][a-zA-Z0-9_-]{2,49}$","description":"Tenant custom field key"}]},"operator":{"$ref":"#/components/schemas/ITenantLibrarySearchOperator"},"value":{"description":"The value to search for. An array value with operator eq means 'matches any of these' (an OR/IN check on a single field), not 'equals this exact array'. Omit entirely for exists/not_exists.","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]}},"required":["field","operator"],"additionalProperties":false},"ITenantLibrarySearchOperator":{"type":"string","description":"The operator to use for a search condition. eq — exact match. ne — exact exclusion; a record with NO value for the field satisfies ne (Salesforce SOQL-style: 'not equal' includes 'not set'), not the stricter SQL null-handling reading. contains — substring/token match on analyzed text fields (e.g. tenant custom text fields); on keyword-mapped fields (e.g. the genres field, or path) it degenerates to an exact match, not substring — there is no way to discover a field's underlying mapping from this API, so prefer eq/starts_with on fields you know are keyword-like. not_contains — negation of contains, with the same per-field keyword-vs-text caveat, and the same 'no value satisfies the negation' semantics as ne. starts_with — prefix match; not supported on numeric fields or on analyzed text fields without keyword search enabled. lt/lte/gt/gte — numeric or date range comparisons. exists — field has any non-null value. not_exists — field is absent or null; the strict/only correct way to test absence (ne does NOT distinguish absence from 'anything else' — both are satisfied).","enum":["eq","ne","contains","not_contains","starts_with","lt","lte","gt","gte","exists","not_exists"]},"TenantLibrarySearchResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantLibrarySearchResponse","description":"Response returned by the tenant library record search endpoint. Contains a paginated array of matching record resources, with pagination links and total count metadata.","type":"object","properties":{"data":{"type":"array","items":{"type":"object","required":["id","type","attributes","meta"],"additionalProperties":false,"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]},"attributes":{"$ref":"#/components/schemas/TenantLibraryRecordAttributes"},"relationships":{"$ref":"#/components/schemas/RecordRelationships"},"meta":{"$ref":"#/components/schemas/RecordMeta"},"links":{"$ref":"#/components/schemas/LinksSelf"}}},"additionalProperties":false},"links":{"type":"object","properties":{"self":{"type":"string"},"next":{"type":"string"},"prev":{"type":"string"}},"additionalProperties":false},"meta":{"type":"object","properties":{"total":{"type":"integer"},"page":{"type":"integer"},"perPage":{"type":"integer"},"unauthorizedCount":{"type":"integer"}},"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false},"TenantLibraryRecordAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantLibraryRecordAttributes","description":"Fields from tenant-library record used in the API response","type":"object","allOf":[{"$ref":"#/components/schemas/OpenSearchTenantLibraryCommonFields","required":["workType","primaryTitle","lifecycleStatus","lifecyclePhase","created","updated"]},{"$ref":"#/components/schemas/RecordCommonIdentifierAttributes"},{"type":"object","properties":{"genres":{"type":"object","patternProperties":{"^.*$":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}},"additionalProperties":false}]},"OpenSearchTenantLibraryCommonFields":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IOpenSearchTenantLibraryCommonFields","description":"Common metadata fields shared across tenant library search index entries, including timestamps, work type, lifecycle state, primary title, and optional media cover image.","type":"object","properties":{"created":{"type":"string","format":"date-time"},"updated":{"type":"string","format":"date-time"},"deletedAt":{"type":"string","format":"date-time"},"workType":{"type":"string"},"workTypeDetail":{"type":"string"},"lifecycleStatus":{"type":"string","description":"The current lifecycle status"},"lifecyclePhase":{"type":"string","description":"The current lifecycle phase"},"primaryTitle":{"type":"string"},"sequenceNumber":{"type":"integer"},"releaseYear":{"type":"integer"},"coverImage":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"},"height":{"type":"integer"},"width":{"type":"integer"}},"required":["key","value"],"additionalProperties":false}},"additionalProperties":false},"RecordCommonIdentifierAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordCommonIdentifierAttributes","description":"Common identifier attributes for record","type":"object","properties":{"originNexusId":{"type":"string"},"eidrId":{"type":"string"},"imdbId":{"type":"string"},"gracenoteId":{"type":"string"},"tmdbId":{"type":"string"},"wikidataId":{"type":"string"},"wikipediaId":{"type":"string"},"facebookId":{"type":"string"},"xId":{"type":"string"},"instagramId":{"type":"string"},"upstreamId":{"type":"string"}},"additionalProperties":false},"RecordRelationships":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationships","description":"JSON:API relationships for a record resource.","type":"object","properties":{"parent":{"description":"The parent record in the work hierarchy, if any (e.g. an Episode's parent is its Season, or a Season's parent is its Series). Absent for standalone records such as a top-level Movie or Series.","$ref":"#/components/schemas/RecordRelationship"},"compilations":{"description":"Link to the compilation records this record belongs to as a member. Fetch via GET /records/{recordId}/compilations.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"compilationMembers":{"description":"Link to this record's own compilation members, present only when this record is itself a Compilation. Fetch via GET /records/{recordId}/compilationMembers.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"securityTags":{"description":"The security tags (permission groups) applied to this record for access control. A record always has at least one.","$ref":"#/components/schemas/SecurityTagsRelationship"},"creditLists":{"description":"Link to the credit lists (cast/crew credits) associated with this record.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"poster":{"description":"Link to this record's poster media asset, if one has been uploaded.","type":"object","properties":{"links":{"type":"object","properties":{"related":{"type":"string"}}}},"required":["links"],"additionalProperties":false},"tenant":{"description":"The tenant that owns this record.","$ref":"#/components/schemas/TenantRelationship"},"prevRecord":{"description":"The previous sibling record under the same parent, ordered by sequenceNumber (e.g. the prior Episode in a Season). Absent if this is the first sibling or has no siblings.","$ref":"#/components/schemas/RecordRelationship"},"nextRecord":{"description":"The next sibling record under the same parent, ordered by sequenceNumber (e.g. the following Episode in a Season). Absent if this is the last sibling or has no siblings.","$ref":"#/components/schemas/RecordRelationship"}},"required":["tenant"],"additionalProperties":false},"RecordRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationship","description":"A relationship to a record","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]}},"required":["id","type"]},"meta":{"type":"object","properties":{"primaryTitle":{"type":"string"}}},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data"]},"LinksRelated":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ILinks","description":"A JSON:API links object with an absolute or relative 'related' link","type":"object","required":["related"],"properties":{"related":{"type":"string"}},"additionalProperties":false},"SecurityTagsRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ISecurityTagsRelationship","description":"A relationship to one or more security tags","type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","type"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["securityTags"]}}}}},"additionalProperties":false,"required":["data"]},"TenantRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantRelationship","description":"A relationship to a tenant","type":"object","properties":{"data":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"]},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data","links"],"additionalProperties":false},"RecordMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordMeta","description":"Metadata attached to a record resource outside its core attributes. `path` represents the hierarchical ancestry of the record (e.g., Series → Season for an Episode), providing context for navigation and display.","type":"object","properties":{"path":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"primaryTitle":{"type":"string"}},"required":["id"],"additionalProperties":false}},"status":{"type":"string","enum":["ACTIVE","DELETED"]},"availableLocales":{"type":"array","items":{"type":"string"}},"tenantId":{"type":"string"},"childrenStats":{"type":"object","properties":{"count":{"type":"object","additionalProperties":{"type":"number"}}},"additionalProperties":false},"redactions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"path":{"type":"string"},"reason":{"type":"string","enum":["unauthorized"]}}}}},"required":["path","status","availableLocales"],"additionalProperties":false},"LinksSelf":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ILinksSelf","description":"A JSON:API links object with an absolute or relative 'self' link","type":"object","required":["self"],"properties":{"self":{"type":"string"}},"additionalProperties":false},"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":{"/records/search":{"post":{"summary":"Search for records in tenant library","operationId":"searchTenantLibraryRecords","description":"Search and filter for records in your tenant library.","tags":["Records"],"parameters":[{"name":"page.size","description":"The number of results to return per page, default is 25, maximum is 25","in":"query","required":false,"schema":{"type":"integer","default":25,"maximum":25}},{"name":"page.number","description":"The page number to return, default is 0","in":"query","required":false,"schema":{"type":"integer","default":0}},{"name":"includeChildrenCount","description":"Include the total number of results in the response","in":"query","required":false,"schema":{"type":"boolean","default":false}},{"name":"filter.locale","description":"BCP 47 language tag, e.g. 'en', 'fr', 'pt-br'. Defaults to 'en' when omitted. Selects the locale for anything that varies by locale: any `where` condition on a localized field is matched against that locale's value, and localized fields in the response reflect that locale. Non-localized fields are unaffected and are always returned as-is.","in":"query","required":false,"schema":{"type":"string"}},{"name":"sort","description":"Comma-separated list of fields to sort by. Use '-' prefix for descending order","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Search criteria, filters, and query groups used to retrieve tenant library records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLibrarySearchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLibrarySearchResponse"}}}},"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 job

> Create a new record job.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"CreateRecordJobRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordCreateJobRequest","description":"Request body for creating a record background job. Specify the job type (e.g., `deleteRecord`) and the required parameters. The created job can be polled via `GET /record-jobs/{jobId}`.","type":"object","definitions":{"IRecordIdJobParameters":{"type":"object","description":"Parameters for job types that only need a target record id: deleteRecord, restoreRecord, permanentlyDeleteRecord.","properties":{"recordId":{"type":"string"}},"required":["recordId"],"additionalProperties":false},"IRecordCreateRecordFromScratchJobParameters":{"type":"object","properties":{"workType":{"$ref":"#/components/schemas/WorkTypes"},"primaryTitle":{"type":"string"},"releaseYear":{"type":"number"},"workTypeDetail":{"type":"string"},"parentRecordId":{"type":"string"},"securityTags":{"type":"array","items":{"type":"string"}},"editClass":{"type":"string"},"intendedTerritories":{"type":"array","items":{"type":"string"}},"seasons":{"type":"array","items":{"type":"object","properties":{"primaryTitle":{"type":"string"},"releaseYear":{"type":"number"},"workType":{"type":"string","enum":["Season"]},"securityTags":{"type":"array","items":{"type":"string"}}},"required":["primaryTitle","workType"]}},"episodes":{"type":"array","items":{"type":"object","properties":{"primaryTitle":{"type":"string"},"releaseYear":{"type":"number"},"workType":{"type":"string","enum":["Episode"]},"securityTags":{"type":"array","items":{"type":"string"}}},"required":["primaryTitle","workType"]}},"compilations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}},"required":["workType"],"additionalProperties":false},"IRecordCreateMediaFromUrlJobParameters":{"type":"object","properties":{"urls":{"description":"Media source URLs to fetch and attach; supply at least one. Each must use `https` and be served by an approved media host; a URL on any other host is rejected without being fetched. Rejections are reported per URL, so the remaining entries in the job still run.","type":"array","items":{"type":"string","format":"uri"},"maxItems":100},"recordId":{"type":"string"},"imageType":{"$ref":"#/components/schemas/MediaAttributeImageType"},"locale":{"description":"Optional BCP 47 language tag (optionally region- or script-qualified, e.g. `en`, `pt-br`, `zh-Hans`) describing the language of the fetched media. Applies uniformly to every entry in `urls`. Normalized against Studio's canonical locale list when the media record is written; unrecognized values are dropped rather than defaulted.","type":"string"}},"required":["urls","recordId","imageType"],"additionalProperties":false},"IRecordMigrateLifecycleStatusJobParameters":{"type":"object","properties":{"oldLifecycleStatus":{"type":"string"},"newLifecycleStatus":{"type":"string"},"workType":{"$ref":"#/components/schemas/WorkTypes"}},"required":["oldLifecycleStatus","newLifecycleStatus","workType"],"additionalProperties":false},"IImportSeriesOriginNexusJobParameters":{"type":"object","properties":{"seriesId":{"type":"string"},"securityTags":{"type":"array","items":{"type":"string"}},"importOptions":{"type":"object","description":"Controls Origin Nexus import depth and series-level media/credits.","properties":{"seriesOnly":{"type":"boolean","description":"When true, skip seasons/episodes and import the series record only. When omitted, the full hierarchy (seasons and episodes) is imported by default."},"importCredits":{"type":"boolean","description":"When false, skip importing credits and linked contributors from Origin Nexus. When omitted, credits and contributors are imported by default."},"importImages":{"type":"boolean","description":"When false, skip importing poster/cover images. When omitted, images are imported by default."}},"additionalProperties":false}},"required":["seriesId"],"additionalProperties":false},"IImportMoviesOriginNexusJobParameters":{"type":"object","properties":{"movieId":{"type":"string"},"securityTags":{"type":"array","items":{"type":"string"}},"importOptions":{"type":"object","description":"Controls movie-level media/credits import.","properties":{"importCredits":{"type":"boolean","description":"When false, skip importing credits and linked contributors from Origin Nexus. When omitted, credits and contributors are imported by default."},"importImages":{"type":"boolean","description":"When false, skip importing poster/cover images. When omitted, images are imported by default."}},"additionalProperties":false}},"required":["movieId"],"additionalProperties":false},"IRecordBulkEditJobParameters":{"type":"object","description":"Parameters for a bulk-edit job: apply the same field edits to every record matching a selection predicate, for one locale. The state machine resolves the selection to concrete record ids server-side, then patches each record.","properties":{"locale":{"type":"string","description":"The single locale all edits target (e.g. `en`). Optional: required only when at least one edit targets a localized field. A job editing only unlocalized fields (e.g. `releaseYear`) may omit it; a localized edit without a locale fails that field."},"edits":{"type":"array","minItems":1,"description":"Field edits applied to every selected record. `overwrite` replaces the field value for the job locale (`value` required); `delete` clears it.","items":{"type":"object","properties":{"fieldKey":{"type":"string"},"action":{"type":"string","enum":["overwrite","delete"]},"value":{"description":"New value for `overwrite`; ignored for `delete`. Arbitrary JSON validated per field at write time."}},"required":["fieldKey","action"],"additionalProperties":false}},"selection":{"type":"object","description":"Resolved Studio Library selection predicate. When `searchGroup` is present (an all-in-view or hierarchy selection), every record matching it is in scope, minus `excludeRecordIds`, plus `includeRecordIds`. When `searchGroup` is absent, only `includeRecordIds` (a pure manual-tick selection) are edited.","properties":{"searchGroup":{"type":"object","description":"Boolean query tree (ITenantLibrarySearchQueryGroup). Present for all-in-view / hierarchy selections; omitted for a pure manual-tick selection. Validated by the search service when the enumeration query runs.","additionalProperties":true},"includeRecordIds":{"type":"array","items":{"type":"string"}},"excludeRecordIds":{"type":"array","items":{"type":"string"}}},"required":[],"additionalProperties":false}},"required":["edits","selection"],"additionalProperties":false}},"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"allOf":[{"$ref":"#/components/schemas/BaseCreateRequest"},{"type":"object","properties":{"attributes":{"type":"object","properties":{"type":{"type":"string","description":"The kind of background job to run. Determines which shape `parameters` must match: `deleteRecord`/`restoreRecord`/`permanentlyDeleteRecord` take only a `recordId` — WARNING: `deleteRecord` and `permanentlyDeleteRecord` act recursively on the entire hierarchy under that record (e.g. deleting a Series also deletes all of its Seasons and Episodes), not just the target record itself; `restoreRecord` restores the same hierarchy back. `permanentlyDeleteRecord` is irreversible. `createRecordFromScratch` creates a new record (optionally with seasons/episodes/compilation links); `createMediaFromUrl` fetches and attaches media from external URLs; `migrateRecordLifecycleStatus` bulk-moves all records of a workType from one lifecycle status to another; `importSeriesOriginNexus`/`importMoviesOriginNexus` import a Series or Movie (and its hierarchy) from Origin Nexus by its Origin ID.","enum":["deleteRecord","restoreRecord","permanentlyDeleteRecord","createRecordFromScratch","createMediaFromUrl","migrateRecordLifecycleStatus","importSeriesOriginNexus","importMoviesOriginNexus","bulkEditRecords"]},"parameters":{"description":"Job-specific parameters. The required shape depends on `type` — see the `type` field description.","oneOf":[{"$ref":"#/components/schemas/IRecordIdJobParameters"},{"$ref":"#/components/schemas/IRecordCreateRecordFromScratchJobParameters"},{"$ref":"#/components/schemas/IRecordCreateMediaFromUrlJobParameters"},{"$ref":"#/components/schemas/IRecordMigrateLifecycleStatusJobParameters"},{"$ref":"#/components/schemas/IImportSeriesOriginNexusJobParameters"},{"$ref":"#/components/schemas/IImportMoviesOriginNexusJobParameters"},{"$ref":"#/components/schemas/IRecordBulkEditJobParameters"}]}},"required":["type","parameters"],"additionalProperties":false}},"required":["attributes"],"additionalProperties":false}]}},"required":["data"],"additionalProperties":false},"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"]},"MediaAttributeImageType":{"$id":"media_attribute_image_type","$schema":"http://json-schema.org/draft-07/schema#","title":"IMediaAttributeImageType","description":"Editorial classification for an image asset associated with a record. Used to distinguish between general photos, talent portraits, theatrical marketing posters, and tile/thumbnail formats.","type":"string","enum":["Photo","Portrait","Poster","Theatrical Poster","Tile"]},"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}}}}},"BaseCreateRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBaseCreateRequest","description":"Base JSON:API shape for create requests. The `type` field is required and must match the target resource type. The `id` field is optional; if omitted, the server generates a unique ID for the new resource.","type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["type"]},"IRecordIdJobParameters":{"type":"object","description":"Parameters for job types that only need a target record id: deleteRecord, restoreRecord, permanentlyDeleteRecord.","properties":{"recordId":{"type":"string"}},"required":["recordId"],"additionalProperties":false},"IRecordCreateRecordFromScratchJobParameters":{"type":"object","properties":{"workType":{"$ref":"#/components/schemas/WorkTypes"},"primaryTitle":{"type":"string"},"releaseYear":{"type":"number"},"workTypeDetail":{"type":"string"},"parentRecordId":{"type":"string"},"securityTags":{"type":"array","items":{"type":"string"}},"editClass":{"type":"string"},"intendedTerritories":{"type":"array","items":{"type":"string"}},"seasons":{"type":"array","items":{"type":"object","properties":{"primaryTitle":{"type":"string"},"releaseYear":{"type":"number"},"workType":{"type":"string","enum":["Season"]},"securityTags":{"type":"array","items":{"type":"string"}}},"required":["primaryTitle","workType"]}},"episodes":{"type":"array","items":{"type":"object","properties":{"primaryTitle":{"type":"string"},"releaseYear":{"type":"number"},"workType":{"type":"string","enum":["Episode"]},"securityTags":{"type":"array","items":{"type":"string"}}},"required":["primaryTitle","workType"]}},"compilations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}},"required":["workType"],"additionalProperties":false},"IRecordCreateMediaFromUrlJobParameters":{"type":"object","properties":{"urls":{"description":"Media source URLs to fetch and attach; supply at least one. Each must use `https` and be served by an approved media host; a URL on any other host is rejected without being fetched. Rejections are reported per URL, so the remaining entries in the job still run.","type":"array","items":{"type":"string","format":"uri"},"maxItems":100},"recordId":{"type":"string"},"imageType":{"$ref":"#/components/schemas/MediaAttributeImageType"},"locale":{"description":"Optional BCP 47 language tag (optionally region- or script-qualified, e.g. `en`, `pt-br`, `zh-Hans`) describing the language of the fetched media. Applies uniformly to every entry in `urls`. Normalized against Studio's canonical locale list when the media record is written; unrecognized values are dropped rather than defaulted.","type":"string"}},"required":["urls","recordId","imageType"],"additionalProperties":false},"IRecordMigrateLifecycleStatusJobParameters":{"type":"object","properties":{"oldLifecycleStatus":{"type":"string"},"newLifecycleStatus":{"type":"string"},"workType":{"$ref":"#/components/schemas/WorkTypes"}},"required":["oldLifecycleStatus","newLifecycleStatus","workType"],"additionalProperties":false},"IImportSeriesOriginNexusJobParameters":{"type":"object","properties":{"seriesId":{"type":"string"},"securityTags":{"type":"array","items":{"type":"string"}},"importOptions":{"type":"object","description":"Controls Origin Nexus import depth and series-level media/credits.","properties":{"seriesOnly":{"type":"boolean","description":"When true, skip seasons/episodes and import the series record only. When omitted, the full hierarchy (seasons and episodes) is imported by default."},"importCredits":{"type":"boolean","description":"When false, skip importing credits and linked contributors from Origin Nexus. When omitted, credits and contributors are imported by default."},"importImages":{"type":"boolean","description":"When false, skip importing poster/cover images. When omitted, images are imported by default."}},"additionalProperties":false}},"required":["seriesId"],"additionalProperties":false},"IImportMoviesOriginNexusJobParameters":{"type":"object","properties":{"movieId":{"type":"string"},"securityTags":{"type":"array","items":{"type":"string"}},"importOptions":{"type":"object","description":"Controls movie-level media/credits import.","properties":{"importCredits":{"type":"boolean","description":"When false, skip importing credits and linked contributors from Origin Nexus. When omitted, credits and contributors are imported by default."},"importImages":{"type":"boolean","description":"When false, skip importing poster/cover images. When omitted, images are imported by default."}},"additionalProperties":false}},"required":["movieId"],"additionalProperties":false},"IRecordBulkEditJobParameters":{"type":"object","description":"Parameters for a bulk-edit job: apply the same field edits to every record matching a selection predicate, for one locale. The state machine resolves the selection to concrete record ids server-side, then patches each record.","properties":{"locale":{"type":"string","description":"The single locale all edits target (e.g. `en`). Optional: required only when at least one edit targets a localized field. A job editing only unlocalized fields (e.g. `releaseYear`) may omit it; a localized edit without a locale fails that field."},"edits":{"type":"array","minItems":1,"description":"Field edits applied to every selected record. `overwrite` replaces the field value for the job locale (`value` required); `delete` clears it.","items":{"type":"object","properties":{"fieldKey":{"type":"string"},"action":{"type":"string","enum":["overwrite","delete"]},"value":{"description":"New value for `overwrite`; ignored for `delete`. Arbitrary JSON validated per field at write time."}},"required":["fieldKey","action"],"additionalProperties":false}},"selection":{"type":"object","description":"Resolved Studio Library selection predicate. When `searchGroup` is present (an all-in-view or hierarchy selection), every record matching it is in scope, minus `excludeRecordIds`, plus `includeRecordIds`. When `searchGroup` is absent, only `includeRecordIds` (a pure manual-tick selection) are edited.","properties":{"searchGroup":{"type":"object","description":"Boolean query tree (ITenantLibrarySearchQueryGroup). Present for all-in-view / hierarchy selections; omitted for a pure manual-tick selection. Validated by the search service when the enumeration query runs.","additionalProperties":true},"includeRecordIds":{"type":"array","items":{"type":"string"}},"excludeRecordIds":{"type":"array","items":{"type":"string"}}},"required":[],"additionalProperties":false}},"required":["edits","selection"],"additionalProperties":false},"CreateRecordJobResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ICreateRecordJobResponse","description":"Response returned after successfully creating a record background job. Contains the new job's ID and initial status attributes.","type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/BaseCreateRequest"},{"additionalProperties":false,"properties":{"id":{"type":"string"},"attributes":{"$ref":"#/components/schemas/RecordJob"}},"required":["id","attributes"]}]}},"required":["data"],"additionalProperties":false},"RecordJob":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordJob","description":"Attributes for a record background job. Extends the base background job attributes with record-specific job type and parameters. Currently supports `deleteRecord` as a job type, which asynchronously removes a record and all associated data.","type":"object","allOf":[{"$ref":"#/components/schemas/BackgroundJobAttributes"},{"type":"object","properties":{"type":{"type":"string","enum":["deleteRecord","restoreRecord","permanentlyDeleteRecord","createRecordFromScratch","createMediaFromUrl","migrateRecordLifecycleStatus","importSeriesOriginNexus","importMoviesOriginNexus","bulkEditRecords"]},"parameters":{"type":"object","oneOf":[{"properties":{"recordId":{"type":"string"},"tenantId":{"type":"string"},"subject":{"type":"string","description":"Human-readable label for the job's target record (its primary title), captured server-side at job creation so the UI can display it even after the record itself is deleted. Purely presentational — not used by job processing."}},"required":["recordId","tenantId"],"additionalProperties":false},{"properties":{"seriesId":{"type":"string"},"tenantId":{"type":"string"},"subject":{"type":"string","description":"Human-readable label for the imported title (the Origin Nexus global record's primary title), resolved server-side at job creation for display in the background-jobs UI. Purely presentational — not used by job processing."}},"required":["seriesId","tenantId"],"additionalProperties":false},{"properties":{"movieId":{"type":"string"},"tenantId":{"type":"string"},"subject":{"type":"string","description":"Human-readable label for the imported title (the Origin Nexus global record's primary title), resolved server-side at job creation for display in the background-jobs UI. Purely presentational — not used by job processing."}},"required":["movieId","tenantId"],"additionalProperties":false},{"properties":{"workType":{"$ref":"#/components/schemas/WorkTypes"},"primaryTitle":{"type":"string"},"tenantId":{"type":"string"},"subject":{"type":"string","description":"Human-readable label for the job's target record (its primary title), captured server-side at job creation for display in the background-jobs UI. Purely presentational — not used by job processing."}},"required":["recordId","workType","tenantId"],"additionalProperties":false},{"properties":{"tenantId":{"type":"string"},"recordId":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"subject":{"type":"string","description":"Human-readable label for the job's target record (its primary title), captured server-side at job creation for display in the background-jobs UI. Purely presentational — not used by job processing."}},"required":["urls","tenantId","recordId"],"additionalProperties":false},{"properties":{"tenantId":{"type":"string"},"oldLifecycleStatus":{"type":"string"},"newLifecycleStatus":{"type":"string"}},"required":["tenantId","oldLifecycleStatus","newLifecycleStatus"],"additionalProperties":false},{"description":"bulkEditRecords parameters as stored on the job (includes runtime-injected tenantId/jobId).","properties":{"tenantId":{"type":"string"},"jobId":{"type":"string"},"locale":{"type":"string"},"edits":{"type":"array","items":{"type":"object","properties":{"fieldKey":{"type":"string"},"action":{"type":"string","enum":["overwrite","delete"]},"value":{}},"required":["fieldKey","action"],"additionalProperties":false}},"selection":{"type":"object","additionalProperties":true}},"required":["tenantId","edits","selection"],"additionalProperties":true}]}},"required":["type","parameters"],"additionalProperties":false}],"required":["arn","status","created","updated","type","parameters"],"additionalProperties":false},"BackgroundJobAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBackgroundJobAttributes","description":"Attributes for a background job. Background jobs represent long-running asynchronous operations (e.g. contributor deletion, tenant data export). Includes current status, job type, parameters, optional output on completion, optional error details on failure, and optional item progress counts for batch jobs.","type":"object","allOf":[{"$ref":"#/components/schemas/BaseResourceAttributes"},{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object"},"status":{"$ref":"#/components/schemas/BackgroundJobStatus"},"output":{"type":"object"},"totalItemsCount":{"type":"integer","minimum":0,"description":"Total number of items in a batch job, when applicable."},"successItemsCount":{"type":"integer","minimum":0,"description":"Number of items processed successfully in a batch job, when applicable."},"failedItemsCount":{"type":"integer","minimum":0,"description":"Number of items that failed in a batch job, when applicable."},"error":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message","code"],"additionalProperties":false}},"required":["type","parameters","status"],"additionalProperties":false}],"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"}}},"BackgroundJobStatus":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IBackgroundJobStatus","description":"Status of a background job: ABORTED, FAILED, PENDING_REDRIVE, RUNNING, SUCCEEDED, or TIMED_OUT.","type":"string","enum":["ABORTED","FAILED","PENDING_REDRIVE","RUNNING","SUCCEEDED","TIMED_OUT"]},"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":{"/record-jobs":{"post":{"summary":"Create a new record job","operationId":"createRecordJob","description":"Create a new record job.","tags":["Records"],"requestBody":{"description":"Definition of the record background job to enqueue, including job type, tenant context, and job-specific parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRecordJobRequest"}}}},"responses":{"201":{"description":"Created record job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRecordJobResponse"}}}},"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"}}}}}}}}}
```

## List ancestors of a record

> Walks the parentId chain of the target record and returns its ancestors, ordered top-down (root first). By default all ancestors are returned; pass filter.status to narrow by record status (e.g. filter.status=DELETED, used by the restore confirmation dialog to preview which parent records will be restored alongside the target). The target record itself is not included.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"RecordGetDeletedAncestorsResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordGetDeletedAncestorsResponse","description":"Returns the ancestor records (top-down) for a given record, optionally narrowed by status via the filter.status query param. Used by the restore confirmation dialog (which requests filter.status=DELETED). Empty when no matching ancestors exist.","type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]},"attributes":{"type":"object","properties":{"primaryTitle":{"type":"string"},"workType":{"type":"string"},"sequenceNumber":{"type":"integer"},"status":{"type":"string","enum":["ACTIVE","DELETED"]}},"additionalProperties":false,"required":["primaryTitle","workType","sequenceNumber","status"]},"relationships":{"type":"object","properties":{"parent":{"description":"This ancestor's own parent, one level further up the chain. Absent for the top-most (root) ancestor.","$ref":"#/components/schemas/RecordRelationship"}},"additionalProperties":false}},"additionalProperties":false,"required":["id","type","attributes"]}},"meta":{"type":"object","properties":{"workTypeCounts":{"type":"object","description":"Counts of the returned ancestors broken down by workType.","additionalProperties":{"type":"integer"}}},"additionalProperties":false}}},"RecordRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationship","description":"A relationship to a record","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]}},"required":["id","type"]},"meta":{"type":"object","properties":{"primaryTitle":{"type":"string"}}},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data"]},"LinksRelated":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ILinks","description":"A JSON:API links object with an absolute or relative 'related' link","type":"object","required":["related"],"properties":{"related":{"type":"string"}},"additionalProperties":false},"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":{"/records/{recordId}/ancestors":{"get":{"summary":"List ancestors of a record","operationId":"recordGetDeletedAncestors","description":"Walks the parentId chain of the target record and returns its ancestors, ordered top-down (root first). By default all ancestors are returned; pass filter.status to narrow by record status (e.g. filter.status=DELETED, used by the restore confirmation dialog to preview which parent records will be restored alongside the target). The target record itself is not included.","tags":["Records"],"parameters":[{"name":"recordId","description":"The ID of the record whose ancestors should be listed","in":"path","required":true,"schema":{"type":"string"}},{"name":"filter.status","description":"Narrow the returned ancestors by record status. Omit to return all ancestors. The restore confirmation dialog uses filter.status=DELETED.","in":"query","required":false,"style":"form","explode":false,"schema":{"type":"string","enum":["ACTIVE","DELETED"]}}],"responses":{"200":{"description":"Successfully retrieved ancestors (may be empty)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordGetDeletedAncestorsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Target record not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## List direct child record identifiers

> Returns the identifiers of direct child records for the parent record. Only active children in the record hierarchy are included (for example, Seasons under a Series, or Episodes under a Season or Series). Does not include compilation members; use GET /records/{recordId}/compilationMembers for those. Returns an empty list when the parent has no children (for example, a Movie).

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"RecordChildrenFindManyResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordChildrenFindManyResponse","description":"Returns the identifiers of direct active child records for a parent record. Compilation members are not included; use GET /records/{recordId}/compilationMembers for those. Empty when the parent has no hierarchical children (for example, a Movie, a leaf Episode, or a Compilation).","type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]}},"additionalProperties":false,"required":["id","type"]}}}},"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":{"/records/{recordId}/children":{"get":{"summary":"List direct child record identifiers","operationId":"recordChildrenFindMany","description":"Returns the identifiers of direct child records for the parent record. Only active children in the record hierarchy are included (for example, Seasons under a Series, or Episodes under a Season or Series). Does not include compilation members; use GET /records/{recordId}/compilationMembers for those. Returns an empty list when the parent has no children (for example, a Movie).","tags":["Records"],"parameters":[{"name":"recordId","description":"The ID of the parent record whose direct children should be listed","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved child record identifiers (may be empty)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordChildrenFindManyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Parent record not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Get many compilation members for a given record

> Get many compilation members for a given record.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"RecordCompilationMemberFindManyResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordCompilationMemberFindManyResponse","description":"Returns a list of compilation members for a given record.","type":"object","additionalProperties":false,"required":["data","meta","links"],"properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["compilationLinkageItems"]},"attributes":{"type":"object","properties":{"ranking":{"type":"number"}},"additionalProperties":false,"required":["ranking"]},"relationships":{"type":"object","properties":{"record":{"description":"The member record this compilation-membership entry represents.","$ref":"#/components/schemas/RecordRelationship"},"tenant":{"description":"The tenant that owns this compilation membership.","$ref":"#/components/schemas/TenantRelationship"}},"additionalProperties":false,"required":["record","tenant"]}},"additionalProperties":false,"required":["id","type","attributes","relationships"]},"additionalProperties":false}}},"RecordRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationship","description":"A relationship to a record","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]}},"required":["id","type"]},"meta":{"type":"object","properties":{"primaryTitle":{"type":"string"}}},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data"]},"LinksRelated":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ILinks","description":"A JSON:API links object with an absolute or relative 'related' link","type":"object","required":["related"],"properties":{"related":{"type":"string"}},"additionalProperties":false},"TenantRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantRelationship","description":"A relationship to a tenant","type":"object","properties":{"data":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"]},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data","links"],"additionalProperties":false},"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":{"/records/{recordId}/compilationMembers":{"get":{"summary":"Get many compilation members for a given record","operationId":"recordCompilationMemberFindMany","description":"Get many compilation members for a given record.","tags":["Records"],"parameters":[{"name":"recordId","description":"The ID of the record to get the compilation members for","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved compilation members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordCompilationMemberFindManyResponse"}}}},"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"}}}}}}}}}
```

## Get many compilations for a given record

> Get many compilations for a given record.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"RecordCompilationFindManyResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordCompilationFindManyResponse","description":"Returns a list of compilations for a given record.","type":"object","additionalProperties":false,"required":["data","meta","links"],"properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["compilationLinkageItems"]},"attributes":{"type":"object","properties":{"ranking":{"type":"number"}},"additionalProperties":false,"required":["ranking"]},"relationships":{"type":"object","properties":{"compilation":{"description":"The Compilation record that this record is a member of.","$ref":"#/components/schemas/RecordRelationship"},"tenant":{"description":"The tenant that owns this compilation membership.","$ref":"#/components/schemas/TenantRelationship"}},"additionalProperties":false,"required":["compilation","tenant"]}},"additionalProperties":false,"required":["id","type","attributes","relationships"]},"additionalProperties":false}}},"RecordRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordRelationship","description":"A relationship to a record","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["records"]}},"required":["id","type"]},"meta":{"type":"object","properties":{"primaryTitle":{"type":"string"}}},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data"]},"LinksRelated":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ILinks","description":"A JSON:API links object with an absolute or relative 'related' link","type":"object","required":["related"],"properties":{"related":{"type":"string"}},"additionalProperties":false},"TenantRelationship":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ITenantRelationship","description":"A relationship to a tenant","type":"object","properties":{"data":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["tenants"]}},"required":["id","type"]},"links":{"$ref":"#/components/schemas/LinksRelated"}},"required":["data","links"],"additionalProperties":false},"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":{"/records/{recordId}/compilations":{"get":{"summary":"Get many compilations for a given record","operationId":"recordCompilationFindMany","description":"Get many compilations for a given record.","tags":["Records"],"parameters":[{"name":"recordId","description":"The ID of the record to get the compilations for","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved compilations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordCompilationFindManyResponse"}}}},"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"}}}}}}}}}
```

## Execute an atomic operation on compilation members

> Execute an atomic operation on compilation members.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"CompilationMembersAtomicOperationsRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"ICompilationMembersAtomicOperationsRequest","description":"JSON:API Atomic Operations request for managing compilation membership and member order in a single transactional call. Three operation types: `add` — add a record as a new member (rejects a memberRecordId already in the compilation; to change an existing member's ranking or status, use `update` instead, not remove+add). `update` — change an existing member's `ranking` and/or status by its own linkage-item id (from the `ref`), without affecting membership; this is the correct way to reorder members — removing every member and re-adding them is unnecessary and not atomic-safe. `remove` — remove an existing member by its linkage-item id.","type":"object","properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"atomic:operations":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","description":"Add a record as a new compilation member. Fails if the record is already a member — use `update` to change an existing member's ranking/status instead of removing and re-adding.","properties":{"op":{"const":"add"},"data":{"$ref":"#/components/schemas/compilationLinkageItemDataObject"}},"required":["op","data"],"additionalProperties":false},{"type":"object","description":"Update an existing member's ranking and/or status by its own linkage-item id, without affecting membership. This is the correct way to reorder members.","properties":{"op":{"const":"update"},"ref":{"$ref":"#/components/schemas/compilationLinkageItemRefObject"},"data":{"$ref":"#/components/schemas/compilationLinkageItemUpdateDataObject"}},"required":["op","ref","data"],"additionalProperties":false},{"type":"object","description":"Remove an existing member by its own linkage-item id.","properties":{"op":{"const":"remove"},"ref":{"$ref":"#/components/schemas/compilationLinkageItemRefObject"}},"required":["op","ref"],"additionalProperties":false}]}}},"required":["atomic:operations"],"additionalProperties":false,"definitions":{"compilationLinkageItemDataObject":{"type":"object","properties":{"type":{"type":"string","const":"compilationLinkageItems"},"id":{"type":"string"},"attributes":{"type":"object","properties":{"ranking":{"type":"number","minimum":0},"recordStatus":{"type":"string","enum":["ACTIVE","DELETED"]},"compilationStatus":{"type":"string","enum":["ACTIVE","DELETED"]}},"additionalProperties":false},"relationships":{"description":"The record being added as a compilation member.","type":"object","properties":{"record":{"description":"The record to add. Identifies an existing record by type and ID — it is not created by this call.","type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"records"},"id":{"type":"string"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["record"],"additionalProperties":false}},"required":["type","attributes","relationships"],"additionalProperties":false},"compilationLinkageItemUpdateDataObject":{"type":"object","properties":{"attributes":{"type":"object","properties":{"ranking":{"type":"number","minimum":0},"recordStatus":{"type":"string","enum":["ACTIVE","DELETED"]},"compilationStatus":{"type":"string","enum":["ACTIVE","DELETED"]}},"additionalProperties":false}},"required":["attributes"],"additionalProperties":false},"compilationLinkageItemRefObject":{"type":"object","properties":{"type":{"type":"string","const":"compilationLinkageItems"},"id":{"type":"string"}},"required":["type","id"],"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}}}}},"compilationLinkageItemDataObject":{"type":"object","properties":{"type":{"type":"string","const":"compilationLinkageItems"},"id":{"type":"string"},"attributes":{"type":"object","properties":{"ranking":{"type":"number","minimum":0},"recordStatus":{"type":"string","enum":["ACTIVE","DELETED"]},"compilationStatus":{"type":"string","enum":["ACTIVE","DELETED"]}},"additionalProperties":false},"relationships":{"description":"The record being added as a compilation member.","type":"object","properties":{"record":{"description":"The record to add. Identifies an existing record by type and ID — it is not created by this call.","type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"records"},"id":{"type":"string"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["record"],"additionalProperties":false}},"required":["type","attributes","relationships"],"additionalProperties":false},"compilationLinkageItemRefObject":{"type":"object","properties":{"type":{"type":"string","const":"compilationLinkageItems"},"id":{"type":"string"}},"required":["type","id"],"additionalProperties":false},"compilationLinkageItemUpdateDataObject":{"type":"object","properties":{"attributes":{"type":"object","properties":{"ranking":{"type":"number","minimum":0},"recordStatus":{"type":"string","enum":["ACTIVE","DELETED"]},"compilationStatus":{"type":"string","enum":["ACTIVE","DELETED"]}},"additionalProperties":false}},"required":["attributes"],"additionalProperties":false},"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":{"/records/{recordId}/compilationMembers/operations":{"post":{"summary":"Execute an atomic operation on compilation members","operationId":"compilationMembersAtomicOperations","description":"Execute an atomic operation on compilation members.","tags":["Records"],"parameters":[{"name":"recordId","description":"The ID of the record of type Compilation to execute the operation on","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"List of atomic operations (add, update, remove) to apply to the compilation members of the specified record. Use update, not remove+add, to reorder existing members — see ICompilationMembersAtomicOperationsRequest for the full semantics.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompilationMembersAtomicOperationsRequest"}}},"required":true},"responses":{"204":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"Payload Too Large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Get external field data for a record

> Retrieve field data (synopses, alternate titles, primary title, release metadata, runtime, countries of origin, languages, genres, keywords/tag fields, etc.) for a record from an external data provider — Origin, IMDB, or EIDR — matched using the record's corresponding system identifier (origin ID, IMDB ID, or EIDR ID). Read-only; requires Studio authentication. Returns all field groups by default; narrow the response to one group with \`fields.externalData\`.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"ExternalDataFieldsFindManyResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"IExternalDataFieldsFindManyResponse","title":"IExternalDataFieldsFindManyResponse","description":"JSON:API 1.1 document for external field data from a provider (e.g., Origin). Primary data is a flat collection of typed field resources.","type":"object","properties":{"data":{"type":"array","description":"Flat collection of external field resources for this record + provider","items":{"$ref":"#/components/schemas/IExternalDataFieldItem"}},"meta":{"type":"object","description":"Document-level meta for the external data request","properties":{"total":{"type":"integer","description":"Total number of field items returned"},"provider":{"type":"string","enum":["OriginNexus","IMDB","EIDR","Gracenote"],"description":"Provider identifier"},"availableLocales":{"type":"array","items":{"type":"string"},"description":"Locale codes that have data in at least one external source (synopses or titles)"}},"required":["total","provider"]},"jsonapi":{"type":"object","properties":{"version":{"type":"string","description":"JSON:API version"}},"required":["version"]},"links":{"type":"object","description":"JSON:API document-level links"},"included":{"type":"array","description":"JSON:API sideloaded resources","items":{"type":"object"}}},"required":["data","meta","jsonapi"],"$defs":{"IExternalDataFieldItem":{"type":"object","description":"One external field resource","properties":{"type":{"type":"string","enum":["externalSynopses","externalTitles","externalPrimaryTitle","externalReleaseYear","externalReleaseDate","externalRunLength","externalCountryOfOrigin","externalPrimarySpokenLanguage","externalOriginalLanguage","externalGenre","externalKeyword"],"description":"Discriminator for item shape"},"id":{"type":"string","description":"Stable compound id: recordId:provider:itemKey"},"attributes":{"type":"object","description":"Item fields (varies by type)","properties":{"field":{"type":"string","enum":["synopses","titles","primaryTitle","releaseYear","releaseDate","runLength","countriesOfOrigin","primarySpokenLanguage","originalLanguage","genres","keywords"],"description":"Field group this item belongs to"},"value":{"type":"string","description":"Primary value for this item (title text, synopsis body, year, date, duration, language code, etc.)"},"language":{"type":"string","description":"Locale / language tag (present on synopses and titles)"},"source":{"type":"string","description":"Provider (e.g. Origin)"},"attribution":{"type":"string","description":"Attribution / credit for the source value"},"synopsisType":{"type":"string","description":"Synopsis kind (e.g. short, long, log line)"},"titleType":{"type":"string","description":"Title kind (e.g. primary, alternative)"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code"},"characterCount":{"type":"integer","description":"Character length of the value for UI hints"},"key":{"type":"string","description":"Sub-key disambiguating multi-valued items"}},"required":["field","source"],"additionalProperties":false}},"required":["type","id","attributes"],"additionalProperties":false}}},"IExternalDataFieldItem":{"type":"object","description":"One external field resource","properties":{"type":{"type":"string","enum":["externalSynopses","externalTitles","externalPrimaryTitle","externalReleaseYear","externalReleaseDate","externalRunLength","externalCountryOfOrigin","externalPrimarySpokenLanguage","externalOriginalLanguage","externalGenre","externalKeyword"],"description":"Discriminator for item shape"},"id":{"type":"string","description":"Stable compound id: recordId:provider:itemKey"},"attributes":{"type":"object","description":"Item fields (varies by type)","properties":{"field":{"type":"string","enum":["synopses","titles","primaryTitle","releaseYear","releaseDate","runLength","countriesOfOrigin","primarySpokenLanguage","originalLanguage","genres","keywords"],"description":"Field group this item belongs to"},"value":{"type":"string","description":"Primary value for this item (title text, synopsis body, year, date, duration, language code, etc.)"},"language":{"type":"string","description":"Locale / language tag (present on synopses and titles)"},"source":{"type":"string","description":"Provider (e.g. Origin)"},"attribution":{"type":"string","description":"Attribution / credit for the source value"},"synopsisType":{"type":"string","description":"Synopsis kind (e.g. short, long, log line)"},"titleType":{"type":"string","description":"Title kind (e.g. primary, alternative)"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code"},"characterCount":{"type":"integer","description":"Character length of the value for UI hints"},"key":{"type":"string","description":"Sub-key disambiguating multi-valued items"}},"required":["field","source"],"additionalProperties":false}},"required":["type","id","attributes"],"additionalProperties":false},"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":{"/records/{recordId}/externalData":{"get":{"summary":"Get external field data for a record","operationId":"externalDataFieldsFindMany","description":"Retrieve field data (synopses, alternate titles, primary title, release metadata, runtime, countries of origin, languages, genres, keywords/tag fields, etc.) for a record from an external data provider — Origin, IMDB, or EIDR — matched using the record's corresponding system identifier (origin ID, IMDB ID, or EIDR ID). Read-only; requires Studio authentication. Returns all field groups by default; narrow the response to one group with `fields.externalData`.","tags":["Records"],"parameters":[{"name":"recordId","description":"The unique Studio ID of the record","in":"path","required":true,"schema":{"type":"string"}},{"name":"filter.provider","description":"The external data provider to query for this record.","in":"query","required":true,"schema":{"type":"string","enum":["OriginNexus","IMDB","EIDR","Gracenote"]}},{"name":"fields.externalData","description":"Optional sparse fieldset to retrieve only a specific field group. If not provided, returns all field groups.","in":"query","required":false,"schema":{"type":"string","enum":["synopses","titles","primaryTitle","releaseYear","releaseDate","runLength","countriesOfOrigin","primarySpokenLanguage","originalLanguage","genres","keywords"]}},{"name":"filter.locale","description":"Optional locale filter to return data for a specific language (e.g., 'en-US')","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK - External field data retrieved successfully (JSON:API 1.1 document)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalDataFieldsFindManyResponse"}}}},"400":{"description":"Bad Request - Invalid provider ID or field group","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - User does not have access to External Data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - Record not found or record has no origin ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Add security tags to a record

> Appends security tags to the record's securityTags relationship without removing existing ones. Maximum 100 security tags per record. Server will not add duplicates if a tag is already present.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"RecordAddSecurityTagsRelationshipRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordAddSecurityTagsRelationshipRequest","description":"Request body for adding security tags to a record relationship","type":"object","required":["data"],"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"array","items":{"type":"object","required":["id","type"],"additionalProperties":false,"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["securityTags"]}}}}}},"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":{"/records/{recordId}/relationships/securityTags":{"post":{"summary":"Add security tags to a record","operationId":"recordAddSecurityTagsRelationship","description":"Appends security tags to the record's securityTags relationship without removing existing ones. Maximum 100 security tags per record. Server will not add duplicates if a tag is already present.","tags":["Records"],"parameters":[{"name":"recordId","description":"The ID of the record","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordAddSecurityTagsRelationshipRequest"}}}},"responses":{"204":{"description":"No Content"},"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"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Remove security tags from a record

> Removes the specified security tags from the record's securityTags relationship. Tags not present on the record are silently ignored. At least one security tag must remain; the request will be rejected if it would leave the record with no tags.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"Records","description":"This API provides a way to manage Records in the context of a tenant. A Record is a lightweight Resource which stores the core metadata about a title and establishes relationships with other Resources, most important of which are the RecordFields which store the actual data about the title, and the Credits Lists which store the Credits for the title. This includes managing record background jobs (e.g. creating a Record from scratch, creating a Series with hierarchy from Global Metadata, deleting a Record together with all its hierarchical children), compilation members and compilations, and external data lookups."}],"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":{"RecordDeleteSecurityTagsRelationshipRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IRecordDeleteSecurityTagsRelationshipRequest","description":"Request body for removing security tags from a record relationship","type":"object","required":["data"],"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"array","items":{"type":"object","required":["id","type"],"additionalProperties":false,"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["securityTags"]}}}}}},"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":{"/records/{recordId}/relationships/securityTags":{"delete":{"summary":"Remove security tags from a record","operationId":"recordDeleteSecurityTagsRelationship","description":"Removes the specified security tags from the record's securityTags relationship. Tags not present on the record are silently ignored. At least one security tag must remain; the request will be rejected if it would leave the record with no tags.","tags":["Records"],"parameters":[{"name":"recordId","description":"The ID of the record","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordDeleteSecurityTagsRelationshipRequest"}}}},"responses":{"204":{"description":"No Content"},"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"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```
