nenoDevelopers
⌘K
v1

Invoices

Update a draft invoice

PATCH/invoices/{id}

Only documents in draft status may be edited.

Path parameters

idstring · uuidrequired

Public document UUID. This is distinct from the customer-facing share token.

Headers

Idempotency-Keystring · max 255required

Client-generated key that identifies one write for 24 hours. Reuse it only when retrying the same method, path, query, and body.

Body

customerIdstring · uuid
currencyCodestring
lineItemsarray of objects
Each item
descriptionstringrequired
detailsstring
unitstring
quantitystringrequired

Decimal as string.

unitPriceMinorstringrequired

Minor units as string.

taxRatePercentstring
discountPercentstring
issueDatestring · date
dueDatestring · date
validUntilstring · date
poNumberstring
notesstring
termsstring

Responses

200
OK. Updated.
400
Bad request. Malformed request.
401
Unauthorized. Missing, invalid, revoked, or expired API key.
403
Forbidden. The API key lacks a required scope or the creator lacks a required permission.
404
Not found. Resource not found (or not in this workspace).
409
Conflict. A matching request with this Idempotency-Key is still in progress. Retry after one second.
422
Unprocessable content. This Idempotency-Key was already used for a different request.
429
Too many requests. Rate limit exceeded.
Request
curl -X PATCH https://api.neno.build/public/v1/invoices/inv_7Hq2c9LmX4 \
-H "Authorization: Bearer $NENO_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"customerId": "9b2f6c1e-4a7d-4f0e-8c3b-2d51e7a0f4c9",
"currencyCode": "EUR",
"lineItems": [
{
"description": "Brand identity, phase 2",
"quantity": "1",
"unitPriceMinor": "125000"
}
],
"issueDate": "2026-09-24",
"dueDate": "2026-10-24",
"validUntil": "2026-09-24",
"poNumber": "PO-88213",
"notes": "string",
"terms": "string"
}'
200 OK · application/json
{
"id": "inv_7Hq2c9LmX4",
"type": "invoice",
"invoiceNumber": "2026-0142",
"language": "en",
"templateStyle": null,
"customerName": "Aalto Studio BV",
"customerContactPerson": "Mira Aalto",
"customerAddressLine1": "Prinsengracht 263",
"customerAddressLine2": null,
"customerCity": "Amsterdam",
"customerPostalCode": "1016 GV",
"customerCountryCode": "NL",
"customerVatNumber": "NL859412763B01",
"currencyCode": "EUR",
"netAmountMinor": "125000",
"taxTotalMinor": "26250",
"totalMinor": "151250",
"discountPercent": null,
"discountMinor": null,
"issueDate": "2026-09-24",
"dueDate": "2026-10-24",
"paidAt": "2026-09-24T09:30:00Z",
"poNumber": "PO-88213",
"notes": null,
"terms": null,
"logoUrl": null,
"lineItems": [
{
"id": "9b2f6c1e-4a7d-4f0e-8c3b-2d51e7a0f4c9",
"lineNo": 1,
"description": "Brand identity, phase 2",
"details": null,
"unit": "project",
"quantity": "1",
"unitPriceMinor": "125000",
"taxRatePercent": "21",
"discountPercent": null,
"lineDiscountMinor": null,
"lineGrossMinor": "string",
"lineSubtotalMinor": "string",
"lineTaxMinor": "string",
"lineTotalMinor": "string"
}
],
"taxes": [
{
"id": "9b2f6c1e-4a7d-4f0e-8c3b-2d51e7a0f4c9",
"name": "string",
"ratePercent": "string",
"amountMinor": "string",
"discountMinor": null
}
],
"status": "draft",
"creditedInvoiceId": null,
"creditedInvoiceNumber": null
}