Skip to content
API DocsDocs

Process Card Payout

Payouts — Process Card Payout

7 min readUpdated Mar 27, 2026

POST /api/v1/payouts/card

Send funds to a customer's card (credit push). Used for disbursements, commissions, refunds-as-payouts, and withdrawals.

Guide: Initiating a Card Payout — conceptual walkthrough, flow diagrams, and integration patterns.

#Headers

HeaderValue
Content-Typeapplication/json
AuthorizationBearer {token} — see Authentication

#Request Body Parameters

FieldTypeRequiredDescription
requestIdStringYesUnique identifier for the request. Used for idempotency — if you retry with the same requestId, the system will return the original response instead of processing a duplicate.
midStringYesMerchant account ID. Identifies which merchant account the transaction is associated with.
amountStringYesTransaction amount as a decimal string in major currency units (e.g. "10.00" = ten dollars). Values with more than two decimal places are automatically rounded.
cardObject — See PayoutCardDetailsYes
billingDetailsObject — See PayoutBillingDetailsNo
callbackUrlStringNoServer-to-server webhook URL. Exirom sends a POST with the final transaction result to this URL. See Webhook Callbacks.
metadataMap<String, String>NoArbitrary key-value pairs for your own use (e.g. order reference, campaign ID). Returned unchanged in responses and callbacks.
FieldTypeRequiredDescription
expMonthStringYesCard expiration month in MM format (e.g. "08" for August).
expYearStringYesCard expiration year in YYYY format (e.g. "2027").
numberStringYesFull card number (PAN). Must be a numeric string with no spaces or dashes. Handled securely and never stored in plaintext.
cvvStringNoCard verification value (CVV/CVC) — the 3- or 4-digit security code on the card.
cardHolderNameStringNoCardholder's name as printed on the card.
FieldTypeRequiredDescription
firstNameStringNoCustomer's first name. Required for 3DS2 frictionless flow.
lastNameStringNoCustomer's last name. Required for 3DS2 frictionless flow.
addressStringNo
postalCodeStringNoBilling ZIP or postal code.
cityStringNoBilling city. Required for 3DS2 frictionless flow.
stateStringNoBilling state or province.
countryCodeStringNo
phoneStringNoCustomer's phone number (including country code). Required for 3DS2 frictionless flow.
emailStringYesCustomer's email address.

#Response

FieldTypeDescription
transactionIdStringUnique transaction identifier assigned by Exirom. Use this ID to query status, retrieve info, or reference the transaction in support requests.
transactionStatusString (NEW, PENDING, FAILED, REFUNDED, CUSTOMER_VERIFICATION, ...)Current status of the transaction. See Transaction Status Guide for the full lifecycle.
declineCodeIntegerNumeric code indicating the reason for a decline. Only present when the transaction is FAILED. See Decline Codes Reference.
paymentTypeString (CARD, APM)Payment type identifier: CARD for card transactions, APM for alternative payment methods.
{
  "requestId": "req_abc123",
  "mid": "merchant_123",
  "amount": "100.00",
  "card": {
    "expMonth": "12",
    "expYear": "2027",
    "number": "4111111111111111",
    "cvv": "123",
    "cardHolderName": "John Doe"
  },
  "billingDetails": {
    "firstName": "John",
    "lastName": "Doe",
    "address": "123 Main St",
    "postalCode": "10001",
    "city": "New York",
    "state": "NY",
    "countryCode": "US",
    "phone": "+12125551234",
    "email": "test@example.com"
  },
  "callbackUrl": "https://yourserver.com/callback",
  "metadata": {
    "key1": "value1"
  }
}
{
  "transactionId": "example_transactionId",
  "transactionStatus": "NEW",
  "declineCode": 12345,
  "paymentType": "CARD"
}

Idempotency: The requestId field ensures idempotent processing. If you retry a request with the same requestId, the original response is returned without reprocessing.

#Error Responses

HTTP StatusDescription
400Bad Request — missing or invalid parameters. Check the response body for field-level details.
401Unauthorized — missing, expired, or invalid bearer token. Re-authenticate via POST /api/v1/auth.
404Not Found — the requested resource does not exist.
500Internal Server Error — an unexpected error occurred. Retry with exponential backoff.
curl -X POST https://sandbox.api.exirom.com/api/v1/payouts/card \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
  "requestId": "req_abc123",
  "mid": "merchant_123",
  "amount": "100.00",
  "card": {
    "expMonth": "12",
    "expYear": "2027",
    "number": "4111111111111111",
    "cvv": "123",
    "cardHolderName": "John Doe"
  },
  "billingDetails": {
    "firstName": "John",
    "lastName": "Doe",
    "address": "123 Main St",
    "postalCode": "10001",
    "city": "New York",
    "state": "NY",
    "countryCode": "US",
    "phone": "+12125551234",
    "email": "test@example.com"
  },
  "callbackUrl": "https://yourserver.com/callback",
  "metadata": {
    "key1": "value1"
  }
}'

#Try It

SandboxTry it
https://sandbox.api.exirom.com/api
Was this helpful?