Send an off-ramp cash-out
Cashes out to a beneficiary’s real-world (non-CRYPTO) payment
destination, executed asynchronously against a quote from
POST /v1/quotes. paymentDestinationId must be a non-CRYPTO
destination; crypto goes via P2P or swap. Pricing is never accepted
from the caller: amount, receiveAmount, receiveCurrency, and the
service commission are resolved server-side from the quote. Discover the
acceptable purpose/sourceOfFunds values with GET /v1/payments/enums.
Required compliance fields vary by connector — a submission missing one
returns a 422 with field-level detail. Returns 202.
curl --request POST \
--url https://api.zeam.money/gw/v1/payments/offramp \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-zeam-auth: <api-key>' \
--data '
{
"transactionId": "3d594650-3436-11e5-bf7f-0002a5d5c51b",
"walletId": "66666666-6666-6666-6666-666666666666",
"beneficiaryId": "77777777-7777-7777-7777-777777777777",
"paymentDestinationId": "aaaa1111-2222-3333-4444-555566667777",
"quoteId": "bbbb1111-2222-3333-4444-555566667777",
"sendingAssetCode": "USDZ",
"purpose": "FAMILY_SUPPORT",
"sourceOfFunds": "SALARY"
}
'{
"transactionRecordId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "accepted",
"intentId": "<string>",
"isIdempotent": true,
"message": "<string>"
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}Authorizations
Access token issued by POST /v1/auth/token.
Application secret (the apiKey issued at registration), required on every request.
Body
Your transaction id. Replaying it returns the original result.
Source wallet.
A non-CRYPTO payment destination.
A quote from POST /v1/quotes.
Asset to send — bare code (e.g. USDZ). The issuer is resolved server-side from the asset registry.
"USDZ"
Optional sender-side transaction reference, shown on the sender's statement. When supplied: 1-16 characters, letters, digits, and hyphens only. Omit it or send null for no reference.
16^[A-Za-z0-9-]{1,16}$Optional recipient-side transaction reference, shown on the recipient's statement (for withdrawals it is also printed on their bank or mobile-money statement). When supplied: 1-16 characters, letters, digits, and hyphens only. Omit it or send null for no reference.
16^[A-Za-z0-9-]{1,16}$Purpose of remittance. Discover values via GET /v1/payments/enums.
Sender source of funds, when the connector requires it.
Beneficiary source of funds, when the connector requires it.
Notify the beneficiary by email. Requires a registered email. Mutually exclusive with notifyWhatsApp.
Notify the beneficiary by WhatsApp. Requires a registered mobile. Mutually exclusive with notifyEmail.
Optional sender phone number.
Response
Off-ramp accepted for asynchronous processing.
A 202 means the submission was accepted for asynchronous execution, not that it settled. Track completion with the Transactions routes or webhooks.
The transaction record id, used with GET /v1/transactions/{transactionId}.
Submission status; not a terminal transaction status.
"accepted"
Execution intent id, when present.
True when this response replays a prior submission with the same transactionId.
curl --request POST \
--url https://api.zeam.money/gw/v1/payments/offramp \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-zeam-auth: <api-key>' \
--data '
{
"transactionId": "3d594650-3436-11e5-bf7f-0002a5d5c51b",
"walletId": "66666666-6666-6666-6666-666666666666",
"beneficiaryId": "77777777-7777-7777-7777-777777777777",
"paymentDestinationId": "aaaa1111-2222-3333-4444-555566667777",
"quoteId": "bbbb1111-2222-3333-4444-555566667777",
"sendingAssetCode": "USDZ",
"purpose": "FAMILY_SUPPORT",
"sourceOfFunds": "SALARY"
}
'{
"transactionRecordId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "accepted",
"intentId": "<string>",
"isIdempotent": true,
"message": "<string>"
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "https://errors.zeam.app/validation-error",
"title": "Validation Error",
"status": 422,
"detail": "The 'amount' field must be a positive decimal.",
"instance": "/v1/quotes",
"requestId": "01J8Z6K3QW9F2",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}