API REST v1
Referencia completa de la API para integraciones externas con n8n, Zapier o tus propias aplicaciones.
Base URL: https://eskadia-crm.vercel.app/api/v1Autenticación
Todas las peticiones (excepto /health) requieren un Bearer token:
Authorization: Bearer esk_live_abc123...Genera tokens en Ajustes → API (solo admin/owner). El token se muestra una sola vez al crearlo.
Rate Limiting
| Tipo | Límite |
|---|---|
| Lectura (GET) | 500 req/min |
| Escritura (POST/PATCH/DELETE) | 20 req/min |
| General | 100 req/min |
Headers de respuesta: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
Paginación
Endpoints de listado soportan:
| Parámetro | Default | Max |
|---|---|---|
| page | 1 | — |
| per_page | 20 | 100 |
| sort_by | created_at | (varía) |
| sort_dir | desc | asc/desc |
Respuesta:
{
"data": [...],
"meta": {
"total": 150,
"page": 1,
"per_page": 20,
"total_pages": 8
}
}Idempotencia
Para evitar duplicados en POST, envía el header:
Idempotency-Key: unique-key-123Si la key ya existe, se retorna la respuesta original sin re-ejecutar. Las keys expiran a las 24 horas.
Roles y permisos (RBAC)
Los tokens heredan un rol. Los permisos se aplican según la siguiente tabla:
| Acción | Visor | Miembro | Manager | Admin |
|---|---|---|---|---|
| GET (listar/detalle) | ✓ | ✓ | ✓ | ✓ |
| POST (crear) | ✗ | ✓ | ✓ | ✓ |
| PATCH (actualizar) | ✗ | ✓ | ✓ | ✓ |
| DELETE | ✗ | ✗ | ✗ | ✓ |
| KPIs / Reports | ✗ | ✗ | ✓ | ✓ |
| Settings | ✗ | ✗ | ✗ | ✓ |
Endpoints
Contacts
CRUD completo de contactos
Companies
CRUD completo de empresas
Deals
CRUD completo de oportunidades
Leads
CRUD completo de leads
Tasks
CRUD completo de tareas
Products
Solo lectura
Quotes
Solo lectura
Projects
Solo lectura
Activities
Listar y crear actividades
Dashboard y Reports
KPIs y reportes (manager+)
Emails
Envío de emails (member+)
AI Proxy
Funciones de IA (member+)
Contracts
Contratos con firma digital
Inbox
Bandeja de entrada de email
Support
Tickets de soporte
Chat
Conversaciones del widget
Webinars
Gestión de webinars
Forms
Formularios de captura de leads
Sales Targets
Objetivos de ventas
Calendar
Conexiones de calendario
Settings
Configuración (admin)
Formato de errores
{
"error": {
"code": "not_found",
"message": "Contacto no encontrado",
"doc_url": "https://docs.eskadia.com/api/errors#not_found"
}
}Códigos: invalid_request, authentication_required, insufficient_permissions, not_found, rate_limit_exceeded, validation_error, idempotency_conflict, internal_error
Metadata
Contacts, deals, quotes y leads soportan un campo metadata (JSON libre):
# Crear con metadata
POST /contacts
{ "first_name": "Ana", "metadata": { "source": "api" } }
# Actualizar (merge, no reemplaza)
PATCH /contacts/:id
{ "metadata": { "new_field": "value" } }Ejemplos
Health check
curl https://eskadia-crm.vercel.app/api/v1/healthListar contactos
curl -H "Authorization: Bearer esk_live_..." \
"https://eskadia-crm.vercel.app/api/v1/contacts?page=1&per_page=10&search=juan"Crear contacto con idempotencia
curl -X POST \
-H "Authorization: Bearer esk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: unique-123" \
-d '{"first_name":"Juan","last_name":"Garcia","email":"juan@example.com"}' \
https://eskadia-crm.vercel.app/api/v1/contactsDashboard KPIs
curl -H "Authorization: Bearer esk_live_..." \
https://eskadia-crm.vercel.app/api/v1/dashboard¿Primera vez con Eskadia?
Consulta la guía completa de funcionalidades para aprender a usar el CRM.
Ver documentación