API Reference

La API REST de Zeph CRM permite integrar tus datos de leads, contactos, empresas, oportunidades y actividades con sistemas externos. Todas las peticiones usan JSON y requieren autenticacion mediante API Key. La API no expone endpoints DELETE -- las eliminaciones se realizan desde la UI.

Base URL: https://zephcrm.com/api/v1

Autenticacion

Todas las peticiones deben incluir un header Authorization con tu API key en formato Bearer token. Podes crear y administrar tus claves desde Settings > API Keys.

Header de autenticacion
Authorization: Bearer vk_live_tu_api_key_aqui

Importante

  • Las API keys se muestran una sola vez al crearlas. Guardalas en un lugar seguro.
  • Cada key tiene scopes especificos (ej: leads:read, contacts:write). Solo podras acceder a los endpoints para los que tengas permiso.
  • Nunca compartas tus claves ni las incluyas en codigo del lado del cliente.

Rate Limiting

Cada API key tiene un limite de 100 peticiones por minuto. Si excedes el limite, recibiras una respuesta 429 Too Many Requests.

Los headers de respuesta incluyen informacion sobre tu uso:

Headers de rate limit
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1706745600
Response 429
{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Has excedido el limite de 100 peticiones por minuto. Intenta de nuevo en 42 segundos.",
    "retryAfter": 42
  }
}

Formato de respuesta

Todas las respuestas son JSON. Los formatos varian segun el tipo de operacion:

Respuesta exitosa (objeto)

200 OK
{
  "data": {
    "id": "clx1234...",
    "firstName": "Juan",
    "lastName": "Perez",
    "email": "juan@empresa.com",
    "createdAt": "2025-01-15T10:30:00.000Z",
    "updatedAt": "2025-01-15T10:30:00.000Z"
  }
}

Respuesta de error

400 / 401 / 403 / 404 / 422 / 500
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Los datos enviados no son validos.",
    "details": {
      "email": ["El email no es valido"],
      "firstName": ["Este campo es obligatorio"]
    }
  }
}

Respuesta paginada (lista)

200 OK
{
  "data": [
    { "id": "clx1...", "firstName": "Juan", ... },
    { "id": "clx2...", "firstName": "Maria", ... }
  ],
  "pagination": {
    "nextCursor": "clx2...",
    "hasMore": true,
    "total": 150
  }
}

Paginacion

La API usa paginacion basada en cursor para listas. Usa el campo nextCursor de la respuesta como parametro cursor en la siguiente peticion.

Ejemplo de paginacion
# Primera pagina
curl "https://zephcrm.com/api/v1/leads?limit=20" \
  -H "Authorization: Bearer vk_live_..."

# Segunda pagina (usar nextCursor de la respuesta anterior)
curl "https://zephcrm.com/api/v1/leads?limit=20&cursor=clx2abc..." \
  -H "Authorization: Bearer vk_live_..."

Leads

GET/api/v1/leadsleads:read

Lista todos los leads de tu organizacion con paginacion y filtros.

Query Parameters

ParamTipoDescripcion
cursorstringCursor para paginacion (ID del ultimo item)
limitnumberItems por pagina (default 20, max 100)
sortstringCampo por el que ordenar
orderasc | descDireccion del orden (default desc)
searchstringBuscar en nombre, email, etc.
created_afterISO 8601Filtrar por fecha de creacion
created_beforeISO 8601Filtrar por fecha de creacion
statusstringFiltrar por status: NEW, CONTACTED, QUALIFIED, CONVERTED, LOST
curl
curl "https://zephcrm.com/api/v1/leads?limit=20&status=NEW" \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": [
    {
      "id": "clx1abc...",
      "firstName": "Juan",
      "lastName": "Perez",
      "email": "juan@empresa.com",
      "phone": "+54 11 1234-5678",
      "company": "Acme SRL",
      "position": "Gerente Comercial",
      "status": "NEW",
      "notes": "Interesado en plan Enterprise",
      "customFields": {},
      "assignedToId": "clxuser1...",
      "source": "Zapier",
      "leadSourceId": "clxsrc1...",
      "leadSource": { "id": "clxsrc1...", "name": "Zapier" },
      "sourceDetail": "Typeform signup",
      "createdAt": "2025-01-15T10:30:00.000Z",
      "updatedAt": "2025-01-15T10:30:00.000Z"
    }
  ],
  "pagination": {
    "nextCursor": "clx1abc...",
    "hasMore": true,
    "total": 85
  }
}
GET/api/v1/leads/:idleads:read

