Errors
When a request fails, Strise Connect returns a non-200 HTTP
status and a GraphQL errors array. A failed request returns
no partial data: if any field in the operation fails, the
whole operation fails.
Error format
Every error raised while executing an operation carries an
extensions object with a machine-readable code:
{
"errors": [
{
"message": "Unauthorized! Forbidden!",
"extensions": {
"code": "FORBIDDEN",
"reason": "FEATURE_NOT_ENABLED",
"requestId": "920a0e81ac"
}
}
]
}| Field | Description |
|---|---|
message | Human-readable description. Do not parse it; the wording can change. |
extensions.code | Error category. Always present. Branch on this value. |
extensions.reason | Optional, more specific cause. See Reasons. |
extensions.requestId | Identifies the request in our logs. Include it when you contact support. |
extensions.missingPermissions | Optional. On some FORBIDDEN errors, the permissions the API client is missing. |
Codes and reasons are a stable contract: new values may be added, but existing values are never renamed or given a different meaning. Treat an unknown code as a non-retryable error.
Error codes
code | HTTP status | Meaning | Retry? |
|---|---|---|---|
INVALID_INPUT | 400 | An argument or variable is invalid, for example a wrong type or a value the operation does not accept. | No. Fix the request. |
UNAUTHENTICATED | 401 | The bearer token is missing, expired or invalid. | After generating a new token. |
FORBIDDEN | 403 | The token is valid but not allowed to perform this operation. Check reason. | No. |
RESOURCE_NOT_FOUND | 404 | The requested entity does not exist or is not visible to your team. | No. |
UPSTREAM_TIMEOUT | 408 | A registry or data provider did not respond in time. | Yes, with backoff. |
RESOURCE_ALREADY_EXISTS | 409 | The entity you are creating already exists. | No. |
CONCURRENT_MODIFICATION | 409 | The same record was changed by another request at the same time. | Yes. |
RATE_LIMITED | 429 | Your quota for this operation is used up for the current period. | After the period resets. |
UPSTREAM_ERROR | 502 | A registry or data provider returned an error. | Yes, with backoff. |
INTERNAL | 500 | An unexpected error on our side. | Contact us with the requestId. |
FORBIDDEN errors always use the message
Unauthorized! Forbidden!. Use reason to tell the causes
apart.
Reasons
reason | code | Meaning |
|---|---|---|
FEATURE_NOT_ENABLED | FORBIDDEN | The feature behind this field or operation (for example PEP and sanction screening or credit data) is not enabled for your team. Contact your Strise contact to enable it. |
MISSING_PERMISSION | FORBIDDEN | The API client's role lacks a required permission. missingPermissions lists which. |
RESOURCE_ACCESS_DENIED | FORBIDDEN | The entity belongs to a team your API client does not have access to. |
TEAM_MEMBERSHIP_REQUIRED | FORBIDDEN | The API client is not a member of the team the request targets. |
PRIVATE_PERSON_NIN_ALREADY_EXISTS | RESOURCE_ALREADY_EXISTS | A private person with this national identity number already exists in your team. |
Rate limits
Some operations, such as PEP and sanction screening and credit
scores, count against a quota that resets each period
(weekly or monthly, depending on the operation and your
agreement). When the quota is used up, the operation returns
RATE_LIMITED until the next period starts. Contact your
Strise contact if you need a higher quota.
Query validation errors
A query that is not valid against the schema, for example
one with a syntax error or an unknown field, is rejected with
HTTP 400 before it runs. These errors follow the standard
GraphQL format: a message and the locations in the query
that caused it, without extensions:
{
"errors": [
{
"message": "Cannot query field 'turnover' on type 'Company'.",
"locations": [{ "line": 5, "column": 9 }]
}
]
}