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
401is the one exception. If the token is missing, expired, or the signature is invalid, the API responds with a bare401without an error envelope β meaning nocode, nosupportCode, and no request identifier. The rejection happens before error handling even takes effect. An integration should therefore never expect a response body for a401; 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.