Obtiene un lead por su ID.

curl
curl "https://zephcrm.com/api/v1/leads/clx1abc..." \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": {
    "id": "clx1abc...",
    "firstName": "Juan",
    "lastName": "Perez",
    "email": "juan@empresa.com",
    "phone": "+54 11 1234-5678",
    "company": "Acme SRL",
    "position": "Gerente Comercial",
    "status": "NEW",
    "notes": "Interesado en plan Enterprise",
    "customFields": {},
    "assignedToId": "clxuser1...",
    "createdAt": "2025-01-15T10:30:00.000Z",
    "updatedAt": "2025-01-15T10:30:00.000Z"
  }
}
POST/api/v1/leadsleads:write

Crea un nuevo lead.

Request Body (JSON)

CampoTipoReqDescripcion
firstNamestringSiNombre
lastNamestringSiApellido
emailstringNoEmail
phonestringNoTelefono
companystringNoNombre de empresa
positionstringNoCargo
statusstringNoNEW (default), CONTACTED, QUALIFIED
notesstringNoNotas
customFieldsobjectNoCampos personalizados
assignedToIdstringNoID del usuario asignado
sourcestringNoNombre de la fuente del lead. Si no existe, se crea automáticamente.
sourceDetailstringNoDetalle adicional sobre el origen (ej: nombre de campaña, webhook).
curl
curl -X POST "https://zephcrm.com/api/v1/leads" \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Maria",
    "lastName": "Garcia",
    "email": "maria@empresa.com",
    "company": "Tech SA",
    "status": "NEW",
    "source": "Zapier",
    "sourceDetail": "Typeform signup"
  }'
Response
{
  "data": {
    "id": "clxnew1...",
    "firstName": "Maria",
    "lastName": "Garcia",
    "email": "maria@empresa.com",
    "company": "Tech SA",
    "status": "NEW",
    "source": "Zapier",
    "leadSourceId": "clxsrc1...",
    "leadSource": { "id": "clxsrc1...", "name": "Zapier" },
    "sourceDetail": "Typeform signup",
    "createdAt": "2025-01-20T14:00:00.000Z",
    "updatedAt": "2025-01-20T14:00:00.000Z"
  }
}
PATCH/api/v1/leads/:idleads:write

Actualiza un lead existente. Solo enviar los campos a modificar.

Request Body (JSON)

CampoTipoReqDescripcion
firstNamestringNoNombre
lastNamestringNoApellido
emailstringNoEmail
phonestringNoTelefono
companystringNoNombre de empresa
positionstringNoCargo
statusstringNoNEW, CONTACTED, QUALIFIED, CONVERTED, LOST
notesstringNoNotas
customFieldsobjectNoCampos personalizados
assignedToIdstringNoID del usuario asignado
sourcestringNoNombre de la fuente del lead. Si no existe, se crea automáticamente.
sourceDetailstringNoDetalle adicional sobre el origen (ej: nombre de campaña, webhook).
curl
curl -X PATCH "https://zephcrm.com/api/v1/leads/clx1abc..." \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "status": "CONTACTED",
    "notes": "Llamada realizada el 20/01"
  }'
Response
{
  "data": {
    "id": "clx1abc...",
    "firstName": "Juan",
    "lastName": "Perez",
    "status": "CONTACTED",
    "notes": "Llamada realizada el 20/01",
    "updatedAt": "2025-01-20T15:00:00.000Z"
  }
}

