DataSync error codes

Every DataSync error response uses the same envelope. The errorCode field is the stable programmatic identifier; don't rely on the message text, which can change.

Error envelope​

{
"errors": [
{ "errorCode": "DS-0650", "message": "...", "path": "..." }
]
}

A validation failure can return more than one error object. The path field appears only on codes that point at a specific input. Its form follows the code: a JSON Pointer into the request payload, a query parameter name, a field name, or a class property name.

Every DataSync error code carries the DS- prefix. Refer to the Responses section on any endpoint for the exact codes it can return, for example Create entity.

HTTP status codes​

ConditionHTTP status
No credential supplied401
An expired, revoked, malformed, or otherwise unauthorized token403
A projection name that doesn't exist on the class403
A write outside the token's resolved projection403
Modifying a Global class definition (for example User, Channel, or Membership)403
DataSync not enabled on the keyset403
An object id that doesn't exist on get, replace, partial update, or delete404
A class or specific class version that doesn't exist on create404
A relationship or membership endpoint where a linked entity doesn't exist404
An unknown subscribe key404
An id that already exists on create409
A relationship that would violate its class's cardinality409
Deleting a class version that another class extends409
A stale eTag on If-Match412
A PATCH that touches any path other than /status, the class version, or /payload and its children400
A payload that fails a declared property's type or nullability check400
Both filter_fast and filter on one request400
A malformed filter expression, or more predicates than the limit allows400
Sorting by a property that isn't sortable in that context, or an invalid cursor400
Malformed JSON in the request body400
An unsupported Content-Type415
An Accept header DataSync can't satisfy406
A class property named id, createdAt, or updatedAt, or a status property at any path other than /status400 (DS-0906)

DS- error codes​

CodeConstantHTTP statusMeaning
DS-0000INTERNAL_SERVER_ERROR500Unhandled server error, or a server-side routing configuration problem.
DS-0002BAD_REQUEST400Required header or query parameter missing, or request input otherwise unusable.
DS-0003INVALID_JSON400Request body absent, empty, or not valid JSON.
DS-0004VALIDATION_ERROR400Body, path variable, or query parameter failed validation. One error item per violation.
DS-0005INVALID_FILTER400filter_fast / filter could not be parsed or validated.
DS-0006INVALID_ARGUMENT400An argument could not be used: a sort field that is not sortable in that request, undecodable cursor, malformed JSON Pointer, or parameter type mismatch.
DS-0007UNSUPPORTED_CONTENT_TYPE415Request Content-Type not supported.
DS-0008UNEXPECTED_FILTERABLE_FIELD_VALUE400A declared class property's value does not match its valueKind.
DS-0009SERVICE_UNAVAILABLE503A required dependency is unavailable, or the request could not be forwarded to its region.
DS-0011METHOD_NOT_ALLOWED405HTTP method not supported for this path.
DS-0100NOT_FOUND404The addressed resource does not exist.
DS-0200DATASYNC_NOT_ENABLED403DataSync is not enabled for this subscribe key.
DS-0201ACCESS_DENIED403Access Manager not enabled, conflicting credentials supplied, or authorization check denied.
DS-0202INVALID_TOKEN403The auth token could not be decoded, its projection does not permit the requested fields, or one of its grant patterns is too complex to evaluate.
DS-0203UNAUTHENTICATED401No credentials supplied.
DS-0300ETAG_MISMATCH412If-Match does not contain the resource's current eTag.
DS-0301CONFLICT409A resource with the same identity already exists.
DS-0600CONFIG_NOT_FOUND404Subscribe key unknown to the configuration service, or its DataSync region is not configured.
DS-0602UNSUPPORTED_ENTITY_PROPERTY_TYPE400A declared property's path resolves to a non-scalar node (object or array).
DS-0650NON_NULLABLE_PROPERTY400A property declared nullable: false is missing or explicitly null. The path field points at the property. A non-nullable property at an incorrect JSON Pointer path causes every write for that class to fail with this code.
DS-0700IMMUTABLE_FIELD_MODIFICATION400A patch targets a pointer outside the mutable set. Patch only.
DS-0800WRONG_ENTITY_CLASS_TYPE400An endpoint entity's class does not satisfy the relationship class for that side. Create only.
DS-0801CARDINALITY_VIOLATED409ONE-TO-ONE or ONE-TO-MANY cardinality already satisfied. Create only.
DS-0900GLOBAL_CLASS_MODIFICATION403Global class definitions are read-only. Replace and delete only.
DS-0901PROJECTION_LIMIT_EXCEEDED400Distinct projections across all properties exceed the per-class maximum.
DS-0902INVALID_PROJECTION_NAME400Projection name too long or malformed, or a property declares an empty projection list.
DS-0903INCOMPATIBLE_CHILD_PROPERTY400A redeclared inherited property differs from the parent in path, valueKind, or nullable. Entity classes only.
DS-0905CLASS_HAS_CHILDREN409The class still has subclasses and cannot be deleted. Entity classes only.
DS-0906RESERVED_PROPERTY_NAME400A declared property uses the name of a built-in field (id, createdAt, updatedAt, status). Only status may be re-declared, and only as {"name": "status", "path": "/status"} to control its projections.

Notes on 403 responses​

The two projection-related 403s (an unknown projection name and a write outside the resolved projection) share one error code and the generic message Invalid value for 'auth' parameter. Neither response names the projection or the field involved. That's by design, so the response doesn't disclose which projections or fields exist.

Was this page useful?

Last updated on