Update an invoice
Updates an invoice. Every field is optional, and anything you leave out keeps its current value.
Only four things can change here: who the invoice is addressed to, its title, its currency and when it is due. The client company and the project are fixed once the invoice exists, and line items have their own endpoints.
An invoice that is paid or has a payment in progress cannot be edited at
all, and returns 403.
Path Parameters
- Type: integeridrequired
Id of the invoice to update.
Body
required
application/json
The attributes to change, wrapped in an invoice key. All of them are optional.
- Type: objectinvoicerequired
Responses
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
Request Example for patch/public-api/v1/invoices/{id}
curl https://app.hellobonsai.com/public-api/v1/invoices/1 \
--request PATCH \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"invoice": {
"contact_id": 7,
"currency": "USD",
"title": "Acme Corp Invoice",
"due": "upon_receipt",
"due_date": "2026-04-28"
}
}'
{
"data": {
"id": 3310,
"invoice_number": "INV-001",
"title": "Acme Corp Invoice",
"currency": "USD",
"issued_date": "2026-04-14",
"due_date": "2026-04-28",
"project_id": 51,
"client_email": "alex@example.com",
"public_url_token": "x7f2a9c4b1e8d",
"created_at": "2026-04-14T09:12:04.000Z",
"total_amount": "200.0",
"discount_amount": "25.0",
"status": "outstanding",
"due_date_option": "custom",
"company_id": 42,
"client_name": "Acme Corp",
"subtotal": "200.0",
"tax_amount": "0.0",
"url": "https://app.hellobonsai.com/invoices/3391",
"invoice_items": [
{
"id": 4471,
"name": "Design",
"description": "Homepage and pricing page",
"amount": "2.0",
"rate": "100.0",
"unit_type": "per_hour",
"total": "200.0"
}
]
},
"meta": {
"request_id": "b1f0d2c4-7a9e-4c3b-8d5f-1e2a3b4c5d6e"
}
}