DELETE no disponible

La API no expone endpoints DELETE. Las eliminaciones se realizan exclusivamente desde la UI del CRM. Un DELETE a /api/v1/leads/:id retorna 405 Method Not Allowed.

Contactos

GET/api/v1/contactscontacts:read

Lista todos los contactos de tu organizacion.

Query Parameters

ParamTipoDescripcion
cursorstringCursor para paginacion (ID del ultimo item)
limitnumberItems por pagina (default 20, max 100)
sortstringCampo por el que ordenar
orderasc | descDireccion del orden (default desc)
searchstringBuscar en nombre, email, etc.
created_afterISO 8601Filtrar por fecha de creacion
created_beforeISO 8601Filtrar por fecha de creacion
curl
curl "https://zephcrm.com/api/v1/contacts?limit=20&search=garcia" \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": [
    {
      "id": "clxc1...",
      "firstName": "Maria",
      "lastName": "Garcia",
      "email": "maria@techsa.com",
      "phone": "+54 11 9876-5432",
      "mobile": "+54 9 11 9876-5432",
      "position": "CTO",
      "companyId": "clxcomp1...",
      "notes": null,
      "customFields": {},
      "createdAt": "2025-01-10T08:00:00.000Z",
      "updatedAt": "2025-01-18T12:00:00.000Z"
    }
  ],
  "pagination": {
    "nextCursor": "clxc1...",
    "hasMore": false,
    "total": 12
  }
}
GET/api/v1/contacts/:idcontacts:read

Obtiene un contacto por su ID.

curl
curl "https://zephcrm.com/api/v1/contacts/clxc1..." \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": {
    "id": "clxc1...",
    "firstName": "Maria",
    "lastName": "Garcia",
    "email": "maria@techsa.com",
    "phone": "+54 11 9876-5432",
    "mobile": "+54 9 11 9876-5432",
    "position": "CTO",
    "companyId": "clxcomp1...",
    "notes": null,
    "customFields": {},
    "createdAt": "2025-01-10T08:00:00.000Z",
    "updatedAt": "2025-01-18T12:00:00.000Z"
  }
}
POST/api/v1/contactscontacts:write

Crea un nuevo contacto. El email debe ser unico dentro de la organizacion.

Request Body (JSON)

CampoTipoReqDescripcion
firstNamestringSiNombre
lastNamestringSiApellido
emailstringNoEmail (unico por org)
phonestringNoTelefono fijo
mobilestringNoCelular
positionstringNoCargo
companyIdstringNoID de la empresa
notesstringNoNotas
customFieldsobjectNoCampos personalizados
curl
curl -X POST "https://zephcrm.com/api/v1/contacts" \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Carlos",
    "lastName": "Lopez",
    "email": "carlos@empresa.com",
    "companyId": "clxcomp1..."
  }'
Response
{
  "data": {
    "id": "clxcnew1...",
    "firstName": "Carlos",
    "lastName": "Lopez",
    "email": "carlos@empresa.com",
    "companyId": "clxcomp1...",
    "createdAt": "2025-01-20T14:00:00.000Z",
    "updatedAt": "2025-01-20T14:00:00.000Z"
  }
}
PATCH/api/v1/contacts/:idcontacts:write

Actualiza un contacto existente.

Request Body (JSON)

CampoTipoReqDescripcion
firstNamestringNoNombre
lastNamestringNoApellido
emailstringNoEmail (unico por org)
phonestringNoTelefono fijo
mobilestringNoCelular
positionstringNoCargo
companyIdstringNoID de la empresa
notesstringNoNotas
customFieldsobjectNoCampos personalizados
curl
curl -X PATCH "https://zephcrm.com/api/v1/contacts/clxc1..." \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "position": "VP Engineering",
    "mobile": "+54 9 11 5555-0000"
  }'
