API Reference
Generate proposals from your own systems
Describe an event in plain language and get back a costed proposal, priced from your own equipment catalogue — the same engine the app uses. Available on the Business plan.
Authentication
Create a key in Settings → API keys. It is shown once; we store only a hash, so it cannot be retrieved later. Send it as a bearer token on every request.
Authorization: Bearer cq_live_xxxxxxxxxxxxxxxxxxxxxxxxKeys carry the permissions of the company they belong to and nothing else. A key can never read or write another account's data. Revoking a key in Settings takes effect immediately.
Base URL
https://api.cuequote.comCreate a proposal
POST/v1/proposals
The only required field is event.description. Everything else improves the result: attendee count and duration drive equipment quantities, and the venue affects regional pricing.
curl -X POST https://api.cuequote.com/v1/proposals \
-H "Authorization: Bearer $CUEQUOTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Warsaw Tech Summit 2026",
"client": { "name": "Acme Events", "email": "ops@acme.example" },
"event": {
"description": "Two-day tech summit, 200 attendees, main stage with LED
and simultaneous interpretation, plus two breakout rooms.",
"date": "2026-11-03",
"venue": "Warsaw",
"attendees": 200,
"days": 2
}
}'Response — 201 Created
{
"id": "4b888edb-d71a-4aa1-87fb-26ba1d3fc103",
"status": "draft",
"title": "Warsaw Tech Summit 2026",
"currency": "PLN",
"subtotal": 40010,
"total": 40010,
"scope_summary": "Two-day summit with a main stage ...",
"line_items": [
{
"category": "video",
"name": "LED Wall Panel (P2.6)",
"quantity": 21,
"unit": "day",
"unit_price": 350,
"is_optional": false
}
],
"share_url": "https://app.cuequote.com/share/961419b1-...",
"app_url": "https://app.cuequote.com/proposals/4b888edb-...",
"quota": { "used": 8, "limit": 120 }
}The proposal is created as a draft. It appears in the app immediately, editable like any other, and nothing is sent to the client until you send it.
| Field | Type | Notes |
|---|---|---|
| event.description | string | Required. Up to 10,000 characters. |
| event.date | string | YYYY-MM-DD. |
| event.venue | string | City or venue name. Affects regional pricing. |
| event.attendees | number | Drives equipment sizing. |
| event.days | number | Defaults to 1. |
| title | string | Optional. Generated from the venue and size if omitted. |
| client | object | Creates a new client. Use client_id instead to attach an existing one. |
| currency | string | Defaults to your company currency. |
Fetch a proposal
GET/v1/proposals/{id}
curl https://api.cuequote.com/v1/proposals/4b888edb-... \
-H "Authorization: Bearer $CUEQUOTE_API_KEY"Returns the proposal with its line items and current status, so you can poll for acceptance from your CRM.
Errors
Every error returns a JSON body with a stable code and a human-readable message. Match on the code, not the message.
{ "error": { "code": "quota_exceeded", "message": "...", "used": 120, "limit": 120 } }| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | No bearer key supplied. |
| 401 | invalid_key | Key is wrong or has been revoked. |
| 400 | invalid_request | Missing or oversized field. |
| 403 | plan_required | API access is on the Business plan. |
| 403 | subscription_inactive | Payment is past due or cancelled. |
| 404 | not_found | No such proposal or client on this account. |
| 422 | empty_catalog | Add equipment first — pricing comes from your own rates. |
| 429 | rate_limited | More than 60 requests in an hour. |
| 429 | quota_exceeded | Monthly proposal allowance used. |
| 502 | generation_failed | The generator did not return a usable proposal. Retry. |
Rate limits and quota
60 requests per hour per key. Generation runs a language model over your catalogue, so this is a spend control as much as an abuse control.
Proposals count against your monthly plan allowance, the same as ones created in the app — 120 a month on Business. The API is another door to the same engine, not a separate budget. Every response includes a quota object so you can track it without a second call.
Generation typically takes 20–60 seconds depending on event complexity. Set your client timeout to at least 90 seconds.
Need something not here?
The website quote form puts this same engine on your own site with one script tag. Or connect it to an AI assistant over MCP. Webhooks and Zapier are on the roadmap. Tell us what you are building at hello@cuequote.com and it will shape what ships next.