Documents Partner API Error Codes

Every error response from the API carries a stable error code. This is the part of the response that an integration should program against β€” not the message text.

Structure of an Error Response

{
  "error": {
    "code": "CONNECTOR_OFFLINE",
    "message": "The customer's connector is not currently connected; retry.",
    "correlationId": "9f3a2b7c4d1e5081",
    "supportCode": "STP-DMS-502-CONN-OFFLINE-9f3a2b7c",
    "details": null,
    "retryAfter": null
  }
}
Field Meaning
code The stable error code. Program against this.
message Explanatory text. May change at any time β€” do not evaluate.
correlationId The correlation identifier. Matches the submitted X-Correlation-Id, or newly generated if none was provided.
supportCode The code that Support needs to look up the request. Always include this when contacting support.
details Reserved for structured additional information. Currently always null β€” the explanation is in message.
retryAfter Wait time in seconds before the next attempt. For 429 and 503 responses, this is also included as a Retry-After header.

The Support Code

It is structured so that the category is immediately apparent when read:

STP-DMS-{HTTP-Status}-{Short code}-{Start of request identifier}

Example: STP-DMS-502-CONN-OFFLINE-9f3a2b7c

A partner application should pass this through to the end user. This gives STP Support a single identifier to locate the request in logs and trace records.

Retry Behavior

Each code carries one of two recommendations:

Symbol Meaning
πŸ” Retry β€” temporary issue. Retry using the same Idempotency-Key with exponential backoff.
β›” Do not retry β€” permanent. Fix the request or configuration first.

For more details, see Idempotency and Retries.

The 401 is the one exception. If the token is missing, expired, or the signature is invalid, the API responds with a bare 401 without an error envelope β€” meaning no code, no supportCode, and no request identifier. The rejection happens before error handling even takes effect. An integration should therefore never expect a response body for a 401; the status code alone is the signal, and the appropriate action is always the same: obtain a new token.

Authentication and Authorization

Code Status Meaning
(no code) 401 β›” Token is missing, expired, or the signature is invalid. Responds without an error envelope β€” see the note above. Obtain a new token and treat the call as a fresh attempt.
INSUFFICIENT_SCOPE 403 β›” The token is valid but does not carry the scope required by this endpoint.
TENANT_MISMATCH 403 β›” The request targets a tenant the caller is not authorized for. Also occurs when a filing key from a different tenant is used.
LICENSE_MISSING 403 β›” The tenant has no license for the API, or the token does not carry a license scope.
CLIENT_NOT_LICENSED 403 β›” The partner-bound license scope in the token was issued for a different application.
SERVICE_USER_SUSPENDED 403 β›” The service user has been suspended by the firm's administrator.
TENANT_INACTIVE 403 β›” The tenant has been deactivated or the license has expired.
CONNECTOR_DEACTIVATED 403 β›” The firm's administrator has disabled the connector. This is not a platform outage.
ON_PREM_PERMISSION_DENIED 403 β›” The local document management system denied the action for the requesting user. This only occurs when the document management system explicitly reports the denial as a permissions issue β€” with the current feature set, it does not; a permission-based denial appears as 404 NOT_FOUND.
MISSING_USER_IDENTITY 403 β›” The token does not contain a user identity on whose behalf the document management system could act. This almost always means a token obtained through a flow without user sign-in β€” see Getting Started.

Request Validation

Code Status Meaning
VALIDATION_FAILED 400 β›” The request does not match the expected structure. The affected field is identified in message.
ILLEGAL_FILENAME 400 β›” The filename violates the document management system's naming rules.
UPLOAD_INTEGRITY_FAILED 400 β›” The uploaded file does not match the declared checksum or length. Retry the upload from scratch.
UNSUPPORTED_MEDIA_TYPE 415 β›” The file extension is not permitted.
NOT_FOUND 404 β›” The requested resource does not exist β€” or the requesting user is not permitted to view it in the document management system. These two cases cannot be distinguished from the outside.
MATTER_NOT_FOUND 404 β›” The search for the case file or folder returned no results.
MATTER_AMBIGUOUS 409 β›” The name matches multiple case files or folders. Search by case number or identifier instead.
REGISTER_NOT_FOUND 422 β›” The specified register does not exist in this case file or folder.
INTEGRITY_FAILED 422 πŸ” Checksum error in transit between the cloud and the connector. Retry from scratch.
CONFLICT 409 β›” The action conflicts with the current state of the object β€” a document belongs to exactly one case file or folder and will not be silently moved.