Response
{
  "data": {
    "id": "clxc1...",
    "firstName": "Maria",
    "lastName": "Garcia",
    "position": "VP Engineering",
    "mobile": "+54 9 11 5555-0000",
    "updatedAt": "2025-01-20T16:00:00.000Z"
  }
}

DELETE no disponible

La API no expone endpoints DELETE. Las eliminaciones se realizan exclusivamente desde la UI del CRM.

Empresas

GET/api/v1/companiescompanies:read

Lista todas las empresas de tu organizacion.

Query Parameters

ParamTipoDescripcion
cursorstringCursor para paginacion (ID del ultimo item)
limitnumberItems por pagina (default 20, max 100)
sortstringCampo por el que ordenar
orderasc | descDireccion del orden (default desc)
searchstringBuscar en nombre, email, etc.
created_afterISO 8601Filtrar por fecha de creacion
created_beforeISO 8601Filtrar por fecha de creacion
curl
curl "https://zephcrm.com/api/v1/companies?limit=20&search=tech" \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": [
    {
      "id": "clxcomp1...",
      "name": "Tech SA",
      "website": "https://techsa.com",
      "phone": "+54 11 4000-0000",
      "address": "Av. Corrientes 1234",
      "city": "Buenos Aires",
      "employeeCount": 50,
      "customFields": {},
      "createdAt": "2025-01-05T09:00:00.000Z",
      "updatedAt": "2025-01-15T11:00:00.000Z"
    }
  ],
  "pagination": {
    "nextCursor": "clxcomp1...",
    "hasMore": false,
    "total": 8
  }
}
GET/api/v1/companies/:idcompanies:read

Obtiene una empresa por su ID.

curl
curl "https://zephcrm.com/api/v1/companies/clxcomp1..." \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": {
    "id": "clxcomp1...",
    "name": "Tech SA",
    "website": "https://techsa.com",
    "phone": "+54 11 4000-0000",
    "address": "Av. Corrientes 1234",
    "city": "Buenos Aires",
    "employeeCount": 50,
    "customFields": {},
    "createdAt": "2025-01-05T09:00:00.000Z",
    "updatedAt": "2025-01-15T11:00:00.000Z"
  }
}
POST/api/v1/companiescompanies:write

Crea una nueva empresa. El nombre se deduplica (case-insensitive) dentro de la organizacion.

Request Body (JSON)

CampoTipoReqDescripcion
namestringSiNombre de la empresa
websitestringNoSitio web
phonestringNoTelefono
addressstringNoDireccion
citystringNoCiudad
employeeCountnumberNoCantidad de empleados
customFieldsobjectNoCampos personalizados
curl
curl -X POST "https://zephcrm.com/api/v1/companies" \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Innovatech SRL",
    "website": "https://innovatech.com.ar",
    "city": "Cordoba",
    "employeeCount": 25
  }'
Response
{
  "data": {
    "id": "clxcompnew...",
    "name": "Innovatech SRL",
    "website": "https://innovatech.com.ar",
    "city": "Cordoba",
    "employeeCount": 25,
    "createdAt": "2025-01-20T14:00:00.000Z",
    "updatedAt": "2025-01-20T14:00:00.000Z"
  }
}
PATCH/api/v1/companies/:idcompanies:write

Actualiza una empresa existente.

Request Body (JSON)

CampoTipoReqDescripcion
namestringNoNombre de la empresa
websitestringNoSitio web
phonestringNoTelefono
addressstringNoDireccion
citystringNoCiudad
employeeCountnumberNoCantidad de empleados
customFieldsobjectNoCampos personalizados
curl
curl -X PATCH "https://zephcrm.com/api/v1/companies/clxcomp1..." \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "employeeCount": 75,
    "address": "Av. del Libertador 5000"
  }'
Response
{
  "data": {
    "id": "clxcomp1...",
    "name": "Tech SA",
    "employeeCount": 75,
    "address": "Av. del Libertador 5000",
    "updatedAt": "2025-01-20T16:00:00.000Z"
  }
}

DELETE no disponible

