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_xxxxxxxxxxxxxxxxxxxxxxxx

Keys 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.com

Create 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.

FieldTypeNotes
event.descriptionstringRequired. Up to 10,000 characters.
event.datestringYYYY-MM-DD.
event.venuestringCity or venue name. Affects regional pricing.
event.attendeesnumberDrives equipment sizing.
event.daysnumberDefaults to 1.
titlestringOptional. Generated from the venue and size if omitted.
clientobjectCreates a new client. Use client_id instead to attach an existing one.
currencystringDefaults 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 } }
StatusCodeMeaning
401unauthorizedNo bearer key supplied.
401invalid_keyKey is wrong or has been revoked.
400invalid_requestMissing or oversized field.
403plan_requiredAPI access is on the Business plan.
403subscription_inactivePayment is past due or cancelled.
404not_foundNo such proposal or client on this account.
422empty_catalogAdd equipment first — pricing comes from your own rates.
429rate_limitedMore than 60 requests in an hour.
429quota_exceededMonthly proposal allowance used.
502generation_failedThe 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.