API reference

Every public endpoint of the Ezus Pay REST API: bookings, payment links, transactions and refunds, with parameters, full responses and errors.

Checked against the API code on October 13, 2026

Overview

Base URL: https://api.ezuspay.app. Every request needs the x-api-key header. See Authentication for keys, scopes, limits and the error format.

MethodPathScope
GET/v1/pingnone
POST/v1/bookingsbookings:write
POST/v1/bookings/:id/resyncbookings:write
GET/v1/checkout-fieldspayment-links:read
POST/v1/bookings/:id/payment-linkspayment-links:write
GET/v1/bookings/:id/payment-linkspayment-links:read
GET/v1/payment-links/:idpayment-links:read
GET/v1/transactionstransactions:read
GET/v1/bookings/:id/transactionstransactions:read
GET/v1/payment-links/:id/transactionstransactions:read
GET/v1/transactions/:idtransactions:read
POST/v1/transactions/:id/refundsrefunds:write

The data model in one paragraph. A booking is a trip file. It holds one or more alternatives, which are priced options of the trip (one is the main alternative). Payment links belong to an alternative. Each payment made through a link is a transaction, and a transaction can have refunds. Payments received outside Stripe (bank transfer, cash, cheque) are transactions too, with source: "MANUAL".

Check a key

Ping

GET/v1/ping

Returns the agency behind the key, the environment it reaches and the key's metadata. Use it to validate a key before anything else.

Shell
curl https://api.ezuspay.app/v1/ping -H "x-api-key: $EZP_KEY"
JSON
{
  "success": true,
  "data": {
    "status": "ok",
    "agency": { "id": "3f1c2a9e-8b7d-4c21-9a0e-5d6f7a8b9c0d", "name": "Voyages Horizon", "slug": "voyages-horizon" },
    "mode": "LIVE",
    "apiKey": {
      "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "prefix": "ezpay_li",
      "label": "CRM sync",
      "scopes": ["bookings:write", "payment-links:read", "payment-links:write", "transactions:read"],
      "expiresAt": "2027-01-11T09:00:00.000Z"
    }
  }
}

Bookings

Create a booking

POST/v1/bookingsScopebookings:write

Creates a booking, with its first alternative if you send one. Returns 201. When you send an ezusProjectId that already has a booking, that booking is returned with 200 instead of a duplicate.

FieldTypeRequiredRules
namestringyes1 to 255 characters
referencestringnoUp to 255. Generated from your reference settings when omitted. Must be unique in the agency
ezusProjectIdstringnoEzus project reference. Needs a connected Ezus account. Alternatives are then read from Ezus
clientNamestringnoUp to 255
clientEmailstringnoValid email, or ""
currencystringnoA supported currency. Defaults to the agency currency
fxRateToDefaultnumbernoAbove 0. Required when currency differs from the agency currency
alternativeobjectnoFirst alternative. Ignored when ezusProjectId is set
alternative.alternativeNamestringnoUp to 255
alternative.ezusAlternativeIdstringnoUp to 255
alternative.totalAmountCentsintegeryes, in alternative0 to 99,999,999
alternative.departureDatedatenoYYYY-MM-DD
alternative.returnDatedatenoYYYY-MM-DD, on or after the departure
alternative.travelersCountintegerno1 or more. Default 1
Shell
curl -X POST https://api.ezuspay.app/v1/bookings \
  -H "x-api-key: $EZP_KEY" -H "Content-Type: application/json" \
  -d '{
    "name": "Bali honeymoon 2026",
    "clientName": "Jean Dupont",
    "clientEmail": "jean@example.com",
    "alternative": {
      "alternativeName": "14 days",
      "totalAmountCents": 480000,
      "departureDate": "2026-07-10",
      "returnDate": "2026-07-24",
      "travelersCount": 2
    }
  }'