La API no expone endpoints DELETE. Las eliminaciones se realizan exclusivamente desde la UI del CRM.

Oportunidades

GET/api/v1/opportunitiesopportunities:read

Lista todas las oportunidades de tu organizacion.

Query Parameters

ParamTipoDescripcion
cursorstringCursor para paginacion (ID del ultimo item)
limitnumberItems por pagina (default 20, max 100)
sortstringCampo por el que ordenar
orderasc | descDireccion del orden (default desc)
searchstringBuscar en nombre, email, etc.
created_afterISO 8601Filtrar por fecha de creacion
created_beforeISO 8601Filtrar por fecha de creacion
curl
curl "https://zephcrm.com/api/v1/opportunities?limit=20&sort=value&order=desc" \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": [
    {
      "id": "clxopp1...",
      "title": "Implementacion CRM Enterprise",
      "value": 50000,
      "currency": "USD",
      "expectedCloseDate": "2025-03-15",
      "description": "Proyecto de implementacion completa",
      "stageId": "clxstage3...",
      "contactId": "clxc1...",
      "companyId": "clxcomp1...",
      "assignedToId": "clxuser1...",
      "customFields": {},
      "createdAt": "2025-01-12T10:00:00.000Z",
      "updatedAt": "2025-01-19T14:00:00.000Z"
    }
  ],
  "pagination": {
    "nextCursor": "clxopp1...",
    "hasMore": true,
    "total": 34
  }
}
GET/api/v1/opportunities/:idopportunities:read

Obtiene una oportunidad por su ID.

curl
curl "https://zephcrm.com/api/v1/opportunities/clxopp1..." \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": {
    "id": "clxopp1...",
    "title": "Implementacion CRM Enterprise",
    "value": 50000,
    "currency": "USD",
    "expectedCloseDate": "2025-03-15",
    "description": "Proyecto de implementacion completa",
    "stageId": "clxstage3...",
    "contactId": "clxc1...",
    "companyId": "clxcomp1...",
    "assignedToId": "clxuser1...",
    "customFields": {},
    "createdAt": "2025-01-12T10:00:00.000Z",
    "updatedAt": "2025-01-19T14:00:00.000Z"
  }
}
POST/api/v1/opportunitiesopportunities:write

Crea una nueva oportunidad.

Request Body (JSON)

CampoTipoReqDescripcion
titlestringSiTitulo de la oportunidad
valuenumberNoValor monetario
currencystringNoMoneda (default: USD)
expectedCloseDatestringNoFecha esperada de cierre (YYYY-MM-DD)
descriptionstringNoDescripcion
stageIdstringSiID de la etapa del pipeline
contactIdstringNoID del contacto
companyIdstringNoID de la empresa
assignedToIdstringNoID del usuario asignado
customFieldsobjectNoCampos personalizados
curl
curl -X POST "https://zephcrm.com/api/v1/opportunities" \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Renovacion anual",
    "value": 12000,
    "currency": "USD",
    "expectedCloseDate": "2025-04-01",
    "stageId": "clxstage1...",
    "contactId": "clxc1...",
    "companyId": "clxcomp1..."
  }'
Response
{
  "data": {
    "id": "clxoppnew...",
    "title": "Renovacion anual",
    "value": 12000,
    "currency": "USD",
    "expectedCloseDate": "2025-04-01",
    "stageId": "clxstage1...",
    "contactId": "clxc1...",
    "companyId": "clxcomp1...",
    "createdAt": "2025-01-20T14:00:00.000Z",
    "updatedAt": "2025-01-20T14:00:00.000Z"
  }
}
PATCH/api/v1/opportunities/:idopportunities:write

Actualiza una oportunidad existente. Cambiar stageId mueve la oportunidad en el pipeline.

Request Body (JSON)

