API reference
e-Payouts REST API for merchants: create payments (hosted paymentbox), query their status, available methods, balance and refunds. JSON over HTTPS; authentication exclusively through HMAC-SHA256 signed headers. Amounts always travel as text with two decimals and a dot ("49.90"), and dates in UTC (ISO 8601).
https://api.e-payouts.com · Every route requires the signed headers except those marked "no authentication". Authentication →Account
Test your credentials, check your balance and see your modules and their payment methods.
/v2/ping
Test credentials
Checks that your Key ID, secret and signature are right, without doing anything else. It returns the name of the merchant that owns the key and the server time: if signing fails with timestamp_out_of_range, compare server_time with your server clock. It is the recommended first call when integrating.
Responses
- 200 OK
- 401 Missing, invalid, expired or reused signature.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | object | |
| data.object | "ping" | |
| data.merchant | string | Name of the merchant that owns the key. |
| data.uid | integer | null | Your v1 merchant id, if the account comes from v1; otherwise null. |
| data.server_time | string | Server time (UTC). |
{
"data": {
"object": "ping",
"merchant": "My Store Ltd",
"uid": 73,
"server_time": "2026-09-30T15:04:05Z"
}
}/v2/balance
Balance per currency
Returns your balance in each currency you hold: what is available to withdraw, what is pending (paid payments waiting for their availability date) and what is held (guarantee reserves). It is the same balance you see in your merchant panel.
Responses
- 200 OK
- 401 Missing, invalid, expired or reused signature.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | array | |
| data.[].object | "balance" | |
| data.[].currency | string · ^[A-Z]{3}$ | Balance currency. |
| data.[].available | string · ^\d+\.\d{2}$ | Available to withdraw. |
| data.[].pending | string · ^\d+\.\d{2}$ | Pending: paid payments still waiting for their availability date. |
| data.[].reserved | string · ^\d+\.\d{2}$ | Held: guarantee reserves, until their release date. |
| data.[].updated_at | string | Last movement (UTC). |
{
"data": [
{
"object": "balance",
"currency": "EUR",
"available": "1250.40",
"pending": "486.15",
"reserved": "62.30",
"updated_at": "2026-09-30T14:35:10Z"
}
]
}/v2/modules
List modules
Returns every module in your account with its site. A module is a payment integration (a store or a form): every payment is created for a module, which defines the enabled methods, the notification URL and whether it is live or in test mode (sandbox). Use it to get the module id you need to create payments.
Responses
- 200 OK
- 401 Missing, invalid, expired or reused signature.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | array | |
| data.[].id | string | Module id (UUID): the one you send as module when creating payments. |
| data.[].object | "module" | |
| data.[].mid | integer | null | v1 mid, if the module comes from v1. |
| data.[].name | string | Name you gave it. |
| data.[].mode | string (live | sandbox) | live = charges for real; sandbox = test with simulator. |
| data.[].status | string (created | enabled | disabled | off) | Only enabled can charge. |
| data.[].price | string | null | Default price, if any. |
| data.[].currency | string | null | Price currency, if any. |
| data.[].site | object | Site it belongs to. |
| data.[].site.name | string | |
| data.[].site.url | string | |
| data.[].site.status | string (created | enabled | disabled | locked | off) | Only enabled can charge. |
{
"data": [
{
"id": "7c1e4a52-5d0b-4f7e-9a1d-3b8f2c6d9e10",
"object": "module",
"mid": 55,
"name": "Main store",
"mode": "live",
"status": "enabled",
"price": null,
"currency": null,
"site": {
"name": "tienda.example.com",
"url": "https://tienda.example.com",
"status": "enabled"
}
}
]
}/v2/modules/{module}
Get a module
Returns one module of your account: name, mode (live or sandbox), status, default price if any, and its site. Use it, for example, to check before charging that the module and its site are enabled.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| module required | path | string | Module id (UUID) or v1 mid. |
Responses
- 200 OK
- 401 Missing, invalid, expired or reused signature.
- 404 Not found or belongs to another merchant.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | object | |
| data.id | string | Module id (UUID): the one you send as module when creating payments. |
| data.object | "module" | |
| data.mid | integer | null | v1 mid, if the module comes from v1. |
| data.name | string | Name you gave it. |
| data.mode | string (live | sandbox) | live = charges for real; sandbox = test with simulator. |
| data.status | string (created | enabled | disabled | off) | Only enabled can charge. |
| data.price | string | null | Default price, if any. |
| data.currency | string | null | Price currency, if any. |
| data.site | object | Site it belongs to. |
| data.site.name | string | |
| data.site.url | string | |
| data.site.status | string (created | enabled | disabled | locked | off) | Only enabled can charge. |
{
"data": {
"id": "7c1e4a52-5d0b-4f7e-9a1d-3b8f2c6d9e10",
"object": "module",
"mid": 55,
"name": "Main store",
"mode": "live",
"status": "enabled",
"price": null,
"currency": null,
"site": {
"name": "tienda.example.com",
"url": "https://tienda.example.com",
"status": "enabled"
}
}
}/v2/modules/{module}/methods
Available methods
Returns the payment methods the paymentbox would offer the customer for that module, amount and country, with the code your integration uses, each one's minimum and maximum and the estimated commission. Use it to show the methods in your own store or to preselect one when creating the payment (method field). amount and currency are required unless the module has a fixed price.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| module required | path | string | Module id (UUID) or v1 mid. |
| amount | query | string · ^\d+\.\d{2}$ | Amount, dot as decimal separator. |
| currency | query | string · ^[A-Z]{3}$ | Currency of the amount (ISO 4217). Default: "EUR" |
| country | query | string · ^[A-Za-z]{2}$ | Customer country (ISO 3166-1 alpha-2). Some methods are only offered in certain countries. |
| lang | query | string (en | es | fr | de | it | pt) | Language of each method name (the one the customer sees at checkout). Without it, your account language. |
Responses
- 200 OK
- 401 Missing, invalid, expired or reused signature.
- 403 IP not allowed or merchant disabled.
- 404 Not found or belongs to another merchant.
- 422 Validation failed: see error.fields.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data | array | |
| data.[].object | "method" | |
| data.[].code | string | The code your integration uses (routing applied); the one you send as method. |
| data.[].name | string | Display name. |
| data.[].min | string | null | Minimum amount; null = no minimum. |
| data.[].max | string | null | Maximum amount; null = no maximum. |
| data.[].commission | object | Estimated commission for that amount. |
| data.[].commission.amount | string · ^\d+\.\d{2}$ | |
| data.[].commission.currency | string | |
| data.[].requires_phone | boolean | true when the customer must give a phone number (MB WAY). |
| amount | string · ^\d+\.\d{2}$ | Amount used for the calculation (the module fixed price, if any). |
| currency | string · ^[A-Z]{3}$ | Currency of the amount. |
| sandbox | boolean | true when the module is in test mode. |
{
"data": [
{
"object": "method",
"code": "safetypay",
"name": "SafetyPay",
"min": "10.00",
"max": "2000.00",
"commission": {
"amount": "8.74",
"currency": "EUR"
},
"requires_phone": false
},
{
"object": "method",
"code": "multibanco",
"name": "Multibanco",
"min": "5.00",
"max": "1000.00",
"commission": {
"amount": "3.17",
"currency": "EUR"
},
"requires_phone": false
},
{
"object": "method",
"code": "mbway",
"name": "MB WAY",
"min": "5.00",
"max": "1000.00",
"commission": {
"amount": "3.17",
"currency": "EUR"
},
"requires_phone": true
}
],
"amount": "49.90",
"currency": "EUR",
"sandbox": false
}Payments
Create payments (get the paymentbox link) and query their status.
/v2/payments
Create a payment
Prepares a charge and returns checkout_url, the paymentbox address where the customer chooses the method and pays: redirect them there (or open it in an iframe). No payment exists yet: it is created when the customer chooses the method and pays. The result arrives by webhook at the module's notification URL, with the same ucode. The link expires in 60 minutes.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| Idempotency-Key | header | string | Optional (8 to 64 characters [A-Za-z0-9_-]). Lets you retry without duplicates: repeating the call with the same key and body within 24 h returns the original response (with the header Idempotent-Replayed: true) instead of creating another resource. Use a new key for each different operation. |
Body application/json
| Field | Type | Description |
|---|---|---|
| module required | string | Module id (UUID) or v1 mid. |
| amount | string · ^\d+\.\d{2}$ | Required if the module has no default price. If the module price is fixed, omit it or send that value; otherwise it replaces the default price. |
| currency | string · ^[A-Z]{3}$ | Defaults to your account currency. If different, the payment is converted to your account currency. |
| ucode | string · ^[A-Za-z0-9._:/#-]{1,64}$ | Your order code; it comes back in the webhook and the redirect. |
| method | string | Preselect a method (see /methods). If unavailable: 422 method_unavailable. |
| locale | string (en | es | fr | de | it | pt) | Paymentbox language. Default: "es" |
| customer | object | Customer data to prefill the paymentbox form (optional). |
| customer.name | string | Full name. |
| customer.email | string | The receipt is sent there. |
| customer.country | string · ^[A-Za-z]{2}$ | Country (ISO 3166-1 alpha-2); decides which methods are offered. Without it, the paymentbox detects it from the customer IP and lets them change it. |
| customer.phone | string | Portuguese mobile (+351 9XXXXXXXX) for MB WAY. If you also send method, name and email, the customer goes straight to the provider, except for MB WAY: there they see the screen prefilled and confirm with one click. |
{
"module": "7c1e4a52-5d0b-4f7e-9a1d-3b8f2c6d9e10",
"amount": "49.90",
"currency": "EUR",
"ucode": "PEDIDO-1042",
"locale": "es",
"customer": {
"name": "Ana García",
"email": "[email protected]",
"country": "ES"
}
}Responses
- 201 Created
- 400 Invalid parameter or malformed JSON.
- 401 Missing, invalid, expired or reused signature.
- 403 IP not allowed or merchant disabled.
- 404 Not found or belongs to another merchant.
- 409 The current state does not allow the operation.
- 415 Wrong Content-Type.
- 422 Validation failed: see error.fields.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | object | |
| data.object | "checkout" | |
| data.checkout_url | string | Paymentbox link: send the customer there. |
| data.expires_at | string | Link expiry (UTC). |
| data.sandbox | boolean | true when the module is in test mode (no real money is charged). |
| data.module | object | Module it belongs to. |
| data.module.id | string | Module id (UUID). |
| data.module.mid | integer | null | v1 mid, if the module comes from v1. |
| data.amount | string · ^\d+\.\d{2}$ | Amount to charge. |
| data.currency | string · ^[A-Z]{3}$ | Currency of the amount. |
| data.ucode | string | null | Your order code, if you sent one. |
| data.method | string | null | Preselected method, if you asked for one. |
| data.methods | array | Codes of the methods the customer will see. |
{
"data": {
"object": "checkout",
"checkout_url": "http://paymentbox2.e-payouts.local/pagar?t=Xk3v9QpL2mZ7wR4tY8bN1cF6hJ0sD5aG",
"expires_at": "2026-09-30T16:04:05Z",
"sandbox": false,
"module": {
"id": "7c1e4a52-5d0b-4f7e-9a1d-3b8f2c6d9e10",
"mid": 55
},
"amount": "49.90",
"currency": "EUR",
"ucode": "PEDIDO-1042",
"method": null,
"methods": [
"sofort",
"safetypay",
"ppal",
"16cards",
"multibanco",
"mbway"
]
}
}/v2/payments
List payments
Searches the payments of your account and returns them newest first. Use it to reconcile: for example, find the payment for an order (ucode), review a day's completed payments or recover the status if a webhook was lost. Filters can be combined. It returns up to limit payments per page: if has_more is true, request the next one passing next_cursor as cursor. Test payments (sandbox) are listed separately, with sandbox=true.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| ucode | query | string | Only payments with that order code. |
| module | query | string | Only those of that module: id (UUID) or mid. |
| status | query | string (created | pending | completed | failed | cancelled | refunded | charged_back) | Only those in that status. |
| created_from | query | string | Created from this date (UTC), inclusive: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ. |
| created_to | query | string | Created before this date (UTC), exclusive. |
| sandbox | query | boolean | true = list test payments from sandbox-mode modules instead of real ones. Default: false |
| limit | query | integer | Results per page (1 to 100). Default: 20 |
| cursor | query | string | To get the next page: next_cursor from the previous response. |
Responses
- 200 OK
- 400 Invalid parameter or malformed JSON.
- 401 Missing, invalid, expired or reused signature.
- 404 Not found or belongs to another merchant.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | array | |
| data.[].code | string | Payment code (UUID). |
| data.[].object | "payment" | |
| data.[].sandbox | boolean | true = test payment (no money moved). |
| data.[].status | string (created | pending | completed | failed | cancelled | refunded | charged_back) | Only completed means paid. pending = waiting for the customer to finish (e.g. unpaid Multibanco reference). |
| data.[].ucode | string | null | Your order code. |
| data.[].method | string | Code of the method the customer chose. |
| data.[].effective_method | string | Method that actually charged the payment. Differs from method only when that method is routed (e.g. method ppal, effective_method 16cards). |
| data.[].amount | string · ^\d+\.\d{2}$ | Amount you asked to charge. |
| data.[].currency | string · ^[A-Z]{3}$ | Currency of amount. |
| data.[].charged | object | null | Only when the chosen method does not accept the payment currency (e.g. MB WAY and Multibanco charge in EUR): what the customer was charged and the rate used (market + margin). amount and currency are still what you requested. Otherwise null. |
| data.[].charged.amount | string · ^\d+\.\d{2}$ | |
| data.[].charged.currency | string | |
| data.[].charged.exchange_rate | string | |
| data.[].module | object | Module it belongs to. |
| data.[].module.id | string | Module id (UUID). |
| data.[].module.mid | integer | null | v1 mid, if the module comes from v1. |
| data.[].customer | object | Data the customer left (each may be null). |
| data.[].customer.name | string | null | |
| data.[].customer.email | string | null | |
| data.[].customer.country | string | null | |
| data.[].commission | object | e-Payouts commission. Real payments only. |
| data.[].commission.amount | string · ^\d+\.\d{2}$ | |
| data.[].commission.currency | string | |
| data.[].net_amount | string | null | Amount minus commission, in the currency of amount (real payments only; null when charged in another currency: see settlement). |
| data.[].settlement | object | null | What is credited to your balance: amount in your account currency and applied rate (margin included; null when there was no conversion). Real payments only. |
| data.[].settlement.amount | string · ^\d+\.\d{2}$ | |
| data.[].settlement.currency | string (EUR | USD) | |
| data.[].settlement.exchange_rate | string | null | |
| data.[].completed_at | string | null | When it was paid; null if not yet. Real payments only. |
| data.[].created_at | string | When the payment was created (UTC). |
| has_more required | boolean | true when there are more results after this page. |
| next_cursor required | string | null | Pass it as cursor to get the next page; null on the last page. |
{
"data": [
{
"code": "8a2c4e6f-1b3d-4f5a-9c7e-0d2f4a6b8c1e",
"object": "payment",
"sandbox": false,
"status": "pending",
"ucode": "PEDIDO-1043",
"method": "multibanco",
"effective_method": "multibanco",
"amount": "12.00",
"currency": "USD",
"charged": {
"amount": "10.65",
"currency": "EUR",
"exchange_rate": "0.8877599005"
},
"module": {
"id": "7c1e4a52-5d0b-4f7e-9a1d-3b8f2c6d9e10",
"mid": 55
},
"customer": {
"name": "João Silva",
"email": "[email protected]",
"country": "PT"
},
"commission": {
"amount": "0.82",
"currency": "EUR"
},
"net_amount": null,
"settlement": {
"amount": "11.93",
"currency": "USD",
"exchange_rate": "1.120629575"
},
"completed_at": null,
"created_at": "2026-09-30T14:35:10Z"
},
{
"code": "3f6b2d10-9a4c-4e21-8b7f-5c0d1e2f3a4b",
"object": "payment",
"sandbox": false,
"status": "completed",
"ucode": "PEDIDO-1042",
"method": "sofort",
"effective_method": "sofort",
"amount": "49.90",
"currency": "EUR",
"charged": null,
"module": {
"id": "7c1e4a52-5d0b-4f7e-9a1d-3b8f2c6d9e10",
"mid": 55
},
"customer": {
"name": "Ana García",
"email": "[email protected]",
"country": "ES"
},
"commission": {
"amount": "2.15",
"currency": "EUR"
},
"net_amount": "47.75",
"settlement": {
"amount": "49.90",
"currency": "EUR",
"exchange_rate": null
},
"completed_at": "2026-09-18T14:35:02Z",
"created_at": "2026-09-18T14:33:22Z"
}
],
"has_more": true,
"next_cursor": "MTAyNA"
}/v2/payments/{code}
Get a payment
Returns the current status and details of a payment: method, amounts, commission, net and settlement. Use it to confirm a webhook before delivering the order (fetch the payment by id and check status and amount) or to show the status in your system. It works for real and test payments; test payments do not include commission, net_amount, settlement or completed_at.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| code required | path | string | Payment code (UUID, the payment's code field). |
Responses
- 200 OK
- 401 Missing, invalid, expired or reused signature.
- 404 Not found or belongs to another merchant.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | object | |
| data.code | string | Payment code (UUID). |
| data.object | "payment" | |
| data.sandbox | boolean | true = test payment (no money moved). |
| data.status | string (created | pending | completed | failed | cancelled | refunded | charged_back) | Only completed means paid. pending = waiting for the customer to finish (e.g. unpaid Multibanco reference). |
| data.ucode | string | null | Your order code. |
| data.method | string | Code of the method the customer chose. |
| data.effective_method | string | Method that actually charged the payment. Differs from method only when that method is routed (e.g. method ppal, effective_method 16cards). |
| data.amount | string · ^\d+\.\d{2}$ | Amount you asked to charge. |
| data.currency | string · ^[A-Z]{3}$ | Currency of amount. |
| data.charged | object | null | Only when the chosen method does not accept the payment currency (e.g. MB WAY and Multibanco charge in EUR): what the customer was charged and the rate used (market + margin). amount and currency are still what you requested. Otherwise null. |
| data.charged.amount | string · ^\d+\.\d{2}$ | |
| data.charged.currency | string | |
| data.charged.exchange_rate | string | |
| data.module | object | Module it belongs to. |
| data.module.id | string | Module id (UUID). |
| data.module.mid | integer | null | v1 mid, if the module comes from v1. |
| data.customer | object | Data the customer left (each may be null). |
| data.customer.name | string | null | |
| data.customer.email | string | null | |
| data.customer.country | string | null | |
| data.commission | object | e-Payouts commission. Real payments only. |
| data.commission.amount | string · ^\d+\.\d{2}$ | |
| data.commission.currency | string | |
| data.net_amount | string | null | Amount minus commission, in the currency of amount (real payments only; null when charged in another currency: see settlement). |
| data.settlement | object | null | What is credited to your balance: amount in your account currency and applied rate (margin included; null when there was no conversion). Real payments only. |
| data.settlement.amount | string · ^\d+\.\d{2}$ | |
| data.settlement.currency | string (EUR | USD) | |
| data.settlement.exchange_rate | string | null | |
| data.completed_at | string | null | When it was paid; null if not yet. Real payments only. |
| data.created_at | string | When the payment was created (UTC). |
{
"data": {
"code": "3f6b2d10-9a4c-4e21-8b7f-5c0d1e2f3a4b",
"object": "payment",
"sandbox": false,
"status": "completed",
"ucode": "PEDIDO-1042",
"method": "sofort",
"effective_method": "sofort",
"amount": "49.90",
"currency": "EUR",
"charged": null,
"module": {
"id": "7c1e4a52-5d0b-4f7e-9a1d-3b8f2c6d9e10",
"mid": 55
},
"customer": {
"name": "Ana García",
"email": "[email protected]",
"country": "ES"
},
"commission": {
"amount": "2.15",
"currency": "EUR"
},
"net_amount": "47.75",
"settlement": {
"amount": "49.90",
"currency": "EUR",
"exchange_rate": null
},
"completed_at": "2026-09-18T14:35:02Z",
"created_at": "2026-09-18T14:33:22Z"
}
}Refunds and chargebacks
Request a refund for a payment and list refunds and chargebacks.
/v2/payments/{code}/refunds
Request a refund
Requests the full refund of a completed payment. It stays in created status until e-Payouts processes it; only one live refund per payment. It can only be requested within the window set by e-Payouts since the payment was completed (currently 2 months); after that it answers 409 refund_window_expired and must be requested through a ticket in your merchant panel. Test payments are not refunded.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| code required | path | string | Payment code (UUID, the payment's code field). |
| Idempotency-Key | header | string | Optional (8 to 64 characters [A-Za-z0-9_-]). Lets you retry without duplicates: repeating the call with the same key and body within 24 h returns the original response (with the header Idempotent-Replayed: true) instead of creating another resource. Use a new key for each different operation. |
Body application/json
| Field | Type | Description |
|---|---|---|
| reason | string | Reason (optional), for your records and e-Payouts'. |
{
"reason": "The customer cancelled the order"
}Responses
- 201 Created
- 401 Missing, invalid, expired or reused signature.
- 404 Not found or belongs to another merchant.
- 409 The current state does not allow the operation.
- 422 Validation failed: see error.fields.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | object | |
| data.id | string | Refund or chargeback id (UUID). |
| data.object | string (refund | chargeback) | refund = refund; chargeback = chargeback (the customer disputed the charge with their bank). |
| data.status | string (created | processing | completed | rejected) | created = requested; processing = in progress; completed = done; rejected = rejected. |
| data.amount | string · ^\d+\.\d{2}$ | Amount refunded or disputed. |
| data.currency | string · ^[A-Z]{3}$ | Currency of amount. |
| data.reason | string | null | Reason, if any. |
| data.payment | string | Payment id (UUID). |
| data.created_at | string | When it was created (UTC). |
| data.resolved_at | string | null | When it finished (completed or rejected); null while in progress. |
{
"data": {
"id": "c4d5e6f7-0a1b-4c2d-8e3f-4a5b6c7d8e9f",
"object": "refund",
"status": "created",
"amount": "49.90",
"currency": "EUR",
"reason": "The customer cancelled the order",
"payment": "3f6b2d10-9a4c-4e21-8b7f-5c0d1e2f3a4b",
"created_at": "2026-09-20T09:12:44Z",
"resolved_at": null
}
}/v2/payments/{code}/adjustments
Refunds and chargebacks of a payment
Returns the refunds and chargebacks of a payment, newest first, with their status. Use it to follow a refund you requested or to see whether the customer disputed the charge with their bank.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| code required | path | string | Payment code (UUID, the payment's code field). |
| limit | query | integer | Results per page (1 to 100). Default: 20 |
| cursor | query | string | To get the next page: next_cursor from the previous response. |
Responses
- 200 OK
- 400 Invalid parameter or malformed JSON.
- 401 Missing, invalid, expired or reused signature.
- 404 Not found or belongs to another merchant.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | array | |
| data.[].id | string | Refund or chargeback id (UUID). |
| data.[].object | string (refund | chargeback) | refund = refund; chargeback = chargeback (the customer disputed the charge with their bank). |
| data.[].status | string (created | processing | completed | rejected) | created = requested; processing = in progress; completed = done; rejected = rejected. |
| data.[].amount | string · ^\d+\.\d{2}$ | Amount refunded or disputed. |
| data.[].currency | string · ^[A-Z]{3}$ | Currency of amount. |
| data.[].reason | string | null | Reason, if any. |
| data.[].payment | string | Payment id (UUID). |
| data.[].created_at | string | When it was created (UTC). |
| data.[].resolved_at | string | null | When it finished (completed or rejected); null while in progress. |
| has_more required | boolean | true when there are more results after this page. |
| next_cursor required | string | null | Pass it as cursor to get the next page; null on the last page. |
{
"data": [
{
"id": "c4d5e6f7-0a1b-4c2d-8e3f-4a5b6c7d8e9f",
"object": "refund",
"status": "created",
"amount": "49.90",
"currency": "EUR",
"reason": "The customer cancelled the order",
"payment": "3f6b2d10-9a4c-4e21-8b7f-5c0d1e2f3a4b",
"created_at": "2026-09-20T09:12:44Z",
"resolved_at": null
}
],
"has_more": false,
"next_cursor": null
}/v2/adjustments
List refunds and chargebacks
Returns the refunds and chargebacks of your whole account, newest first. Use it to reconcile the amounts deducted from your balance. It can be filtered by type, status or payment, and it is paginated like payments.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| type | query | string (refund | chargeback) | refund = refunds; chargeback = chargebacks. |
| status | query | string (created | processing | completed | rejected) | Only those in that status. |
| payment | query | string | Only those of that payment (UUID id). |
| limit | query | integer | Results per page (1 to 100). Default: 20 |
| cursor | query | string | To get the next page: next_cursor from the previous response. |
Responses
- 200 OK
- 400 Invalid parameter or malformed JSON.
- 401 Missing, invalid, expired or reused signature.
- 404 Not found or belongs to another merchant.
- 429 Rate limit exceeded (see Retry-After).
- 503 Maintenance or API disabled.
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | array | |
| data.[].id | string | Refund or chargeback id (UUID). |
| data.[].object | string (refund | chargeback) | refund = refund; chargeback = chargeback (the customer disputed the charge with their bank). |
| data.[].status | string (created | processing | completed | rejected) | created = requested; processing = in progress; completed = done; rejected = rejected. |
| data.[].amount | string · ^\d+\.\d{2}$ | Amount refunded or disputed. |
| data.[].currency | string · ^[A-Z]{3}$ | Currency of amount. |
| data.[].reason | string | null | Reason, if any. |
| data.[].payment | string | Payment id (UUID). |
| data.[].created_at | string | When it was created (UTC). |
| data.[].resolved_at | string | null | When it finished (completed or rejected); null while in progress. |
| has_more required | boolean | true when there are more results after this page. |
| next_cursor required | string | null | Pass it as cursor to get the next page; null on the last page. |
{
"data": [
{
"id": "c4d5e6f7-0a1b-4c2d-8e3f-4a5b6c7d8e9f",
"object": "refund",
"status": "created",
"amount": "49.90",
"currency": "EUR",
"reason": "The customer cancelled the order",
"payment": "3f6b2d10-9a4c-4e21-8b7f-5c0d1e2f3a4b",
"created_at": "2026-09-20T09:12:44Z",
"resolved_at": null
},
{
"id": "d1e2f3a4-5b6c-4d7e-8f9a-0b1c2d3e4f5a",
"object": "chargeback",
"status": "completed",
"amount": "30.00",
"currency": "EUR",
"reason": null,
"payment": "9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"created_at": "2026-09-10T16:40:00Z",
"resolved_at": "2026-09-12T10:05:31Z"
}
],
"has_more": false,
"next_cursor": null
}v1 compatibility
Same parameters and responses as api.e-payouts.com (v1), with the new authentication. To migrate without rewriting the integration. Only available when the v1 integration is enabled for your account.
/v1/createCode
createCode (v1): create payment
The same as POST /v2/payments with v1 parameters: it returns the paymentbox link where you must send the customer. With direct present, instead of answering JSON it redirects (302) straight to that link. Note: unlike the other v1 routes, the response has no message or data.
Body application/x-www-form-urlencoded
| Field | Type | Description |
|---|---|---|
| uid required | string | v1 merchant id (your account). |
| mid required | string | v1 module id (mid). |
| price | string | Amount (your account currency). Required if the module has no default price; if its price is fixed, that one is charged. |
| type | string | Method code to preselect it (optional). |
| cc | string | Customer country (2 letters). |
| string | Customer email. | |
| name | string | Customer first name. |
| lastname | string | Customer last name. |
| ucode | string | Your order code. |
| direct | string | If present (any value), redirects (302) to the paymentbox. |
uid=73&mid=55&price=49.90&cc=es&email=ana%40example.com&name=Ana&lastname=Garc%C3%ADa&ucode=PEDIDO-1042Responses
- 200 Always HTTP 200. On success error = 0 with the link; otherwise error holds the v1 error number (see Errors).
- 302 With direct: redirect to the paymentbox (Location header).
Response schema and example
| Field | Type | Description |
|---|---|---|
| error | integer | 0 = success. |
| code | string | Payment session code (the last part of url). |
| url | string | Paymentbox link where you send the customer. |
| expires_at | string | Link expiry (UTC). |
{
"error": 0,
"code": "Xk3v9QpL2mZ7wR4tY8bN1cF6hJ0sD5aG",
"url": "http://paymentbox2.e-payouts.local/pagar?t=Xk3v9QpL2mZ7wR4tY8bN1cF6hJ0sD5aG",
"expires_at": "2026-09-30T16:04:05Z"
}/v1/getData
getData (v1): site, module and methods
Returns the site and module status and the methods available for a country, with their minimum and maximum, and the address to create payments. Equivalent to GET /v2/modules/{module}/methods in the v1 format.
Body application/x-www-form-urlencoded
| Field | Type | Description |
|---|---|---|
| uid required | string | v1 merchant id (your account). |
| mid required | string | v1 module id (mid). |
| cc required | string | Customer country (2 letters). |
| price | string | Amount; required if the module has no fixed price. |
uid=73&mid=55&cc=pt&price=49.90Responses
- 200 Always HTTP 200. On success error = 0 and the result in data; otherwise error holds the v1 error number (see Errors).
Response schema and example
| Field | Type | Description |
|---|---|---|
| error | integer | 0 = success. |
| message | string | Fixed v1 text. |
| data | object | |
| data.error | integer | Always 0 (repeated inside data, as in v1). |
| data.sites | object | Status and URL of the module's site. |
| data.modules | object | Price, status, currency, allowed IPs (api_ip, comma separated) and methods per country (price, pmin, pmax, name). |
| data.gateway | object | createCode URL. |
{
"error": 0,
"message": "API response -> successful request.",
"data": {
"error": 0,
"sites": {
"status": "enabled",
"url": "https://tienda.example.com"
},
"modules": {
"price": null,
"status": "enabled",
"currency": "EUR",
"country": "pt",
"api_ip": "",
"methods": {
"pt": [
{
"method": "multibanco",
"country": "pt",
"price": "49.90",
"pmin": "5.00",
"pmax": "1000.00",
"name": "Multibanco"
},
{
"method": "mbway",
"country": "pt",
"price": "49.90",
"pmin": "5.00",
"pmax": "1000.00",
"name": "MB WAY"
}
]
}
},
"gateway": {
"url": "http://api2.e-payouts.local/v1/createCode"
}
}
}No authentication
Service status.
/health
no authentication Service status
Tells whether the API is up. It needs no signature: use it for monitoring (for example, a periodic check from your server).
Responses
- 200 OK
Response schema and example
| Field | Type | Description |
|---|---|---|
| data required | object | |
| data.status | "ok" | Always "ok" when the API answers. |
{
"data": {
"status": "ok"
}
}