JSON
{
  "success": true,
  "data": {
    "booking": {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "name": "Bali honeymoon 2026",
      "reference": "2026-0042",
      "ezusProjectId": null,
      "ezusDeletedAt": null,
      "lastEzusSyncAt": null,
      "clientName": "Jean Dupont",
      "clientEmail": "jean@example.com",
      "currency": "EUR",
      "fxRateToDefault": null,
      "status": "DRAFT",
      "createdAt": "2026-04-21T09:12:00.000Z",
      "updatedAt": "2026-04-21T09:12:00.000Z",
      "mainAlternative": { "totalAmountCents": 480000, "amountAlreadyCollected": 0 },
      "hasPaymentLinks": false
    },
    "alternative": {
      "id": "b3a1f0e2-6d4c-4e8a-9b7f-1c2d3e4f5a6b",
      "bookingId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "alternativeName": "14 days",
      "ezusAlternativeId": null,
      "clientName": null,
      "clientEmail": null,
      "notes": null,
      "totalAmountCents": 480000,
      "amountAlreadyCollected": 0,
      "departureDate": "2026-07-10T00:00:00.000Z",
      "returnDate": "2026-07-24T00:00:00.000Z",
      "travelersCount": 2,
      "syncStatus": "PENDING",
      "createdAt": "2026-04-21T09:12:00.000Z",
      "updatedAt": "2026-04-21T09:12:00.000Z"
    }
  }
}

Booking status is one of DRAFT, PENDING, DEPOSIT_RECEIVED, FULLY_PAID, OVERDUE, CANCELLED. A new booking starts as DRAFT and becomes PENDING when its first link is created. amountAlreadyCollected is in cents.

ErrorWhen
409 BOOKING_REFERENCE_CONFLICTThe reference is already used in the agency
409 EZUS_NOT_CONNECTEDezusProjectId sent, but the agency has no Ezus connection
422 FX_RATE_REQUIREDForeign currency without fxRateToDefault

Resync a booking from Ezus

POST/v1/bookings/:id/resyncScopebookings:write

Reads the Ezus project again and updates the booking and its alternatives: name, client, amounts, dates, travelers and main alternative. Alternatives removed in Ezus are marked ORPHAN, never deleted. If an open payment plan exists, its unpaid installments absorb a change of total. The call is synchronous and returns the booking with all its alternatives.

Only for bookings created with an ezusProjectId. No body.

Shell
curl -X POST https://api.ezuspay.app/v1/bookings/7c9e6679-7425-40de-944b-e07fc1f90ae7/resync \
  -H "x-api-key: $EZP_KEY"
JSON
{
  "success": true,
  "data": {
    "booking": {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "reference": "2026-0042",
      "name": "Bali honeymoon 2026",
      "ezusProjectId": "PRJ-1029",
      "clientName": "Jean Dupont",
      "clientEmail": "jean@example.com",
      "currency": "EUR",
      "status": "PENDING",
      "createdAt": "2026-04-21T09:12:00.000Z",
      "updatedAt": "2026-04-22T14:30:00.000Z",
      "alternatives": [
        {
          "id": "b3a1f0e2-6d4c-4e8a-9b7f-1c2d3e4f5a6b",
          "ezusAlternativeId": "ALT-1",
          "alternativeName": "14 days",
          "clientName": "Jean Dupont",
          "clientEmail": "jean@example.com",
          "isMainAlternative": true,
          "syncStatus": "SYNCED",
          "totalAmountCents": 480000,
          "amountAlreadyCollected": 144000,
          "travelersCount": 2,
          "departureDate": "2026-07-10T00:00:00.000Z",
          "returnDate": "2026-07-24T00:00:00.000Z",
          "createdAt": "2026-04-21T09:12:00.000Z",
          "updatedAt": "2026-04-22T14:30:00.000Z"
        }
      ]
    }
  }
}

If the project was deleted in Ezus, the call still succeeds: the booking gets an ezusDeletedAt date and its alternatives become ORPHAN.

ErrorWhen
404 BOOKING_NOT_FOUNDNo such booking in this agency
422 BOOKING_NOT_FROM_EZUSThe booking has no ezusProjectId
409 EZUS_NOT_CONNECTEDThe agency has no Ezus connection
401 EZUS_TOKEN_REJECTED, 422 EZUS_LOGIN_FAILEDEzus refused the stored credentials
502 EZUS_PROJECT_UNREACHABLE, 502 EZUS_PROJECT_FAILEDEzus is down or answered with an error

List checkout fields

GET/v1/checkout-fieldsScopepayment-links:read

Returns the questions your agency can ask travelers on the checkout: passport number, dietary needs, and so on. Send the chosen keys as checkoutFieldKeys when you create a link.