CampoTipoReqDescripcion
titlestringNoTitulo
valuenumberNoValor monetario
currencystringNoMoneda
expectedCloseDatestringNoFecha esperada de cierre
descriptionstringNoDescripcion
stageIdstringNoID de la etapa del pipeline
contactIdstringNoID del contacto
companyIdstringNoID de la empresa
assignedToIdstringNoID del usuario asignado
customFieldsobjectNoCampos personalizados
curl
curl -X PATCH "https://zephcrm.com/api/v1/opportunities/clxopp1..." \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "value": 55000,
    "stageId": "clxstage4..."
  }'
Response
{
  "data": {
    "id": "clxopp1...",
    "title": "Implementacion CRM Enterprise",
    "value": 55000,
    "stageId": "clxstage4...",
    "updatedAt": "2025-01-20T16:00:00.000Z"
  }
}

DELETE no disponible

La API no expone endpoints DELETE. Las eliminaciones se realizan exclusivamente desde la UI del CRM.

Actividades

GET/api/v1/activitiesactivities:read

Lista todas las actividades de tu organizacion con paginacion y filtros.

Query Parameters

ParamTipoDescripcion
cursorstringCursor para paginacion (ID del ultimo item)
limitnumberItems por pagina (default 20, max 100)
sortstringCampo por el que ordenar
orderasc | descDireccion del orden (default desc)
searchstringBuscar en nombre, email, etc.
created_afterISO 8601Filtrar por fecha de creacion
created_beforeISO 8601Filtrar por fecha de creacion
typestringFiltrar por tipo: TASK, CALL, MEETING, EMAIL, NOTE
statusstringPENDING o COMPLETED
assigned_tostringID del usuario asignado
contact_idstringID del contacto asociado
company_idstringID de la empresa asociada
opportunity_idstringID de la oportunidad asociada
due_afterISO 8601Actividades con vencimiento despues de esta fecha
due_beforeISO 8601Actividades con vencimiento antes de esta fecha
curl
curl "https://zephcrm.com/api/v1/activities?type=TASK&status=PENDING&limit=20" \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": [
    {
      "id": "clxact1...",
      "type": "TASK",
      "title": "Llamar a Juan Perez",
      "description": "Seguimiento de propuesta",
      "dueDate": "2025-02-01T10:00:00.000Z",
      "completedAt": null,
      "priority": "HIGH",
      "contactId": "clxc1...",
      "opportunityId": "clxopp1...",
      "assignedToId": "clxuser1...",
      "createdAt": "2025-01-20T14:00:00.000Z",
      "updatedAt": "2025-01-20T14:00:00.000Z"
    }
  ],
  "pagination": {
    "nextCursor": "clxact1...",
    "hasMore": true,
    "total": 42
  }
}
GET/api/v1/activities/:idactivities:read

Obtiene una actividad por su ID con relaciones (contacto, oportunidad, usuario asignado).

curl
curl "https://zephcrm.com/api/v1/activities/clxact1..." \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": {
    "id": "clxact1...",
    "type": "TASK",
    "title": "Llamar a Juan Perez",
    "description": "Seguimiento de propuesta",
    "dueDate": "2025-02-01T10:00:00.000Z",
    "completedAt": null,
    "priority": "HIGH",
    "contact": { "id": "clxc1...", "firstName": "Juan", "lastName": "Perez", "email": "juan@empresa.com" },
    "opportunity": { "id": "clxopp1...", "title": "Implementacion CRM" },
    "assignedTo": { "id": "clxuser1...", "name": "Admin" },
    "createdAt": "2025-01-20T14:00:00.000Z",
    "updatedAt": "2025-01-20T14:00:00.000Z"
  }
}
POST/api/v1/activitiesactivities:write

Crea una nueva actividad. Las tareas (TASK) requieren dueDate.

Request Body (JSON)

