Invoice Quickstart
Issue, send, and track your first invoice.
8 min read
1. Create the invoice
An invoice is created as a draft — it is not sent automatically. There is no draft
boolean parameter; every invoice starts as a draft until you explicitly send it.
curl https://api.wajub.com/invoices \
-H "Authorization: sk.xxxx" \
-d '{
"customer_name": "Example LLC",
"customer_email": "client@example.com",
"currency": "XAF",
"invoice_date": "2026-05-15",
"due_date": "2026-06-01",
"items": [{ "name": "May subscription", "quantity": 1, "unit_price": 25000 }]
}'2. Send it
curl -X POST https://api.wajub.com/invoices/inv_01JXXXXXXXXXXXXX/send -H "Authorization: sk.xxxx"This emails the invoice with its hosted payment link and moves its status to sent.
3. Track the status
| Status | Meaning |
|---|---|
draft | Not yet sent. |
sent | Sent, awaiting payment. |
viewed | Customer opened the hosted link. |
paid | Fully paid. |
partial | Partially paid. |
overdue | Past due date, unpaid. |
cancelled | Cancelled. |
refunded | Paid then refunded. |
4. React to payment
There is no invoice.paid webhook event — invoice lifecycle changes surface through
invoice.updated. Check the status field of the payload to detect a transition to paid.
invoice.updatedeventThe invoice changed — check `data.status` for the new value.
{
"id": "evt_Inv001",
"type": "invoice.updated",
"data": {
"id": "inv_01JXXXXXXXXXXXXX",
"status": "paid",
"total": 25000,
"currency": "XAF"
}
}Was this page helpful?