API
Crea presupuestos desde cualquier sistema. Las claves se crean en la app: Ajustes → API. Cada clave da acceso solo a su cuenta de HubSpot.
Autenticación
Authorization: Bearer qbk_…
POST /api/v1/quotes
Crea un presupuesto en el negocio dealId desde una plantilla (templateId + inputs) o desde contenido (content, url, base64 + filename, o un fichero en multipart).
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
Respuesta (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
Igual que /quotes, pero solo calcula: devuelve líneas, totales, comprador, empresa y bloqueos sin crear nada.
POST /api/v1/parse
Lee contenido y devuelve cómo se ha entendido (no necesita negocio).
GET /api/v1/templates
Plantillas activas de la cuenta.
Errores
{ "error": { "code": "missing_price", "title": "…", "hint": "…" } }
401 clave no válida · 403 plan sin API · 404 no existe · 422 dato o contenido que corregir · 503 HubSpot no responde (reintentar).