Shell
curl https://api.ezuspay.app/v1/checkout-fields -H "x-api-key: $EZP_KEY"
JSON
{
  "success": true,
  "data": {
    "checkoutFields": [
      { "key": "phone", "label": "Phone", "type": "PHONE", "required": true, "isDefault": true },
      { "key": "passport_number", "label": "Passport number", "type": "TEXT", "required": false, "isDefault": false },
      { "key": "room_type", "label": "Room type", "type": "SELECT", "required": false, "isDefault": false, "options": ["Double", "Twin"] }
    ]
  }
}
FieldNotes
keyStable identifier, a-z, 0-9 and _, up to 50 characters
typeTEXT, TEXTAREA, EMAIL, PHONE, DATE, SELECT or CHECKBOX
isDefaultApplied when a link is created without checkoutFieldKeys
optionsSELECT only
sendConfirmationEMAIL only. The payment confirmation also goes to the address typed in this field

An agency has at most 10 fields. The list is empty when none are set up.

POST/v1/bookings/:id/payment-linksScopepayment-links:write

Creates a payment link on one alternative of the booking and returns a checkout URL ready to share. Returns 201.

FieldTypeRequiredRules
amountCentsintegeryes100 to 99,999,999
labelstringnoUp to 255. Defaults to the booking reference, or its name
allowedMethodsarrayno"card" and/or "sepa_debit". Default ["card"]. SEPA applies to EUR only
expiresAtdatetimenoISO 8601. Omit for a link that never expires
isReusablebooleannoDefault false. A reusable link can be paid several times, by several people
checkoutFieldKeysarraynoKeys from GET /v1/checkout-fields, up to 10. Omitted: default fields. []: no fields
alternativeIdstringnoEzus Pay alternative ID
ezusAlternativeIdstringnoThe alternative's reference in Ezus

Which alternative gets the link. With alternativeId, that alternative. With ezusAlternativeId, the matching alternative; if it is unknown, Ezus Pay resyncs the booking once and tries again. With neither, the main alternative. Never send both (422).

The currency is always the booking's. For an Ezus booking, the booking is refreshed from Ezus first if its last sync is over a minute old.

Shell
curl -X POST https://api.ezuspay.app/v1/bookings/7c9e6679-7425-40de-944b-e07fc1f90ae7/payment-links \
  -H "x-api-key: $EZP_KEY" -H "Content-Type: application/json" \
  -d '{
    "amountCents": 144000,
    "label": "Deposit 30%",
    "allowedMethods": ["card", "sepa_debit"],
    "expiresAt": "2026-05-23T00:00:00Z",
    "checkoutFieldKeys": ["phone"],
    "ezusAlternativeId": "ALT-1"
  }'
JSON
{
  "success": true,
  "data": {
    "paymentLink": {
      "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "alternativeId": "b3a1f0e2-6d4c-4e8a-9b7f-1c2d3e4f5a6b",
      "label": "Deposit 30%",
      "amountCents": 144000,
      "currency": "EUR",
      "allowedMethods": ["card", "sepa_debit"],
      "status": "ACTIVE",
      "isReusable": false,
      "checkoutFields": [
        { "key": "phone", "label": "Phone", "type": "PHONE", "required": true, "isDefault": true }
      ],
      "kind": "SINGLE",
      "checkoutUrl": "https://app.ezuspay.io/lnk/voyages-horizon/8K3QZ7M2XR4T",
      "shortToken": "8K3QZ7M2XR4T",
      "expiresAt": "2026-05-23T00:00:00.000Z",
      "createdAt": "2026-04-21T09:15:00.000Z",
      "updatedAt": "2026-04-21T09:15:00.000Z"
    }
  }
}

checkoutFields is a copy taken when the link is created. Later edits to your field library do not change links already shared.

ErrorWhen
404 BOOKING_NOT_FOUNDNo such booking in this agency
404 ALTERNATIVE_NOT_FOUNDThe target alternative does not exist
409 REUSABLE_LINK_BESIDE_PLANReusable link on an alternative with an open payment plan
422 AMOUNT_EXCEEDS_AVAILABLEThe amount is more than what the payment plan leaves to collect
GET/v1/bookings/:id/payment-linksScopepayment-links:read