CampoTipoReqDescripcion
typestringSiTASK, CALL, MEETING, EMAIL, NOTE
titlestringSiTitulo de la actividad
descriptionstringNoDescripcion
dueDateISO 8601NoFecha de vencimiento (requerido para TASK)
prioritystringNoLOW, MEDIUM (default), HIGH
contactIdstringNoID del contacto asociado
opportunityIdstringNoID de la oportunidad asociada
assignedToIdstringNoID del usuario asignado (default: usuario de la key)
curl
curl -X POST "https://zephcrm.com/api/v1/activities" \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "type": "TASK",
    "title": "Enviar propuesta a cliente",
    "dueDate": "2025-02-05T10:00:00.000Z",
    "priority": "HIGH",
    "contactId": "clxc1...",
    "opportunityId": "clxopp1..."
  }'
Response
{
  "data": {
    "id": "clxactnew...",
    "type": "TASK",
    "title": "Enviar propuesta a cliente",
    "dueDate": "2025-02-05T10:00:00.000Z",
    "priority": "HIGH",
    "completedAt": null,
    "createdAt": "2025-01-20T14:00:00.000Z",
    "updatedAt": "2025-01-20T14:00:00.000Z"
  }
}
PATCH/api/v1/activities/:idactivities:write

Actualiza una actividad. Para marcar como completada, enviar completedAt con la fecha actual.

Request Body (JSON)

CampoTipoReqDescripcion
titlestringNoTitulo
descriptionstringNoDescripcion
dueDateISO 8601NoFecha de vencimiento
prioritystringNoLOW, MEDIUM, HIGH
typestringNoTASK, CALL, MEETING, EMAIL, NOTE
contactIdstringNoID del contacto asociado
opportunityIdstringNoID de la oportunidad asociada
assignedToIdstringNoID del usuario asignado
completedAtISO 8601 | nullNoFecha de completado (null para reabrir)
curl
curl -X PATCH "https://zephcrm.com/api/v1/activities/clxact1..." \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "completedAt": "2025-01-20T16:00:00.000Z"
  }'
Response
{
  "data": {
    "id": "clxact1...",
    "type": "TASK",
    "title": "Llamar a Juan Perez",
    "completedAt": "2025-01-20T16:00:00.000Z",
    "updatedAt": "2025-01-20T16:00:00.000Z"
  }
}

DELETE no disponible

La API no expone endpoints DELETE para actividades.

Pipeline Stages

GET/api/v1/pipeline-stagespipeline:read

Lista las etapas del pipeline de ventas ordenadas por posicion. Usa esto para obtener los stageId al crear o mover oportunidades.

curl
curl "https://zephcrm.com/api/v1/pipeline-stages" \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": [
    {
      "id": "clxstage1...",
      "name": "Prospeccion",
      "order": 0,
      "color": "#3b82f6",
      "probability": 10,
      "isDefault": true,
      "isWon": false,
      "isLost": false
    },
    {
      "id": "clxstage2...",
      "name": "Propuesta",
      "order": 1,
      "color": "#f59e0b",
      "probability": 50,
      "isDefault": false,
      "isWon": false,
      "isLost": false
    },
    {
      "id": "clxstage3...",
      "name": "Ganada",
      "order": 2,
      "color": "#22c55e",
      "probability": 100,
      "isDefault": false,
      "isWon": true,
      "isLost": false
    }
  ]
}

Secuencias de seguimiento

GET/api/v1/sequencessequences:read

Lista las secuencias de seguimiento de la organización.

curl
curl "https://zephcrm.com/api/v1/sequences" \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": [
    {
      "id": "6f1b2c3d-...",
      "name": "Seguimiento leads nuevos",
      "description": "Para leads del formulario web",
      "isActive": true,
      "reviewMode": false,
      "language": "es",
      "stepCount": 3,
      "activeEnrollments": 12,
      "createdAt": "2026-07-01T12:00:00.000Z"
    }
  ]
}
GET/api/v1/sequences/{id}sequences:read

Detalle de una secuencia con sus pasos (briefing y delays).

