REST API v1
DealFactory API Reference
REST + Webhooks + SDKs oficiales para Node.js, Python, Go y PHP. JSON over HTTPS, autenticación por bearer token, idempotencia con header dedicado.
Introducción
Quick start en 2 minutos
La API de DealFactory te permite acceder a deals, contactos, cuentas, cotizaciones, conversaciones y eventos desde tus apps. Toda la funcionalidad del frontend está disponible vía REST.
curl https://api.dealfactory.app/v1/opportunities \
-H "Authorization: Bearer df_live_8a4f...c2f1" \
-H "Accept: application/json"El base URL es https://api.dealfactory.app/v1. Sandbox usa https://api.sandbox.dealfactory.app/v1.
Autenticación
Bearer token en header
Todas las requests requieren un Authorization: Bearer <token> header. Las keys se generan en Configuración → Integraciones.
- Keys de producción comienzan con
df_live_ - Keys de sandbox comienzan con
df_test_ - Cada key tiene scopes granulares (read/write × resource)
- Las keys nunca se exponen en logs ni en URL — solo headers
Authorization: Bearer df_live_8a4f...c2f1
Accept: application/json
Content-Type: application/json
X-Idempotency-Key: 5d8a-uuid (recomendado en POST/PUT)Rate limits
Por API key, ventana deslizante
| Plan | Reads / min | Writes / min | Burst |
|---|---|---|---|
| Pilot | 120 | 30 | 200 |
| Growth | 600 | 120 | 1k |
| Enterprise | 3k | 600 | 5k |
| Corporate | Custom | Custom | Custom |
Cuando excedés el límite, recibís HTTP 429 con header Retry-After en segundos.
Errores
HTTP status + JSON estructurado
Errores devuelven JSON con esta forma:
{
"error": {
"code": "validation_failed",
"message": "El campo 'amount' es requerido",
"field": "amount",
"request_id": "req_8a4f9c2e1b3d"
}
}400— validation_failed, malformed JSON401— missing/invalid token403— token sin scope para esa operación404— resource no existe409— conflict (ej: opportunity_id duplicado)429— rate limit hit5xx— server error · reintentar con backoff exponencial
Opportunities
Crear, listar, mover de stage, marcar won/lost
/v1/opportunitiesLista paginada con filtroscurl 'https://api.dealfactory.app/v1/opportunities?stage=Negotiation&limit=50' \
-H "Authorization: Bearer df_live_..."/v1/opportunitiesCrear oportunidadcurl -X POST 'https://api.dealfactory.app/v1/opportunities' \
-H "Authorization: Bearer df_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Stevia Pampa - Pedido marzo",
"account_id": "acc_8a4f",
"amount": 8500,
"expected_close": "2026-05-15",
"stage": "Discovery",
"source": "meta_ad"
}'/v1/opportunities/{id}/stageMover de stage (con motivo opcional)/v1/opportunities/{id}/wonMarcar won (registra outcome event)/v1/opportunities/{id}/lostMarcar lost (requiere motivo)Contacts
CRUD + bulk import + dedup automático
/v1/contactsLista paginada/v1/contactsCrear contacto (con dedup por phone/email)/v1/contacts/bulk_importCSV upload bulk · max 50k rowsAccounts
Empresas + buying committee + LTV
/v1/demo/accounts/{id}Cuenta completa con buying committee + opps activas/v1/demo/accounts/{id}Update partial fieldsQuotes
Cotizaciones con line items + public link
/v1/demo/quotesCrear quote desde opportunity/v1/demo/quotes/{id}/sendMandar al cliente vía WA/email/v1/demo/quotes/{id}/public_linkLink público con token (no auth)Messages
WA / Email / LinkedIn outbound
/v1/messagesMandar mensaje (canal + template + variables){
"channel": "whatsapp",
"to": "+5491159999999",
"template": "recordatorio_pago",
"variables": { "name": "Mariana", "amount": "8500" }
}Webhooks salientes
HMAC SHA256 verification + retry policy
Configurás un endpoint en Integraciones. DealFactory POSTea cada evento con headers de firma:
POST /tu/endpoint
X-DF-Signature: sha256=8a4f9c2e1b3d...
X-DF-Event-Id: evt_8a4f9c2e
X-DF-Timestamp: 1704067200
Content-Type: application/json
{
"event": "opportunity.won",
"data": { ... }
}Verificá la firma HMAC con tu webhook secret. Reintentamos 3 veces (1m, 5m, 15m) ante 5xx o timeout >10s. Pasados los 3 reintentos, el evento queda en DLQ visible en /demo/configuracion/integraciones.
import crypto from "crypto";
function verify(payload, signature, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
return signature === `sha256=${expected}`;
}Catálogo de eventos
Todos los eventos que podés suscribir
opportunity.createdNueva oportunidad creada (manual o vía AI)
opportunity.stage_changedCambió de stage (incluye prev/next)
opportunity.wonMarcada como ganada
opportunity.lostMarcada como perdida (incluye motivo)
quote.sentQuote enviada al cliente
quote.acceptedCliente aceptó la quote
quote.rejectedCliente rechazó la quote
sales_order.createdPedido creado
sales_order.paidPedido pagado (vía MercadoPago/transferencia)
lead.qualifiedLead pasó qualification gate (BANT/MEDDIC)
conversation.handoffBot escala a humano (incluye motivo)
ai.action_executedCerebro AI ejecutó next_action
contact.createdNuevo contacto en CRM
SDKs oficiales
Listos para producción
Node.js
npm i @dealfactory/sdkMin version: 18.0+
Python
pip install dealfactoryMin version: 3.9+
Go
go get github.com/dealfactory/go-sdkMin version: 1.21+
PHP
composer require dealfactory/sdkMin version: 8.1+
OpenAPI spec
Genera tu propio cliente
Spec OpenAPI 3.1 disponible en:
https://api.dealfactory.app/v1/openapi.yamlUsá openapi-generator para generar clientes en 60+ lenguajes.
¿Listo para empezar?
Generá tu primera API key y conectá DealFactory a tu stack en minutos.