nenoDevelopers
⌘K
v1

Quotes

Convert an accepted quote into an invoice

POST/quotes/{id}/convert

Requires the quote to be in quote_accepted. Creates a NEW invoice draft (its own provisional number) copying customer/issuer/payment/items/taxes, flips the quote to quote_converted, and sets its convertedInvoiceId. Rejects attempts to convert the quote more than once.

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.

Responses

201
Created. The newly created invoice draft.
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 POST https://api.neno.build/public/v1/quotes/quo_3Nf8p2Qa/convert \
-H "Authorization: Bearer $NENO_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"
201 Created · application/json
{
"id": "quo_3Nf8p2Qa",
"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
}