curl
curl "https://zephcrm.com/api/v1/sequences/6f1b2c3d-..." \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": {
    "id": "6f1b2c3d-...",
    "name": "Seguimiento leads nuevos",
    "isActive": true,
    "reviewMode": false,
    "tone": "profesional cercano",
    "language": "es",
    "sendWindow": { "days": [1, 2, 3, 4, 5], "startHour": 9, "endHour": 18 },
    "steps": [
      { "order": 1, "briefing": "Presentarme y proponer una llamada", "delayValue": 1, "delayUnit": "hours" },
      { "order": 2, "briefing": "Reforzar valor con un caso de éxito", "delayValue": 3, "delayUnit": "days" }
    ]
  }
}
POST/api/v1/sequences/{id}/enrollmentssequences:write

Enrola leads en la secuencia. Los emails se generan con AI y se envían desde la casilla del dueño de la API key. Los leads con un seguimiento ya activo se omiten (skipped).

curl
curl -X POST "https://zephcrm.com/api/v1/sequences/6f1b2c3d-.../enrollments" \
  -H "Authorization: Bearer vk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "leadIds": ["a1b2c3d4-..."] }'
Response
{
  "data": {
    "enrolled": 1,
    "skipped": [
      { "leadId": "e5f6a7b8-...", "reason": "Ya tiene una secuencia activa" }
    ]
  }
}
GET/api/v1/enrollments?leadId={leadId}sequences:read

Estado de los seguimientos de un lead (o de una secuencia con ?sequenceId=). Estados: ACTIVE, WAITING_APPROVAL, REPLIED, COMPLETED, CANCELLED.

curl
curl "https://zephcrm.com/api/v1/enrollments?leadId=a1b2c3d4-..." \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": [
    {
      "id": "9c8d7e6f-...",
      "status": "ACTIVE",
      "currentStep": 1,
      "totalSteps": 3,
      "nextSendAt": "2026-07-25T13:00:00.000Z",
      "repliedAt": null,
      "sequence": { "id": "6f1b2c3d-...", "name": "Seguimiento leads nuevos", "reviewMode": false },
      "lead": { "id": "a1b2c3d4-...", "firstName": "Ana", "lastName": "García", "email": "ana@empresa.com" }
    }
  ]
}
DELETE/api/v1/enrollments/{id}sequences:write

Cancela un seguimiento en curso. No se envían más emails al lead.

curl
curl -X DELETE "https://zephcrm.com/api/v1/enrollments/9c8d7e6f-..." \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": { "id": "9c8d7e6f-...", "status": "CANCELLED" }
}
GET/api/v1/search(cualquier :read)

Busca en todas las entidades para las que la API key tenga scope de lectura. Retorna resultados agrupados por tipo.

Query Parameters

ParamTipoDescripcion
qstringTexto de busqueda (requerido, minimo 2 caracteres)
typesstringTipos a buscar separados por coma (ej: leads,contacts). Por defecto busca en todos.
limitnumberMax resultados por tipo (default 5, max 20)
curl
curl "https://zephcrm.com/api/v1/search?q=garcia&limit=5" \
  -H "Authorization: Bearer vk_live_..."
Response
{
  "data": {
    "leads": [
      { "id": "clx1...", "firstName": "Maria", "lastName": "Garcia", "email": "maria@empresa.com", "status": "QUALIFIED" }
    ],
    "contacts": [
      { "id": "clxc1...", "firstName": "Maria", "lastName": "Garcia", "email": "maria@techsa.com", "position": "CTO" }
    ],
    "companies": [],
    "opportunities": [],
    "activities": []
  }
}

OpenClaw / Agentes IA

Zeph CRM expone un skill spec publico compatible con OpenClaw y otros frameworks de agentes IA. El endpoint no requiere autenticacion -- describe las herramientas disponibles para que un agente las descubra automaticamente.

Skill Spec URL: https://zephcrm.com/api/openclaw/skill

curl
curl "https://zephcrm.com/api/openclaw/skill"

Para configurar un agente, crea una API key con los scopes necesarios en Settings > API Keys y apunta tu agente al skill spec URL.

Necesitas ayuda? Contacta a soporte o visita el Centro de Ayuda.

API Reference — Zeph