Refund invoice
JSON API v3
POST /api/v3/projects/{projectId}/invoices/{invoiceId}/refund
Initiates a refund for a paid invoice. The actual refund completes asynchronously and result is delivered via webhook.
The sandbox enforces the “paid” requirement: a refund of an unpaid, cancelled or
not-yet-billed invoice is rejected with 422 INVOICE_NOT_PAID, and its
payment_status is left unchanged.
v4 signature payload: {invoice_id}{client_ip}
Request parameters
| Field | Type | Required | Description |
|---|---|---|---|
projectId | integer (int32) | yes | |
invoiceId | string (uuid) | yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
client_ip | string | — | |
additional_parameters | object | — | Arbitrary invoice parameters stored with the invoice, the JSON counterpart of the XML <AdditionalParameters>/<Parameter name= value=/> block. Parameter names are case-insensitive and must be unique. On cancel/refund/authorize the given values are merged into the ones already stored: names that match are overwritten, the rest are kept. |
Request example
{}Response codes
| Code | Description |
|---|---|
202 | Refund accepted for processing |
400 | Validation or business request error |
401 | Authentication failed (missing/invalid signature or timestamp) |
403 | Project access denied or IP not whitelisted |
404 | Invoice not found |
422 | Business validation error |
500 | Unexpected platform error |
503 | Service temporarily unavailable |