Idempotency

Code Status Meaning
IDEMPOTENCY_KEY_REUSED 409 β›” The key belongs to a request that has already completed or failed. No result will be returned β€” instead, check the status using the operation query.
IDEMPOTENCY_KEY_INFLIGHT_TIMEOUT 504 πŸ” An in-progress request with the same key did not complete in time. Try again later.

Limits and Quotas

Code Status Meaning
RATE_LIMIT_EXCEEDED 429 πŸ” Too many requests. Observe Retry-After.
PARTNER_CONCURRENCY_LIMIT 429 πŸ” Too many concurrent requests in flight.
TENANT_BANDWIDTH_LIMIT 429 πŸ” A tenant volume limit has been reached. Whether a limit applies to your firm, and what it is, is governed by your agreement with STP.
QUOTA_EXCEEDED 429 β›” A hard license usage limit has been reached. Retrying will not help; the applicable limits are governed by the firm's agreement with STP.
TENANT_OVERLOADED 503 πŸ” Capacity on the firm's side is exhausted. Observe Retry-After; default is 120 seconds.

Platform and Remote System Errors

Code Status Meaning
CONNECTOR_OFFLINE 502 πŸ” The firm's connector is not connected. If the issue persists, involve the firm's administrator.
CONNECTOR_ERROR 502 πŸ” The connector received the request but was unable to complete it.
CONNECTOR_DECRYPT_FAILED 502 β›” The connector could not decrypt the request β€” its receiving key does not match. Unlike other 502 errors, retrying will not help; this will persist until the key configuration is corrected. Contact STP Support.
CAPABILITY_NOT_SUPPORTED 502 β›” The firm's connector is connected but does not recognize this operation β€” its version predates the feature. Retrying will not help until the connector is updated; the firm's administrator must install the current connector version.
IOT_UNAVAILABLE 502 πŸ” The message broker is unreachable.
IOT_THROTTLED 502 πŸ” The message broker has applied throttling.
IOT_PUBLISH_FAILED 502 πŸ” The request could not be delivered even after retries.
STORAGE_UNAVAILABLE 502 πŸ” The object storage is reporting errors.
IMPORT_TIMEOUT 504 πŸ” The import into the document management system did not complete in time.
IMPORT_FAILED 502 πŸ” The import reported a transient error.
TARGET_DMS_FAILURE 502 πŸ” The local document management system reported an error that is not a permission denial.
TARGET_DMS_INTEGRITY_FAILED 502 β›” The document management system is reporting an internal storage fault. Investigation on the firm's side is required.
LICENSE_SERVICE_UNAVAILABLE 503 πŸ” The license service is unreachable.
IAM_UNAVAILABLE 503 πŸ” STP authentication is unreachable.
KMS_UNAVAILABLE 503 πŸ” The key management service is unreachable.
SERVICE_UNAVAILABLE 503 πŸ” The API is currently shutting down, for example during an update. A retry will land on a different instance.
KMS_KEY_NOT_FOUND 502 β›” The tenant's key is no longer available. Contact STP Support.
KMS_ACCESS_DENIED 502 β›” The cloud does not have access to the tenant's key. Contact STP Support.

Internal Errors

Some errors trigger a security or operational alert internally at STP. Their internal designations are intentionally not exposed outside the platform; externally, they always appear as IMPORT_FAILED β€” a code from the table above, with the retry recommendation listed there.

For a partner application, this changes nothing: handle the code you receive according to the table above. If such an error recurs, the support code will help take it further.

Handling Unknown Codes

New codes may be added within a major version. An integration must therefore be able to handle an unknown code without crashing. The reliable fallback rule is the HTTP status:

Status Behavior
4xx except 408, 425, 429 Do not retry
408, 425, 429 Retry, observe Retry-After
5xx Retry with exponential backoff

If the code is known, its recommendation from the tables above takes precedence over this fallback rule. This is why INTEGRITY_FAILED carries πŸ” even though it is a 422: the error occurs in transit and clears on the next attempt. The fallback rule only applies to codes an integration does not yet recognize.

For more details, see Versioning and Deprecation.

Further Reading