Use theDocumentation Index
Fetch the complete documentation index at: https://truv.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
code field in the error response body to drive error-handling logic in your integration. The message field is human-readable and intended for logging and debugging.
HTTP errors
Error response format
Most error responses return anerror object with a machine-readable code and a message:
extra field appears on 400 responses only. It lists the specific fields that failed validation.
404 responses use a different shape: {"detail": "Not Found."} rather than the standard error object.Status codes
| Status | error.code | Description |
|---|---|---|
400 Bad Request | incorrect_parameters | A required field is missing, a field value is invalid, or a combination of fields is not allowed. Check extra.invalid-params for specifics. |
401 Unauthorized | authentication_failed | The X-Access-Client-Id or X-Access-Secret header is missing, malformed, or the credentials do not match any key in the environment. |
403 Forbidden | not_authenticated | Credentials are valid but do not have permission to access this resource. Common cause: using sandbox credentials against a production resource. |
404 Not Found | (see above) | The requested resource ID does not exist or belongs to a different client. |
405 Method Not Allowed | — | The HTTP method is not supported on this endpoint. Check the API Reference for the supported method. |
406 Not Acceptable | — | The server can’t produce a response matching the Accept header in your request. Truv responses are always application/json — remove restrictive Accept headers. |
410 Gone | expired_token | A token used in the Bridge flow is no longer valid. Most often a public_token exchange after expiry or reuse — see the 410 Gone response example for recovery. |
415 Unsupported Media Type | — | The request payload format is unsupported. Set Content-Type: application/json and send a valid JSON body. |
429 Too Many Requests | throttled | Request rate limit exceeded. Back off and retry. See Rate limits. |
500 / 502 / 503 | — | Truv-side error. Retry with exponential backoff. If errors persist, check status and contact support@truv.com. |
Response examples
400 Bad Request
400 Bad Request
Each entry in
invalid-params carries a field (the offending parameter name) and a message (the validation reason).401 Unauthorized
401 Unauthorized
403 Forbidden
403 Forbidden
404 Not Found
404 Not Found
410 Gone
410 Gone
The most common trigger is calling Recovery
See the
POST /v1/link-access-tokens/ with a public_token that was already exchanged or has aged out — public_token is single-use and short-lived. Less commonly, the upstream bridge_token has expired (valid for 6 hours from creation).| Token | Action |
|---|---|
public_token expired or reused | Re-run Truv Bridge so onSuccess returns a fresh public_token, then exchange it immediately at POST /v1/link-access-tokens/. |
bridge_token expired | Call Create Bridge Token for a new bridge_token, then re-initialize Bridge on the client. |
bridge_token → public_token → access_token flow for the full token lifecycle.429 Too Many Requests
429 Too Many Requests
Rate limits
Truv applies rate limits to protect platform stability and to keep latency predictable for every customer. Limits apply per Truv account and are evaluated per environment — sandbox and production are tracked separately.Standard limits
| Surface | Limit | Scope |
|---|---|---|
| Orders API — Create + Retrieve combined | 300 requests / minute | Per Truv account, per environment |
Refresh endpoints, per access_token | 1 initial request + 3 refreshes per 24 hours | Per access_token |
POST /v1/orders/ and GET /v1/orders/{id}/ calls. For example, 200 creates plus 200 retrieves in the same minute exceeds the limit.
The per-access_token refresh limit covers POST /v1/refresh/tasks/ and GET /v1/refresh/tasks/{task_id}/, plus GET /v1/links/{access_token}/ re-fetches. Requests beyond the allowed window return the error message Refresh limit for the access_token exceeded. See the canonical Links and Refresh reference pages for the per-endpoint detail.
These are the defaults for new accounts. Higher limits are available — see Request a higher limit below.
Handle 429 responses
When a request exceeds a rate limit, Truv returns429 Too Many Requests with error.code: throttled. The connection is not penalized — subsequent requests succeed once your traffic drops back under the limit.
Respect the Retry-After response header on 429 responses. The value is the number of seconds to wait before retrying. If the header is not present, fall back to exponential backoff starting at 1 second and capped at 60 seconds.
Always check the response status before sleeping. The pseudocode above retries only on
429; on 5xx responses, Truv-side error retry guidance applies instead. On 2xx or 4xx other than 429, return the response immediately — never retry blindly.Best practices
- Webhooks over polling. Polling
GET /v1/orders/{id}/for status changes is the most common cause of429in production. Subscribe toorder-status-updatedandtask-status-updatedand only call the GET endpoint when a webhook fires. - Stagger batch jobs. Spread bulk Order creation across the hour rather than all at once. A 50,000-Order batch at 833 RPM trips the limit; the same batch at 250 RPM completes within it.
- Refresh deliberately. The per-
access_tokenrefresh limit is designed for human-paced re-verification. Programmatic refresh on every page load exhausts the limit within minutes. - Don’t retry blindly. Order creation is not idempotent — retrying a failed
POST /v1/orders/creates a new Order. Store your application-level reference and de-duplicate before retrying.
Request a higher limit
Higher limits are available on request. To request one, contact your Truv Technical Account Manager or email support@truv.com with:- Truv account name and environment (sandbox or production).
- Current peak RPM and target peak RPM.
- Time window when peaks occur (e.g., 7–9 PM ET on weekdays).
- Use case context — e.g., “Recertification batch — 50,000 applicants over a 4-hour window.”
Task error states
For all task error states, their causes, and recommended actions, see Task Lifecycle — Error states. Subscribe totask-status-updated webhooks to receive error notifications in real time.
Bridge errors
Truv Bridge fires client-side errors through theonEvent callback when type === 'ERROR'. These are distinct from task error states — they fire in the browser during the connection flow, not through webhooks.
LOGIN_ERROR, MFA_ERROR, UNAVAILABLE, NO_DATA, LINK_EXISTS, ERROR), error object shape, and recommended fallback routing, see Bridge Events — Errors.
Document processing errors
For document upload errors —config_error and no_data messages, fraud detection, and the complete review workflow — see Fraud & Manual Review.
Webhook delivery retries
For webhook timeout, retry policy, and signature verification, see Webhooks — delivery and retries.Next steps
Task Lifecycle
Complete task status flow and error state transitions
Bridge Events
Client-side error codes and fallback routing
Fraud & Manual Review
Document fraud detection and review workflows
Webhook Events
Real-time notifications for task and order status changes