API reference
Create and read customers, quotes, and invoices programmatically. Generate a key from your portal's Settings → API keys page.
Send your key as a Bearer token on every request. Keys are tenant-scoped - you never pass a tenant id, it's resolved from the key itself.
curl https://quotup.com/api/v1/customers \
-H "Authorization: Bearer qk_..."GET /api/v1/customers · POST /api/v1/customers · GET /api/v1/customers/:id · PATCH /api/v1/customers/:id · DELETE /api/v1/customers/:id
curl -X POST https://quotup.com/api/v1/customers \
-H "Authorization: Bearer qk_..." \
-H "Content-Type: application/json" \
-d '{"name": "Acme Corp", "email": "billing@acme.com"}'GET and POST at /api/v1/quotes and /api/v1/invoices. Line items reference a product/service by id, or stand alone with just a description and price. Optional: depositPercent on quotes (0-100, due when the customer approves) and deposit on invoices (an amount the customer can pay upfront); discountType ("percent" or "amount") with discountValue; and per line discountPercent and taxRate (omit it to use the document's taxRate).
curl -X POST https://quotup.com/api/v1/quotes \
-H "Authorization: Bearer qk_..." \
-H "Content-Type: application/json" \
-d '{
"customerId": "...",
"issueDate": "2026-01-15",
"taxRate": 0,
"lineItems": [
{ "description": "Consulting", "quantity": 2, "unitPrice": 150 }
]
}'{ "error": "message" } with a matching HTTP status - 401 for a missing/invalid/revoked key, 404 for a resource that doesn't exist (or isn't yours), 422 if you've hit your plan's limits, 400 for a malformed request body.