Every link of the booking, across all its alternatives, newest first. Payment plan links are included. Not paginated.

Shell
curl https://api.ezuspay.app/v1/bookings/7c9e6679-7425-40de-944b-e07fc1f90ae7/payment-links \
  -H "x-api-key: $EZP_KEY"
JSON
{
  "success": true,
  "data": {
    "paymentLinks": [
      {
        "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
        "label": "Extra excursion",
        "amountCents": 20000,
        "currency": "EUR",
        "allowedMethods": ["card", "sepa_debit"],
        "status": "ACTIVE",
        "kind": "SINGLE",
        "plan": null,
        "expiresAt": "2026-05-23T00:00:00.000Z",
        "createdAt": "2026-04-21T09:15:00.000Z",
        "updatedAt": "2026-04-21T09:15:00.000Z",
        "checkoutUrl": "https://app.ezuspay.io/lnk/voyages-horizon/8K3QZ7M2XR4T",
        "alternative": { "id": "b3a1f0e2-6d4c-4e8a-9b7f-1c2d3e4f5a6b", "alternativeName": "14 days", "ezusAlternativeId": "ALT-1" }
      }
    ]
  }
}

Link status is one of DRAFT, ACTIVE, EXPIRED, PAID, CANCELLED. A single-use link becomes PAID after its payment. A reusable link stays ACTIVE.

GET/v1/payment-links/:idScopepayment-links:read

One link, with its alternative, its booking and what it has collected.

Shell
curl https://api.ezuspay.app/v1/payment-links/d290f1ee-6c54-4b01-90e6-d701748f0851 \
  -H "x-api-key: $EZP_KEY"
JSON
{
  "success": true,
  "data": {
    "paymentLink": {
      "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "label": "Deposit 30%",
      "amountCents": 144000,
      "currency": "EUR",
      "allowedMethods": ["card", "sepa_debit"],
      "status": "PAID",
      "isReusable": false,
      "kind": "SINGLE",
      "plan": null,
      "checkoutUrl": "https://app.ezuspay.io/lnk/voyages-horizon/8K3QZ7M2XR4T",
      "shortToken": "8K3QZ7M2XR4T",
      "expiresAt": "2026-05-23T00:00:00.000Z",
      "createdAt": "2026-04-21T09:15:00.000Z",
      "updatedAt": "2026-04-22T14:30:00.000Z",
      "amountPaidCents": 144000,
      "paymentCount": 1,
      "alternative": {
        "id": "b3a1f0e2-6d4c-4e8a-9b7f-1c2d3e4f5a6b",
        "alternativeName": "14 days",
        "ezusAlternativeId": "ALT-1",
        "clientName": "Jean Dupont",
        "clientEmail": "jean@example.com"
      },
      "booking": {
        "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "reference": "2026-0042",
        "name": "Bali honeymoon 2026",
        "clientName": "Jean Dupont",
        "ezusProjectId": "PRJ-1029"
      }
    }
  }
}

amountPaidCents and paymentCount count payments whose status is SUCCEEDED. A payment that was later refunded, even in part, drops out of these totals. For exact figures, use the link's transactions.

Error: 404 PAYMENT_LINK_NOT_FOUND.

Payment plans in responses

Payment plans (deposit, installments and balance, paid by link or charged to a saved card) are set up in the app. The API does not create them, and a link created through the API is always kind: "SINGLE". Plan links do appear in the two read endpoints above, with kind: "PLAN" and a plan object.

