Skip to main content

Errors and limits

Handling GraphQL errors

Inspect errors[].extensions to handle failures. Do not parse human-readable message text; wording is not a machine-readable contract.

{
"data": null,
"errors": [
{
"message": "first must be between 1 and 500.",
"extensions": {
"code": "BAD_USER_INPUT",
"reason": "PAGINATION_CONSTRAINT",
"field": "first",
"constraint": "range"
}
}
]
}

Limits

InputContract
Key^[\\w-]+(:[\\w-]+)*$
itemIdSame pattern; maximum 256 characters
JSON valueMaximum 10,240 bytes
first1–500; omitted or null defaults to 20
ids plus itemIdsMaximum 100 raw selectors
Service-generated ID selectorExactly 24 hexadecimal characters
Replacement itemsNon-empty
Replacement identitiesUnique within the request

The selector limit applies before deduplication. null selector lists are treated as empty.

Error reference

Reason or codeApplies toUseful extensions
IDENTIFIER_CONSTRAINTKey or itemIdidentifierType, constraint
EMPTY_SELECTORLookup and delete
SELECTOR_LIMIT_EXCEEDEDLookup and delete
INVALID_DOCUMENT_IDLookup and deletefield, value
PAGINATION_CONSTRAINTList and lookupfield: first, constraint: range
CURSOR_CONSTRAINTList and lookupfield: after, cursor constraint
DATETIME_CONSTRAINTsortDateDatetime constraint
EMPTY_ARRAYWhole-array replacement
DUPLICATE_ITEM_IDreplaceArrayItemsitemId
CONCURRENT_WRITE_CONFLICTArray mutationsCode
JSON validation errorJSON inputsDo not rely on message text

Cursor constraints are malformed, unsupportedVersion, and queryMismatch.

Datetime constraints are type, format, finite, integer, and range.

A concurrent-write conflict means the transaction could not be completed. Stored data remains unchanged.

A missing getArrayItem produces a GraphQL error, but there is currently no stable operation-specific extensions.reason. Do not treat its current message text as a contract.

Datetime input format

String inputs

Accepted forms include:

  • YYYY-MM-DD
  • YYYY-MM-DDTHH:mm:ss
  • The same date-time with a one- to three-digit fraction
  • An uppercase Z, +HH:mm, or -HH:mm offset

Examples:

2026-09-18
2026-09-18T10:30:00
2026-09-18T10:30:00.123Z
2026-09-18T12:30:00+02:00

Date-only and zone-less date-time values use UTC. Invalid calendar dates and invalid offsets are rejected.

Numeric inputs

Numeric values must be integral Unix epoch milliseconds, finite, and within the JavaScript Date range. Fractional values are rejected.

Output format

Datetime outputs are canonical ISO strings, for example:

2026-09-18T10:30:00.000Z

Validation order

The first applicable validation failure is returned.

listArrayItems

  1. first
  2. Cursor syntax and version
  3. Cursor query binding

lookupArrayItems

  1. Identifier coercion
  2. Empty selectors
  3. Raw selector limit
  4. Service-generated ID validation
  5. Page size
  6. Cursor validation

deleteArrayItems

  1. Identifier coercion
  2. Empty selectors
  3. Raw selector limit
  4. Service-generated ID validation

replaceArrayItems

  1. Identifier coercion
  2. Empty items
  3. Duplicate itemId values

Was this page helpful?