Quote Builder by Vexco

API

Create quotes from any system. Keys are created in the app: Settings → API. Each key only gives access to its own HubSpot account.

Authentication

Authorization: Bearer qbk_…

POST /api/v1/quotes

Creates a quote on deal dealId from a template (templateId + inputs) or from content (content, url, base64 + filename, or a multipart file).

curl -X POST https://quotes.vexcosolutions.com/api/v1/quotes \
  -H "Authorization: Bearer qbk_…" -H "Content-Type: application/json" \
  -d '{"dealId": "123456", "templateId": "…", "inputs": {"users": "25", "plan": "pro"}}'
curl -X POST https://quotes.vexcosolutions.com/api/v1/quotes \
  -H "Authorization: Bearer qbk_…" \
  -F dealId=123456 -F file=@quote.xlsx -F publish=false

Response (201):

{ "quoteId": "…", "url": "https://app.hubspot.com/…", "publicUrl": "…", "title": "…", "total": 1311, "currency": "EUR",
  "lineCount": 3, "mode": "cpq", "status": "DRAFT", "needsApproval": false, "warnings": [] }

POST /api/v1/preview

Same as /quotes but only calculates: returns lines, totals, buyer, company and blocking issues without creating anything.

POST /api/v1/parse

Reads content and returns how it was understood (no deal needed).

GET /api/v1/templates

The account's active templates.

Errors

{ "error": { "code": "missing_price", "title": "…", "hint": "…" } }

401 invalid key · 403 plan without API · 404 not found · 422 data or content to fix · 503 HubSpot unavailable (retry).