JSON
{
  "kind": "PLAN",
  "amountCents": 168000,
  "plan": {
    "id": "9b2e4c1a-3f5d-4e6a-8b7c-0d1e2f3a4b5c",
    "status": "ACTIVE",
    "collectionMode": "AUTO_CHARGE",
    "totalAmountCents": 480000,
    "paidCents": 144000,
    "installments": [
      { "id": "1a2b3c4d-0000-4000-8000-000000000001", "sequence": 1, "amountCents": 144000, "dueDate": "2026-04-21", "status": "PAID", "paidAt": "2026-04-21T10:02:00.000Z", "collectionMode": "AUTO_CHARGE" },
      { "id": "1a2b3c4d-0000-4000-8000-000000000002", "sequence": 2, "amountCents": 168000, "dueDate": "2026-06-15", "status": "SCHEDULED", "paidAt": null, "collectionMode": "AUTO_CHARGE" },
      { "id": "1a2b3c4d-0000-4000-8000-000000000003", "sequence": 3, "amountCents": 168000, "dueDate": "2026-08-01", "status": "SCHEDULED", "paidAt": null, "collectionMode": "AUTO_CHARGE" }
    ]
  }
}
FieldValues
amountCents (on the link)The installment payable now, not the plan total
plan.statusPENDING (deposit not paid yet), ACTIVE, PAUSED, COMPLETED, CANCELLED
plan.collectionModeLINK (the traveler pays each installment) or AUTO_CHARGE (the saved card is charged)
installments[].sequence1 is the deposit
installments[].statusSCHEDULED, PROCESSING, PAID, FAILED, ACTION_REQUIRED, ON_HOLD, CANCELLED
installments[].collectionModeCan be LINK on an AUTO_CHARGE plan: that installment will be paid by link
installments[].dueDateYYYY-MM-DD

On an alternative with an open plan, you cannot add a reusable link, and a new link cannot exceed what the plan leaves to collect.

Transactions

List transactions

GET/v1/transactionsScopetransactions:read

The agency's payments, paginated. Payments by link, payments entered by hand and payments imported from Ezus are all included.

QueryDefaultValues
page11 or more
limit501 to 100
statusPENDING, SUCCEEDED, FAILED, REFUNDED, PARTIALLY_REFUNDED
sourceEZUS_PAY (paid by link), MANUAL (entered by hand), EZUS_LEGACY (imported from Ezus)
sortDirdescasc or desc, by payment date
dateFromYYYY-MM-DD, inclusive
dateToYYYY-MM-DD, inclusive

Dates filter on the payment date, or on the creation date for a payment not completed yet.

Shell
curl "https://api.ezuspay.app/v1/transactions?status=SUCCEEDED&dateFrom=2026-04-01&dateTo=2026-04-30" \
  -H "x-api-key: $EZP_KEY"
JSON
{
  "success": true,
  "data": {
    "transactions": [
      {
        "id": "5f8d0d55-b4a1-4c7e-9a3f-2e1d0c9b8a7f",
        "status": "SUCCEEDED",
        "source": "EZUS_PAY",
        "amountCents": 144000,
        "currency": "EUR",
        "paymentMethod": "card",
        "manualMethod": null,
        "note": null,
        "payerName": "Marie Martin",
        "cardBrand": "visa",
        "cardFunding": "credit",
        "cardCountry": "FR",
        "applicationFeeAmount": 4320,
        "applicationFeeAmountHt": 3600,
        "applicationFeeVatRate": 20,
        "refundedAmountCents": 0,
        "refundableAmountCents": 144000,
        "stripePaymentIntentId": "pi_3PqR8sLkdIwHu7ix0abc1234",
        "paidAt": "2026-04-22T14:30:00.000Z",
        "createdAt": "2026-04-22T14:29:58.000Z",
        "paymentLink": { "id": "d290f1ee-6c54-4b01-90e6-d701748f0851", "label": "Deposit 30%" },
        "alternative": {
          "id": "b3a1f0e2-6d4c-4e8a-9b7f-1c2d3e4f5a6b",
          "alternativeName": "14 days",
          "ezusAlternativeId": "ALT-1",
          "clientName": "Jean Dupont",
          "clientEmail": "jean@example.com"
        },
        "booking": { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "reference": "2026-0042", "name": "Bali honeymoon 2026", "ezusProjectId": "PRJ-1029" }
      }
    ],
    "pagination": { "page": 1, "limit": 50, "total": 1, "totalPages": 1 }
  }
}
FieldNotes
paymentMethodcard or sepa_debit. null for a manual payment
manualMethodBANK_TRANSFER, CASH, CHECK or OTHER, for manual payments
payerNameName of the cardholder or payer. It can differ from the client, for example when a company pays
applicationFeeAmountEzus Pay fee including VAT, in cents. applicationFeeAmountHt excludes VAT. Zero on manual payments
refundableAmountCentsWhat a refund would accept right now
paymentLink, bookingnull when the payment has no link or no booking (manual or imported)

Transactions do not carry payment plan information.

List a booking's transactions

GET/v1/bookings/:id/transactionsScopetransactions:read

