Uniform Entries & Entry Patterns API
The Entries & Entry Patterns API from Uniform — 2 operation(s) for entries & entry patterns.
The Entries & Entry Patterns API from Uniform — 2 operation(s) for entries & entry patterns.
openapi: 3.0.3
info:
title: Uniform Platform Aggregates Entries & Entry Patterns API
version: '2.0'
tags:
- name: Entries & Entry Patterns
paths:
/api/v1/entries-history:
get:
tags:
- Entries & Entry Patterns
parameters:
- in: query
name: entryId
description: Specify the entry ID to get history for
required: true
schema:
type: string
format: uuid
- in: query
name: editionId
description: 'The edition ID. When set, gets history for a child edition of the entryId.
'
deprecated: true
schema:
type: string
deprecated: true
format: uuid
- in: query
name: projectId
description: The project the entries(s) are on.
required: true
schema:
type: string
format: uuid
- in: query
name: cursor
description: If a request returns a cursor, pass it in this query parameter to get the next page of results.
schema:
type: string
maxLength: 1024
- in: query
name: releaseId
description: The release ID to get history for. Note that release history is independent of base histories.
schema:
type: string
format: uuid
security:
- ApiKeyAuth: []
- BearerAuth: []
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/HistoryApiResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
description: Entry not found
content:
text/plain:
schema:
type: string
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
/api/v1/entries:
options:
tags:
- Entries & Entry Patterns
description: Handles preflight requests. This endpoint allows CORS
responses:
'204':
description: OK
get:
tags:
- Entries & Entry Patterns
description: "In addition to the named parameters below, this endpoint accepts the\nfollowing query parameter conventions which are pattern-validated and\ntherefore not declared as named parameters:\n\n* `filters.<field>[<op>]` — content filtering (documented below).\n* `select.<bucket>[<op>]` — data projection (documented below).\n\n#### Content filtering (`filters.*`)\n\nFiltering narrows list results to entries matching field values. The\nallowed field names are project-specific — they come from the project's\ncontent types — which is why `filters.*` parameters are\npattern-validated rather than declared as named parameters.\n\nSyntax: `filters.<field>[<operator>]=<value>`. `<field>` is one of:\n\n* A system field: `name`, `slug`, `type`, `created`, `modified`,\n `entityId`, `editionId`, `releaseId`, `patternId`, `creator`,\n `creatorSubject`, `author`, `authorSubject`, `workflowId`,\n `workflowStageId`, `categoryId`, `labels`, `labelGroups`,\n `uiStatus`, or `locale`.\n* An entry field, addressed as `fields.<fieldId>`. Filtering by fields\n requires also filtering to a single content type (e.g.\n `filters.type[eq]=...`).\n* A sub-property of a field for certain field types: content\n references (`fields.<id>.slug|name|type`), links\n (`fields.<id>.type|projectMapNodeId`), and assets\n (`fields.<id>.url|title|description|mediaType`).\n\n| Operator | Effect |\n|---|---|\n| `[eq]` / `[neq]` | Exact equality / inequality. |\n| `[match]` | Contains (text search) match; text-like fields only. |\n| `[starts]` | Prefix match. Value limited to letters, numbers, `_`, `.`, `-`, and spaces. |\n| `[lt]` / `[lte]` / `[gt]` / `[gte]` | Comparisons for number, date, and datetime fields (including `created` / `modified`). |\n| `[in]` / `[nin]` | Comma-separated list; matches any (OR) / none of the values. |\n| `[all]` | Comma-separated list; list-valued fields (e.g. `labels`, multi-selects) must contain every value (AND). |\n| `[def]` | `true` or `false`; whether the field has a value at all. |\n\nBehavior:\n\n* Values are single strings, or comma-separated lists for `[in]`,\n `[nin]`, and `[all]`. Dates accept `YYYY-MM-DD` or a full datetime\n string. An empty value is rejected — use `[def]` to test presence.\n* Not every operator is valid for every field; the allowed set depends\n on the field's type. An unsupported combination returns HTTP 400\n with the supported operators listed.\n* Malformed keys, unknown operators, and unknown field names return\n HTTP 400.\n\nExamples:\n\n* `filters.type[eq]=article` — only entries of type `article`.\n* `filters.modified[gte]=2026-01-01` — modified this year.\n* `filters.type[eq]=article&filters.fields.brandName[match]=adidas` — field filter scoped to one type.\n* `filters.fields.author.slug[eq]=jane-doe` — filter by a referenced entry's slug.\n\n#### Data projection (`select.*`)\n\nProjection returns a subset of the response by pruning fields and field\ntypes before values are resolved. The allowed names are project-specific —\nthey come from the project's content types — which is why `select.*`\nparameters are pattern-validated rather than declared as named parameters.\n\nSyntax: `select.<bucket>[<operator>]=<value>`. Values are comma-separated\nlists of names. `*` is the only wildcard and matches zero or more\ncharacters (e.g. `seo_*`).\n\n| Parameter | Effect |\n|---|---|\n| `select.fields[only]=a,b` | Keep only the named fields; drop everything else. |\n| `select.fields[except]=a,b` | Drop the named fields; keep everything else. |\n| `select.fields[locales]=a,b` | For the named fields that survive filtering, return the full per-locale value map instead of only the requested locale's value. |\n| `select.fields[blockDepth]=N` | Limit how many levels of block field children are kept. `0` removes all block fields; `preserveAll` prevents projection from trimming fields inside block children. |\n| `select.fieldTypes[only]=a,b` | Keep only fields of the named types (type IDs such as `text`, `richText`, `asset`). |\n| `select.fieldTypes[except]=a,b` | Drop fields of the named types. |\n\nThe composition-oriented `select.slots.*` operators are also accepted but\nhave no effect on entry responses (entries have no slots).\n\nBehavior:\n\n* Projection applies recursively at every block in the returned entry,\n and is forwarded into entries resolved through reference fields.\n* When operators combine, all `[only]` sets are intersected first, then\n `[except]` sets are subtracted — exclusion always wins.\n* Unknown field or type names are silent no-ops (the entry shape is\n preserved; non-matching content is simply absent). Unknown operators\n return HTTP 400.\n* An empty list (`select.fields[only]=`) strips every field; `[except]=*`\n is equivalent.\n\nExamples:\n\n* `select.fields[only]=title,coverImage` — keep only titles and cover images on every entry in the list.\n* `select.fieldTypes[except]=richText` — everything except rich-text fields.\n* `select.fields[only]=title,seo_*&select.fields[locales]=seo_*` — lean payload keeping all locales on the SEO fields.\n"
parameters:
- $ref: '#/components/parameters/entryIDs'
- $ref: '#/components/parameters/versionId'
- $ref: '#/components/parameters/slug'
- $ref: '#/components/parameters/createdBy'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/orderBy'
- $ref: '#/components/parameters/facetBy'
- $ref: '#/components/parameters/pattern'
- $ref: '#/components/parameters/projectId'
- $ref: '#/components/parameters/state'
- $ref: '#/components/parameters/type'
- $ref: '#/components/parameters/uiStatus'
- $ref: '#/components/parameters/updatedBy'
- $ref: '#/components/parameters/withTotalCount'
- $ref: '#/components/parameters/withUIStatus'
- $ref: '#/components/parameters/withWorkflowDefinition'
- $ref: '#/components/parameters/withComponentIDs'
- $ref: '#/components/parameters/keyword'
- $ref: '#/components/parameters/skipPatternResolution'
- $ref: '#/components/parameters/skipParameterResolution'
- $ref: '#/components/parameters/skipOverridesResolution'
- $ref: '#/components/parameters/locale'
- $ref: '#/components/parameters/releaseId'
- $ref: '#/components/parameters/search'
- $ref: '#/components/parameters/searchSemantic'
- $ref: '#/components/parameters/editions'
security:
- ApiKeyAuth: []
- BearerAuth: []
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EntryListResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
description: Entry not found
content:
text/plain:
schema:
type: string
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Entries & Entry Patterns
description: Upserts an entry
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- projectId
- state
- entry
properties:
projectId:
type: string
format: uuid
description: The project ID to upsert the entry to
state:
type: number
minimum: 0
maximum: 64
description: The publishing state to upsert into. 0 = draft, 64 = published
entry:
$ref: '#/components/schemas/EntryInput'
created:
description: Ignored if present
type: string
modified:
description: Ignored if present
type: string
pattern:
description: True if the entry is a pattern (which can be referenced on other entries)
type: boolean
default: false
releaseId:
type: string
format: uuid
description: The release this entry belongs to. If not set, the entry belongs to the base
workflowId:
type: string
format: uuid
description: The workflow ID that this entry is assigned, if any
workflowStageId:
type: string
format: uuid
description: The stage ID the entry is in on its assigned workflow. When undefined, it is implicitly in the initial stage of the workflow
editionId:
type: string
format: uuid
description: 'The edition ID. When set, this is a child edition of the entry in _id.
'
editionName:
type: string
maxLength: 100
description: 'The name of the entry or edition as shown in the editions listing.
Describes the purpose of an edition.
'
editionPriority:
type: integer
description: 'The priority of the edition or entry. Higher numbers are higher priority.
When multiple editions enable the same locale, the highest priority edition is used.
'
additionalProperties: false
parameters:
- in: header
name: X-If-Unmodified-Since
description: 'Optional concurrency control header. If provided, the server will check that the entry
has not been modified since this timestamp. If the timestamp doesn''t match the current
modified timestamp, a 409 Conflict response will be returned.
'
required: false
schema:
type: string
example: '2024-01-15T10:30:45.123Z'
security:
- ApiKeyAuth: []
- BearerAuth: []
responses:
'204':
description: OK
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'409':
description: Conflict - Entry has been changed since being loaded
content:
text/plain:
schema:
type: string
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Entries & Entry Patterns
description: Deletes or unpublishes an entry
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- entryId
- projectId
properties:
entryId:
type: string
format: uuid
description: 'The ID of the entry to delete.
When editionId is also passed, the entry remains and an edition under it is deleted.
When editionId is omitted, and the entry has editions, all editions will also be deleted along with the entry.
'
editionId:
type: string
format: uuid
description: 'The edition ID to delete. When set, this deletes a child edition of the entryId.
The entry will remain when an edition is deleted.
If the entry ID is specified as the edition ID, the entry will be deleted _but any other editions will remain_ (this is used for unpublishing).
'
projectId:
type: string
format: uuid
description: The ID of the project the entry to delete belongs to
releaseId:
type: string
format: uuid
description: 'The ID of the release the entry to delete belongs to. If unspecified the entry belongs to the base.
Note: Deleting an entry from a release will not delete the entry from the base
'
state:
type: number
minimum: 0
maximum: 64
description: The state to delete (0 = draft, 64 = published [causes unpublishing], unspecified = all)
additionalProperties: false
security:
- ApiKeyAuth: []
- BearerAuth: []
responses:
'204':
description: OK
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
HistoryApiResponse:
type: object
properties:
cursor:
description: 'If there are more results, this will be populated with a token to pass in the next request to get the next page of results.
If this is undefined then no more results are available
'
type: string
maxLength: 1024
truncated:
description: If more history is available than your plan allows, and additional entries are available by upgrading, this will be true
type: boolean
results:
description: Version history entries
type: array
items:
$ref: '#/components/schemas/HistoryEntry'
EntryApiResponse:
type: object
required:
- state
- projectId
- entry
- created
- modified
properties:
state:
type: integer
description: Publishing state to fetch. 0 = draft, 64 = published
minimum: 0
maximum: 64
releaseId:
type: string
format: uuid
description: The release this entry belongs to. If not set, the entry belongs to the base
uiStatus:
type: string
deprecated: true
description: UI status value. Subject to change without notice; do not rely on this value. Only present when `withUIStatus` option is true
enum:
- Draft
- Modified
- Published
- Orphan
- Previous
projectId:
type: string
description: The project ID that this layout data is part of
format: uuid
created:
type: string
description: Created date string for this definition
format: date-time,
modified:
type: string
description: Modified date string for this definition
format: date-time,
pattern:
description: True if the entry is a pattern (which can be referenced on other entries)
type: boolean
default: false
entry:
$ref: '#/components/schemas/Entry'
workflowId:
type: string
format: uuid
description: The workflow ID that this entry is assigned. Normally comes from the content type
workflowStageId:
type: string
format: uuid
description: The stage ID the entry is in on its assigned workflow. When undefined, it is implicitly in the initial stage of the workflow
workflowDefinition:
description: The full definition of the assigned workflow, if any, including stages, permissions, etc. Only returned when `withWorkflowDefinition` is true
$ref: '#/components/schemas/WorkflowDefinition'
stubType:
type: string
enum:
- missing
- tooDeep
description: Only present if an incomplete entry is returned; indicates reason for stubbing
editionId:
type: string
format: uuid
description: 'The edition ID. When set, this is a child edition of the entry in _id.
'
editionName:
type: string
maxLength: 100
description: 'The name of the entry or edition as shown in the editions listing.
Describes the purpose of an edition.
'
editionPriority:
type: integer
description: 'The priority of the edition or entry. Higher numbers are higher priority.
When multiple editions enable the same locale, the highest priority edition is used.
'
EntryInput:
type: object
description: Defines the shape of the entry input
required:
- type
properties:
type:
type: string
description: Content type of the entry
maxLength: 100
minLength: 1
_id:
type: string
description: The public UUID of the entry
format: uuid
_name:
type: string
description: The name of the entry
minLength: 0
maxLength: 255
_slug:
type: string
description: The slug of the entry
minLength: 0
maxLength: 255
_thumbnail:
type: string
description: The thumbnail URL of the entry
maxLength: 2024
_author:
type: string
description: Name of the author of the most recent change
minLength: 1
maxLength: 255
_authorSubject:
type: string
description: Identity subject of the author of the most recent change
minLength: 1
maxLength: 255
_creator:
type: string
description: Name of the original creator
minLength: 1
maxLength: 255
_creatorSubject:
type: string
description: Identity subject of the original creator
minLength: 1
maxLength: 255
fields:
type: object
description: Entry field values
additionalProperties:
$ref: '#/components/schemas/ComponentParameter'
_dataResources:
$ref: '#/components/schemas/DataResourceDefinitions'
_pattern:
type: string
pattern: ^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$
description: Indicates this content entry should be sourced from a pattern library pattern
_patternDataResources:
type: object
description: 'Data definitions coming from a pattern resolved for this component. Merged with _dataResources during resolution.
Means nothing for PUTs; it will be ignored
'
additionalProperties:
$ref: '#/components/schemas/DataResourceDefinition'
_patternError:
type: string
description: 'Describes why the pattern could not be resolved, if a pattern could not be resolved. For PUTs, this is allowed but ignored.
CYCLIC: A cyclic pattern graph was detected, which could not be resolved because it would cause an infinite loop.
NOTFOUND: The pattern ID referenced could not be found. It may have been deleted, or not been published yet.
Means nothing for PUTs; it will be ignored
'
enum:
- NOTFOUND
- CYCLIC
_overrides:
type: object
description: 'Defines patch overrides for the content entry fields.
This can be used to override fields that are defined on patterns.
NOTE: This is considered an internal data structure and is not guaranteed to be stable.
Future updates that do not break the overrides-applied state of a composition may be made without notice
'
additionalProperties:
$ref: '#/components/schemas/ComponentOverride'
_overridability:
description: 'When used on a pattern, defines how the pattern''s fields may be overridden
by consumers of the pattern.
NOTE: This is considered an internal data structure and is not guaranteed to be stable.
Future updates that do not break the overrides-applied state of a composition may be made without notice
'
$ref: '#/components/schemas/ComponentOverridability'
_locales:
description: Array of locales which have data defined on the entry. If empty, the current default locale implicitly has data
type: array
items:
type: string
maxLength: 32
additionalProperties: false
DataResourceDefinition:
type: object
description: Defines a data resource, which is a named JSON document, usually from an API response, which may be projected onto parameters
required:
- type
properties:
type:
type: string
description: Public ID of the data type that provides this data
minLength: 1
maxLength: 100
pattern: ^[A-Za-z0-9\-]+$
isPatternParameter:
type: boolean
description: Whether this data is a pattern data resource that can be overridden when a pattern is referenced on another composition. If this is not a pattern composition, this has no meaning and should not be used. If unspecified, the default is false
ignorePatternParameterDefault:
type: boolean
description: 'When true, the default data resource of a pattern data parameter (isPatternParameter=true) will be ignored when the pattern is referenced.
Unless specifically overridden, the pattern data parameter will be provided with a null default value - leaving any data connections to it unresolvable.
If isPatternParameter is false or undefined, this has no meaning
'
optionalPatternParameter:
type: boolean
description: 'When true, the data resource does not create an error forcing the choosing of override value when there is no default.
If isPatternParameter is false or undefined, or if ignorePatternParameterDefault is false, this has no meaning
'
variables:
$ref: '#/components/schemas/DataResourceVariables'
additionalProperties: false
ComponentOverride:
type: object
description: 'Defines how to override a specific component.
NOTE: This is considered an internal data structure and is not guaranteed to be stable.
Future updates that do not break the overrides-applied state of a composition may be made without notice
'
properties:
parameters:
type: object
additionalProperties:
$ref: '#/components/schemas/ComponentParameter'
slots:
type: object
additionalProperties:
type: array
items:
$ref: '#/components/schemas/ComponentInstance'
variant:
type: string
maxLength: 100
dataResources:
type: object
description: 'Overrides data resource definitions for a pattern component.
Object keys defined under this property override the corresponding keys in the pattern''s data resources.
Overrides defined here replace values in either _dataResources or _patternDataResources on the target component.
'
additionalProperties:
$ref: '#/components/schemas/DataResourceDefinition'
ComponentOverridability:
description: 'Defines how a component on a pattern may have its values overridden.
NOTE: Data resources'' overridability is defined in the data resource definition, not here.
NOTE: This is considered an internal data structure and is not guaranteed to be stable.
Future updates that do not break the overrides-applied state of a composition may be made without notice
'
type: object
properties:
parameters:
type: object
description: Defines component parameter value overrides. Keys are the parameter public ID
additionalProperties:
$ref: '#/components/schemas/OverrideOptions'
variants:
description: Allows overriding a display variant is allowed if it is defined on the component the pattern is derived from. Default = false
type: boolean
hideLockedParameters:
description: 'If true, parameters that are not overridable will be hidden by default on pattern instances'' editors.
If false, all parameters will be shown on pattern instances'' editors, but locked parameters will be read-only.
If not set, the default is false
'
type: boolean
HistoryEntry:
type: object
additionalProperties: false
required:
- versionId
- timestamp
- authorName
- authorIsApiKey
- state
properties:
versionId:
description: The version ID of the entity. This can be used to fetch the version's data via the entity API
type: string
timestamp:
description: The timestamp when the version was created in epoch milliseconds
type: number
authorName:
description: The name (full name) of the user who created the version
type: string
authorIsApiKey:
type: boolean
state:
description: The state of the entity when the history entry was made
type: number
WorkflowStagePermission:
type: object
description: Permissions for a workflow stage
additionalProperties: false
properties:
write:
type: boolean
description: Allows writing to entities assigned to this stage. When false or unspecified the data is read-only
publish:
type: boolean
description: Allows publishing entities assigned to this stage. When false or unspecified publishing is disabled
PatternError:
type: string
description: 'Describes why the pattern could not be resolved, if a pattern could not be resolved. For PUTs, this is allowed but ignored.
CYCLIC: A cyclic pattern graph was detected, which could not be resolved because it would cause an infinite loop.
NOTFOUND: The pattern ID referenced could not be found. It may have been deleted, en published yet.
Means nothing for PUTs; it will be ignored
'
enum:
- NOTFOUND
- CYCLIC
ComponentParameterConditionalValue:
type: object
description: 'Defines a conditional value for a component parameter
'
properties:
when:
$ref: '#/components/schemas/VisibilityCriteriaGroup'
value:
description: 'The value of the parameter. Any JSON-serializable value is acceptable.
A value of `null` will cause the parameter value to be removed, if it matches.
'
id:
type: number
description: 'Unique sequence identifier of the conditional value within the component parameter.
This value must be unique within the conditional values array, and it should not change after a condition is created.
'
required:
- when
- id
- value
additionalProperties: false
DataResourceDefinitions:
type: object
description: 'Data definitions attached to this component. The property name is the key of the data in the data document.
Note: data definitions are inherited from ancestors at runtime (and may be overridden by descendants that use the same key)
'
additionalProperties:
$ref: '#/components/schemas/DataResourceDefinition'
OverrideOptions:
description: 'Whether a parameter is overridable
NOTE: This is considered an internal data structure and is not guaranteed to be stable.
Future updates that do not break the overrides-applied state of a composition may be made without notice
'
type: string
enum:
- 'yes'
- 'no'
DataElementConnectionDefinition:
type: object
description: 'Defines a connection to a dynamic token on a data resource
'
properties:
pointer:
description: A JSON Pointer expression that defines the data resource dynamic token value
type: string
maxLength: 256
syntax:
type: string
description: The syntax used to select the dynamic token to bind to
enum:
- jptr
failureAction:
type: string
description: "The action to take if the dynamic token cannot be resolved\n- t: TOKEN: Removes the failed dynamic token value, leaving the rest of the property value, if any, intact [default]\n NOTE: If the _only_ value in the property is a dynamic token, the property value is removed (as with 'p' below)\n NOTE: If the _failureDefault_ property is also set, that default value will be used instead of removing the token.\n this only applies when the failureAction is 't' or undefined, the default is otherwise ignored\n- p: PROPERTY: Removes the entire property value, including any other dynamic tokens or static values in the property\n- c: COMPONENT: Removes the whole parent component or block that contains the property.\n NOTE: If a 'component' failure occurs on the root component of a composition, or an entry,\n it is treated as an 'a' failure because removing the root means we must remove all\n- a: ALL: Fails the whole entry or composition. T
# --- truncated at 32 KB (62 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/uniform/refs/heads/main/openapi/uniform-entries-entry-patterns-api-openapi.yml