Get transfer status history
Status changes for one transfer, in the shared get_all envelope (GetAllResponseAPI) — data, total, total_unfiltered and keys. The handler runs the same query parser as GET /v1/transfers/statuses and then forces search.transfer_id from the path, overwriting any transfer_id the caller sent. search.transfer_id aside, every parameter that operation takes works here too.
Authorization
BearerAuth JWT authentication token
In: header
Path Parameters
Transfer UUID
transfer_id path parameter
Query Parameters
Filter by new status.
Filter by previous status.
Filter by creator user ID.
Filter by internal flag.
Stack response data by a field (e.g. stack=status or stack=created_at[YYYY-MM-DD]).
Sort field (prefix with - for descending). Example: -created_at.
Number of items per page.
Starting position for pagination.
JSON filter object, parsed by the shared parser. Malformed JSON is refused with 400.
Free-text search over the virtual full-row text expression, resolved by the shared parser's ExtractTextSearch. Bare search._text implies the like operator; the operator suffixes accepted are .eq, .like, .ilike, .contains, .start_with and .end_with. More than one of them in a single request is refused with 400, as is any other suffix.
Header Parameters
Language preference for the response
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/transfers/string/status-history"{
"data": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"transfer_id": "d4a2d8dd-7def-4545-a062-761683b9aa05",
"created_at": "2019-08-24T14:15:22Z",
"created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
"prev_status": "string",
"status": "string",
"internal": true
}
],
"total": 0,
"total_unfiltered": 0,
"has_more": true,
"keys": [
"string"
]
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"status": 429,
"message": "Rate limit exceeded",
"code": "rate_limits_m.exceeded",
"class": "temporary",
"retryable": true
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"overall_status": "unhealthy",
"message": "Service is shutting down",
"timestamp": "2026-08-27T15:04:05Z"
}Reads one transfer in the minor-units shape.
Return the persisted DSL execution context stored in the transfer record. This endpoint is intended for async transfer resumption. This endpoint also supports the standard get_all query format (search.*, sort, limit, offset, stack) and returns a get_all response when those parameters are used.