Same query parameters and response as GET /v1/transactions, for one booking. Payments by link and payments entered by hand are both included. Returns 404 BOOKING_NOT_FOUND, rather than an empty list, for a booking outside your agency.

GET/v1/payment-links/:id/transactionsScopetransactions:read

Same query parameters and response, for one link. This is the payment-by-payment detail behind a reusable link. Returns 404 PAYMENT_LINK_NOT_FOUND for an unknown link.

Retrieve a transaction

GET/v1/transactions/:idScopetransactions:read

One transaction, with two extra fields: the traveler's answers to the checkout fields, and the refund history.

JSON
{
  "success": true,
  "data": {
    "transaction": {
      "id": "5f8d0d55-b4a1-4c7e-9a3f-2e1d0c9b8a7f",
      "status": "PARTIALLY_REFUNDED",
      "amountCents": 144000,
      "refundedAmountCents": 30000,
      "refundableAmountCents": 114000,
      "checkoutFields": [
        { "key": "phone", "label": "Phone", "type": "PHONE", "value": "+33612345678" }
      ],
      "refunds": [
        {
          "id": "0e4c7b2a-9d1f-4a3b-8c6e-5f7a9b1c3d5e",
          "amountCents": 30000,
          "currency": "EUR",
          "status": "SUCCEEDED",
          "reason": "REQUESTED_BY_CUSTOMER",
          "note": null,
          "policy": "KEEP_FEE",
          "failureReason": null,
          "succeededAt": "2026-05-02T10:00:00.000Z",
          "createdAt": "2026-05-01T10:00:00.000Z"
        }
      ]
    }
  }
}

The other fields are the same as in the list (shortened here). checkoutFields keeps the label and type as they were at payment time, and every value is a string. Refund status is PENDING, SUCCEEDED, FAILED or CANCELED.

Error: 404 TRANSACTION_NOT_FOUND.

Refunds

Refund a payment

POST/v1/transactions/:id/refundsScoperefunds:write

Refunds all or part of a card or SEPA payment. Returns 202 Accepted: Stripe has accepted the refund, but the money has not moved yet. The final state arrives later, through the payment.refunded webhook and on the transaction. A SEPA refund can take several days.

FieldTypeRules
amountCentsinteger1 to 99,999,999. Omit it to refund everything that is left
reasonstringDUPLICATE, FRAUDULENT, REQUESTED_BY_CUSTOMER or OTHER
notestringUp to 1,000 characters, for your records
Shell
curl -X POST https://api.ezuspay.app/v1/transactions/5f8d0d55-b4a1-4c7e-9a3f-2e1d0c9b8a7f/refunds \
  -H "x-api-key: $EZP_KEY" -H "Content-Type: application/json" \
  -d '{ "amountCents": 48000, "reason": "REQUESTED_BY_CUSTOMER", "note": "Partial trip cancellation" }'
JSON
{
  "success": true,
  "data": {
    "refund": {
      "id": "0e4c7b2a-9d1f-4a3b-8c6e-5f7a9b1c3d5e",
      "amountCents": 48000,
      "status": "PENDING",
      "remainingCents": 96000
    }
  }
}
  • The Ezus Pay fee is not refunded.
  • A refund already in progress counts against what is left, so two calls can never refund more than the payment.
  • Retrying the call creates a second refund. Check refundableAmountCents before you retry.
  • Payments entered by hand cannot be refunded through Ezus Pay.
ErrorWhen
404 TRANSACTION_NOT_FOUNDNo such payment in this agency
409 TRANSACTION_NOT_REFUNDABLEThe payment has not succeeded, or has no Stripe charge
409 MANUAL_PAYMENT_NOT_REFUNDABLEPayment entered by hand
409 NOTHING_LEFT_TO_REFUNDAlready fully refunded
422 REFUND_AMOUNT_TOO_HIGHMore than what is left to refund
502 REFUND_FAILEDStripe refused the refund

Supported currencies

EUR, USD, GBP, CHF, CAD, AUD, NZD, SGD, HKD, SEK, NOK, DKK, PLN, CZK, HUF, RON, BGN, MXN, BRL, ARS, CLP, COP, AED, SAR, QAR, BHD, KWD, ZAR, KES, GHS, INR, THB, MYR, IDR, PHP.