ApiResponse. The SDK does not raise on API failures. Check status before you use data.
On success, data holds the resource. On failure, status and message describe what went wrong. error holds structured Core error details when available. data may hold Core’s raw error JSON or be None.
Parse the response
Read the envelope first. Usestatus to classify the failure, then read the field that carries detail for that type.
| Property | Contains |
|---|---|
status | HTTP-style codes: 2xx success, 4xx client error, etc. |
data | Success body, or Core error JSON on rejection. May be None. |
error | Structured error parsed from Core’s error_detail. Use error.code for logic. |
message | Human-readable description. For logs and UI only. Do not use for logic. |
How to handle errors
Check status
Confirm success before you use
data. On every call, check that status is in the 2xx range for the method you called.Error handling
Read the error detail
Use the field that matches the failure type:
- Core rejection (
statusis a Core HTTP error anddatais set): readresponse.error.codefor the code Core returned. - SDK validation (
status == 400anddataisNone): readresponse.messageand fix the payload before retrying.
response.status when you do not need code-level logic (401, 404, 409, 5xx).Configure transport handling
When the SDK cannot reach Core or the request times out, you get
status: 500 and data: None.Configure timeout and logging in your SDK client to investigate these failures.Core errors
When Core rejects a request, the SDK wraps the failure in anApiResponse. It sets status to Core’s HTTP status, message to the error message, data to Core’s JSON error body, and error to structured details parsed from error_detail.
On Core 0.15.0 and later, a rejected request looks like this:
404 Not Found
response.error.code. Use response.status to choose a broad response. Treat response.error.message as display text; Core may change wording between releases. On older Core versions, response.error.code may be UNKNOWN.
| Status | When it happens | What to do |
|---|---|---|
404 | Resource ID or path does not exist | Check response.error.code (e.g. TXN_NOT_FOUND, IDT_NOT_FOUND) |
401 or 403 | API key, scope, or permission failure | Check the key, scopes, and whether the method requires the master key |
409 | Conflict (duplicate reference, lock, or in-progress job) | Retry only if the operation is safe to repeat |
400 | Core rejected the payload | Fix the request body before retrying |
5xx | Core or upstream failure | Retry later and check Core logs |
Client-side validation
Some methods validate input before sending a request. When validation fails, Core never receives the call.| Field | Value |
|---|---|
status | 400 |
message | Validation error string, e.g. reference field must be a valid string |
data | None |
error | None |
Transport failures
When the SDK cannot reach Core or the request times out, you getstatus: 500, data: None, and a message describing the failure. Configure timeout and logging in Using the SDK.
When debugging transport failures, log status, message, and the endpoint you called.
Related docs
Using the SDK
Timeouts, retries, and logging.
0.15.0 migration
Error codes, inflight queuing, and reconciliation changes.
Quick start
Install the SDK and create your first transaction.
Changelog
Python SDK releases and version history.