List
List manual balance conversions for merchant activity.
Returns merchant-safe manual conversion history for the merchant activity log. Pending entries represent locked source funds only; target balance is credited only after settlement. Provider, route, raw execution, transaction, and treasury details are intentionally omitted.
Usage notes#
Requires balances:read. This feed lists standalone manual conversions in the API key’s merchant and environment. Preserve each operation ID when paging, and use Get to inspect its booked source, fee, return, and target amounts.
Live-only: a test API key returns 422 not_live. See conversion lifecycle and webhooks for completion, failure, recovery, and ID reconciliation.
/v1/conversionscurl --request GET 'https://api.thehalfin.com/v1/conversions' \
--header "X-API-Key: $HALFIN_API_KEY"Authorization
X-API-KeystringRequiredAPI key issued by the merchant dashboard. The key's environment (live/test) determines which data the caller can access. Permissions on the key control which endpoints are reachable.Example:
$HALFIN_API_KEY
Query Parameters
limitintegerOptionalMaximum number of items to return (default 20, max 100).- Minimum: 1
- Maximum: 100
- Default: 20
Example:
20cursorstringOptionalOpaque cursor from meta.next_cursor. Omit for the first page. Bound to the collection, scope, filters, and ordering.- Maximum length: 8192
Example:
stringstatus"pending_execution" | "submitted" | "settled" | "failed" | "source_restored" | "stuck"OptionalMerchant-visible conversion status, including the latest attempt's submitted projection.Example:
pending_executioncurrencystringOptionalFilter by currency code.- Maximum length: 20
Example:
stringnetworkstringOptionalFilter by payment network. Given together with currency it names one gate.- Maximum length: 40
Example:
stringfromstringOptionalStart of date range (RFC 3339).- Format: date-time
Example:
2026-01-01T00:00:00ZtostringOptionalEnd of date range (RFC 3339).- Format: date-time
Example:
2026-01-01T00:00:00Z
Response Body
200 Manual conversion activity entries.
application/json
dataarray<object>RequiredExample:
[{"operation_id":"00000000-0000-0000-0000-000000000001","status":"pending_execution","source_currency":"string","source_network":"string","target_currency":"string","target_network":"string","source_amount":"string","expected_target_amount":"string","effective_rate":"string","conversion_amount":"string","fee_amount":"string","fee_currency":"string","fee_network":"string","fee_payer":"merchant","converted_amount":"string","fee_charged_amount":"string","source_returned_amount":"string","credited_target_amount":"string","settled_at":null,"source_restored_at":null,"stuck_at":null,"retry_allowed":false,"created_at":"2026-01-01T00:00:00Z","updated_at":"2026-01-01T00:00:00Z"}]operation_idstringRequiredStandalone conversion ID, equal to webhook conversion_id. Use with /v1/conversions/{operationID}.- Format: uuid
Example:
00000000-0000-0000-0000-000000000001status"pending_execution" | "submitted" | "settled" | "failed" | "source_restored" | "stuck"RequiredMerchant lifecycle status. failed is recoverable and may later become settled or source_restored. submitted and stuck are merchant-facing states; the admin ops_status is a separate operational projection, including pending_execution and ops_review_required.Example:
pending_executionsource_currencystringRequiredExample:
stringsource_networkstringRequiredExample:
stringtarget_currencystringRequiredExample:
stringtarget_networkstringRequiredExample:
stringsource_amountstringRequiredExample:
stringexpected_target_amountstringRequiredExample:
stringeffective_ratestringRequiredExample:
stringconversion_amountstringOptionalThe principal actually exchanged: source_amount minus the merchant-paid fee. The fee is deducted from the amount and never added on top, so source_amount is the ceiling on what this operation may debit.Example:
stringfee_amountstringOptionalThe fee withheld from source_amount when the whole principal is exchanged. "0" when the platform covers it, because nothing is then withheld from the merchant.Example:
stringfee_currencystringOptionalRail of the fee. Always the source rail.Example:
stringfee_networkstringOptionalExample:
stringfee_payer"merchant" | "platform"OptionalExample:
merchantconverted_amountstringOptionalPrincipal the execution actually consumed. "0" until the ledger books it.Example:
stringfee_charged_amountstringOptionalFee actually charged. "0" until the ledger books it.Example:
stringsource_returned_amountstringOptionalUnspent source released back to the available balance. "0" until the ledger books it.Example:
stringcredited_target_amountstringOptionalTarget amount actually credited to the merchant. It is the frozen obligation scaled by the consumed share, not the amount the venue delivered — gain and loss against it are the platform's position. "0" until the ledger books it.Example:
stringsettled_atstring | nullRequired- Format: date-time
Example:
nullsource_restored_atstring | nullRequired- Format: date-time
Example:
nullstuck_atstring | nullRequired- Format: date-time
Example:
nullretry_allowedbooleanRequiredExample:
falsecreated_atstringRequired- Format: date-time
Example:
2026-01-01T00:00:00Zupdated_atstringRequired- Format: date-time
Example:
2026-01-01T00:00:00Z
metaobjectRequired- Unknown properties are rejected
Example:
{"request_id":"00000000-0000-0000-0000-000000000001","has_more":false,"next_cursor":null}request_idstringRequiredCorrelation identifier issued by the API, also returned in the X-Request-ID response header. An inbound value is adopted only from explicitly trusted ingress; public client values are replaced.Example:
stringhas_morebooleanRequiredTrue exactly when next_cursor is not null.Example:
falsenext_cursorstring | nullRequiredOpaque cursor for the next page. Null when this is the last page.Example:
null
{
"data": [
{
"operation_id": "00000000-0000-0000-0000-000000000001",
"status": "pending_execution",
"source_currency": "string",
"source_network": "string",
"target_currency": "string",
"target_network": "string",
"source_amount": "string",
"expected_target_amount": "string",
"effective_rate": "string",
"conversion_amount": "string",
"fee_amount": "string",
"fee_currency": "string",
"fee_network": "string",
"fee_payer": "merchant",
"converted_amount": "string",
"fee_charged_amount": "string",
"source_returned_amount": "string",
"credited_target_amount": "string",
"settled_at": null,
"source_restored_at": null,
"stuck_at": null,
"retry_allowed": false,
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z"
}
],
"meta": {
"request_id": "00000000-0000-0000-0000-000000000001",
"has_more": false,
"next_cursor": null
}
}400 `validation_error`: The request format or field values are invalid.
application/json
errorobjectRequiredThe error code and diagnostic message.- Unknown properties are rejected
Example:
{"code":"validation_error","message":"string","details":["string"]}code"validation_error"Required`validation_error`: The request format or field values are invalid.Example:
validation_errormessagestringRequiredHuman-readable description of the error.Example:
stringdetailsarray<string>OptionalOptional structured context (validation errors, etc.).Example:
["string"]
metaobjectRequired- Unknown properties are rejected
Example:
{"request_id":"00000000-0000-0000-0000-000000000001"}request_idstringRequiredCorrelation identifier issued by the API, also returned in the X-Request-ID response header. Client-supplied X-Request-ID values are replaced.Example:
string
{
"error": {
"code": "validation_error",
"message": "Request validation failed"
},
"meta": {
"request_id": "00000000-0000-0000-0000-000000000001"
}
}401 `unauthorized`: A valid API key is required.
application/json
errorobjectRequiredThe error code and diagnostic message.- Unknown properties are rejected
Example:
{"code":"unauthorized","message":"string","details":["string"]}code"unauthorized"Required`unauthorized`: A valid API key is required.Example:
unauthorizedmessagestringRequiredHuman-readable description of the error.Example:
stringdetailsarray<string>OptionalOptional structured context (validation errors, etc.).Example:
["string"]
metaobjectRequired- Unknown properties are rejected
Example:
{"request_id":"00000000-0000-0000-0000-000000000001"}request_idstringRequiredCorrelation identifier issued by the API, also returned in the X-Request-ID response header. Client-supplied X-Request-ID values are replaced.Example:
string
{
"error": {
"code": "unauthorized",
"message": "Invalid API key"
},
"meta": {
"request_id": "00000000-0000-0000-0000-000000000001"
}
}403 `forbidden`: The API key does not have permission for this operation. `api_key_ip_forbidden`: The request source address is not allowed by the API key.
application/json
errorobjectRequiredThe error code and diagnostic message.- Unknown properties are rejected
Example:
{"code":"forbidden","message":"string","details":["string"]}code"forbidden" | "api_key_ip_forbidden"Required`forbidden`: The API key does not have permission for this operation. `api_key_ip_forbidden`: The request source address is not allowed by the API key.Example:
forbiddenmessagestringRequiredHuman-readable description of the error.Example:
stringdetailsarray<string>OptionalOptional structured context (validation errors, etc.).Example:
["string"]
metaobjectRequired- Unknown properties are rejected
Example:
{"request_id":"00000000-0000-0000-0000-000000000001"}request_idstringRequiredCorrelation identifier issued by the API, also returned in the X-Request-ID response header. Client-supplied X-Request-ID values are replaced.Example:
string
{
"error": {
"code": "forbidden",
"message": "Permission denied"
},
"meta": {
"request_id": "00000000-0000-0000-0000-000000000001"
}
}422 `not_live`: Manual conversion is available with live API keys only.
application/json
errorobjectRequiredThe error code and diagnostic message.- Unknown properties are rejected
Example:
{"code":"not_live","message":"string","details":["string"]}code"not_live"Required`not_live`: Manual conversion is available with live API keys only.Example:
not_livemessagestringRequiredHuman-readable description of the error.Example:
stringdetailsarray<string>OptionalOptional structured context (validation errors, etc.).Example:
["string"]
metaobjectRequired- Unknown properties are rejected
Example:
{"request_id":"00000000-0000-0000-0000-000000000001"}request_idstringRequiredCorrelation identifier issued by the API, also returned in the X-Request-ID response header. Client-supplied X-Request-ID values are replaced.Example:
string
{
"error": {
"code": "not_live",
"message": "Manual conversion is available in the live contour only."
},
"meta": {
"request_id": "00000000-0000-4000-8000-000000000001"
}
}500 `internal_error`: The request could not be completed. Contact support with the request ID.
application/json
errorobjectRequiredThe error code and diagnostic message.- Unknown properties are rejected
Example:
{"code":"internal_error","message":"string","details":["string"]}code"internal_error"Required`internal_error`: The request could not be completed. Contact support with the request ID.Example:
internal_errormessagestringRequiredHuman-readable description of the error.Example:
stringdetailsarray<string>OptionalOptional structured context (validation errors, etc.).Example:
["string"]
metaobjectRequired- Unknown properties are rejected
Example:
{"request_id":"00000000-0000-0000-0000-000000000001"}request_idstringRequiredCorrelation identifier issued by the API, also returned in the X-Request-ID response header. Client-supplied X-Request-ID values are replaced.Example:
string
{
"error": {
"code": "internal_error",
"message": "Internal server error"
},
"meta": {
"request_id": "00000000-0000-0000-0000-000000000001"
}
}503 `service_unavailable`: The service is temporarily unavailable.
application/json
errorobjectRequiredThe error code and diagnostic message.- Unknown properties are rejected
Example:
{"code":"service_unavailable","message":"string","details":["string"]}code"service_unavailable"Required`service_unavailable`: The service is temporarily unavailable.Example:
service_unavailablemessagestringRequiredHuman-readable description of the error.Example:
stringdetailsarray<string>OptionalOptional structured context (validation errors, etc.).Example:
["string"]
metaobjectRequired- Unknown properties are rejected
Example:
{"request_id":"00000000-0000-0000-0000-000000000001"}request_idstringRequiredCorrelation identifier issued by the API, also returned in the X-Request-ID response header. Client-supplied X-Request-ID values are replaced.Example:
string
{
"error": {
"code": "service_unavailable",
"message": "Service temporarily unavailable"
},
"meta": {
"request_id": "00000000-0000-0000-0000-000000000001"
}
}