Authorization
default A public key (pk./pk_test.) is accepted on /payments, /customers, /links, /invoices and the catalogue reads (/channels, /providers, /countries, /currencies); anything that moves money out, reads the balance or manages the account answers 406 to it. It is an identifier, never an authorization. Use a secret key (sk./sk_test.) for sensitive operations (transfers, refunds, balance), or a restricted key (rk./rk_test.) scoped to specific permissions. The _test. variant of any key selects the sandbox environment, there is no separate sandbox URL. Never expose your secret key in client-side code.
In: header
Path Parameters
The invoice `id`.
Request Body
application/json
The language of the invoice's e-mail and PDF: `fr` or `en`. Left as it is when omitted, even when `customer_id` changes.
"fr""en"One of your own customers, by the `cus_` id the Customers API returns. Their details are copied onto the invoice. Another merchant's customer answers 422.
Make the invoice a recurring template: a draft copy is generated each cycle of `recurring_interval`. Only a `document_type` of `invoice` can recur, and never a copy the series generated: both answer 422.
The customer's postal address, printed on the invoice.
The customer's company, printed under their name.
Where `POST /invoices/{id}/send` e-mails the invoice and its PDF, and where the Dashboard sends its reminders.
The name printed on the invoice. Required, even with `customer_id`: the customer can be a person or a business you only name.
The customer's phone number, international format.
On or after `invoice_date`.
Up to 500 characters.
`percentage` or `fixed`.
"percentage""fixed"A percentage or an amount, by `global_discount_type`.
Apply a discount to the whole invoice, set by `global_discount_type` and `global_discount_value`.
The date printed on the invoice, `YYYY-MM-DD`.
Replaces every line of the invoice: at least one.
Up to 5 000 characters.
Sets `due_date` this many days from today when `due_date` is left out.
`full` (default), `split` or `milestone`.
"full""split""milestone"`daily`, `weekly`, `monthly`, `quarterly` or `yearly`.
"daily""weekly""monthly""quarterly""yearly"Up to 5 000 characters.
A currency Wajub supports, as on `POST /payments`. Any other code answers 422.
Restricts the methods the payer is offered on the invoice's page, as on `POST /payments`.
With a `payment_type` of `split` or `milestone`, the instalments the payer settles one at a time.
Response Body
application/json
application/json
application/json
application/json
curl -X PUT "https://api.wajub.com/invoices/inv_Hq7Lm2Xp9Rt4Vb8Nc3Kd" \ -H "Content-Type: application/json" \ -d '{ "customer_name": "Amina Diallo", "invoice_date": "2026-09-16", "items": null, "currency": "XAF" }'{ "code": 200, "status": "OK", "message": "Invoice updated", "invoice": { "id": "inv_Hq7Lm2Xp9Rt4Vb8Nc3Kd", "invoice_number": null, "status": "draft", "currency": "XAF", "subtotal": 65000, "total": 65000, "amount_paid": 0, "amount_due": 65000, "updated_at": "2026-09-16T10:02:51+00:00" }}Updated