Note: This action will replace all existing invoices.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
This action is performed asynchronously. The status of the action can be queried as documented under "Check replacement status".
The request body is raw CSV, not JSON — send it with Content-Type: text/csv. There is no header row; every line, including the first, is a data row with exactly 5 comma-separated columns in this order:
| # | Column | Type | Notes |
|---|---|---|---|
| 1 | reference | string | Required. Alphanumeric only. Must be unique per merchant — a duplicate anywhere in the batch fails the whole import. |
| 2 | description | string | Optional free text, max 255 characters. |
| 3 | currency | string | Required. Three-letter ISO currency code. |
| 4 | amount | integer | Required. In the smallest currency unit (e.g. cents), must be greater than 0. |
| 5 | payable | boolean | Required literal true or false. |
Example body (two invoices):
abcd1234,Monthly subscription,AUD,4999,true
efgh5678,One-off setup fee,NZD,1500,false
A malformed body, an empty body, or any row that doesn't have exactly 5 columns is rejected synchronously with a 400. Everything else is accepted immediately (status: pending) and validated asynchronously — a bad currency code, a non-numeric or non-positive amount, an invalid payable value, or a duplicate reference will only surface later, as a single whole-batch failure (not per-row), when you poll Check replacement status.