Leads
Endpoints para crear, buscar, actualizar y mover leads (negocios) en el embudo, además de tags, secuencias y envío de WhatsApp por lead.
https://app.syncro.chat/api/v1AuthX-API-Key: crm_SUA_CHAVE_AQUIEl objeto Lead
La mayoría de los endpoints devuelve el lead en este formato base (los campos adicionales se agregan mediante ?include):
{
"id": 123,
"name": "João Silva",
"phone": "+5511999887766",
"email": "[email protected]",
"company": "ACME",
"birthday": "1990-01-15",
"value": 5000.0,
"source": "site",
"tags": ["vip", "enterprise"],
"pipeline_id": 1,
"stage_id": 5,
"notes": "Anotações do lead",
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "verao_2026",
"utm_term": null,
"utm_content": null,
"stage": { "id": 5, "name": "Proposta" },
"pipeline": { "id": 1, "name": "Vendas" },
"created_at": "2026-06-30T10:00:00Z",
"custom_fields": { "tamanho_empresa": "100+" }
}
Listar leads
/leadsleads:readLista los leads de la cuenta, paginado, con filtros.
Parámetros de query
pipeline_idintegeropcionalstage_idintegeropcionalassigned_tointegeropcionalsourcestringopcionalstatusstringopcionaltagsarrayopcionalqstringopcionalupdated_sincedate (ISO 8601)opcionalcreated_fromdateopcionalcreated_todateopcionalpageintegeropcional1)per_pageintegeropcional50, máx 200)includestringopcionalcurl "https://app.syncro.chat/api/v1/leads?pipeline_id=1&per_page=2&include=owner" \ -H "X-API-Key: crm_SUA_CHAVE_AQUI"
{
"success": true,
"data": [
{
"id": 123,
"name": "João Silva",
"phone": "+5511999887766",
"email": "[email protected]",
"company": "ACME",
"value": 5000,
"source": "site",
"tags": [
"vip"
],
"pipeline_id": 1,
"stage_id": 5,
"stage": {
"id": 5,
"name": "Proposta"
},
"pipeline": {
"id": 1,
"name": "Vendas"
},
"created_at": "2026-06-30T10:00:00Z",
"custom_fields": {},
"assigned_to": 12,
"owner": {
"id": 12,
"name": "Ana",
"email": "[email protected]"
}
}
],
"meta": {
"total": 250,
"per_page": 2,
"current_page": 1,
"last_page": 125,
"has_more": true
}
}Crear lead
/leadsleads:writeCrea un nuevo lead.
Parámetros del body
namestringobligatoriopipeline_idintegerobligatoriostage_idintegerobligatoriophonestringopcionalemailstringopcionalvaluenumberopcionalsourcestringopcionaltagsarray(string)opcionalnotesstringopcionalutm_source / utm_medium / utm_campaign / utm_term / utm_contentstringopcionalassigned_tointegeropcionalcustom_fieldsobjectopcionalnombre_del_campo: valor (ver [Campos personalizados](/es/custom-fields))Si el stage_id es una etapa marcada como ganado/perdido, Syncro crea automáticamente la Venta (Sale) o la Pérdida (LostSale) correspondiente.
Errores: 422 con limit_reached: true si se alcanzó el límite de leads del plan.
curl -X POST "https://app.syncro.chat/api/v1/leads" \
-H "X-API-Key: crm_SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"name": "João Silva",
"phone": "+5511999887766",
"email": "[email protected]",
"value": 5000,
"source": "site",
"tags": [
"vip"
],
"pipeline_id": 1,
"stage_id": 5,
"assigned_to": 12,
"custom_fields": {
"tamanho_empresa": "100+"
}
}'{
"success": true,
"lead": {
"id": 123,
"name": "João Silva",
"pipeline_id": 1,
"stage_id": 5,
"stage": {
"id": 5,
"name": "Proposta"
},
"pipeline": {
"id": 1,
"name": "Vendas"
},
"created_at": "2026-06-30T10:00:00Z",
"custom_fields": {
"tamanho_empresa": "100+"
}
}
}Crear o actualizar lead (upsert)
/leads/upsertleads:writeCrea un lead nuevo o actualiza uno existente, casando por correo y/o teléfono. Ideal para sincronización. Acepta los mismos campos de POST /leads, más el campo de abajo.
Parámetros del body
match_bystringopcionalemail, phone o email_or_phone (predeterminado email_or_phone)Es obligatorio enviar correo o teléfono (es la clave de match). En update, solo se cambian los campos enviados (no vacíos).
curl -X POST "https://app.syncro.chat/api/v1/leads/upsert" \
-H "X-API-Key: crm_SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"name": "João Silva",
"email": "[email protected]",
"pipeline_id": 1,
"stage_id": 5,
"match_by": "email"
}'{
"success": true,
"created": true,
"lead": {
"id": 123,
"name": "João Silva",
"stage_id": 5
}
}Buscar lead por ID
/leads/123leads:readDevuelve un lead. Acepta ?include= para cargar relaciones.
curl "https://app.syncro.chat/api/v1/leads/123?include=owner%2Ctasks%2Cnotes" \ -H "X-API-Key: crm_SUA_CHAVE_AQUI"
{
"success": true,
"lead": {
"id": 123,
"name": "João Silva",
"stage_id": 5
}
}Mover lead de etapa
/leads/123/stageleads:writeMueve el lead a otra etapa (y pipeline).
Parámetros del body
stage_idintegerobligatoriopipeline_idintegerobligatorioErrores: 422 con blocked: true y pending_tasks si la etapa actual tiene tareas obligatorias pendientes.
curl -X PUT "https://app.syncro.chat/api/v1/leads/123/stage" \
-H "X-API-Key: crm_SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"stage_id": 7,
"pipeline_id": 1
}'{
"success": true,
"lead_id": 123
}Marcar como ganado
/leads/123/wonleads:writeMueve el lead a una etapa de ganado y registra la venta.
Parámetros del body
stage_idintegerobligatoriois_won = true)valuenumberopcionalErrores: 422 si la etapa no es de ganado ("A etapa informada não é uma etapa de ganho.") o 422 blocked por tareas obligatorias pendientes.
curl -X PUT "https://app.syncro.chat/api/v1/leads/123/won" \
-H "X-API-Key: crm_SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"stage_id": 10,
"value": 7500
}'{
"success": true,
"lead_id": 123
}Marcar como perdido
/leads/123/lostleads:writeMueve el lead a una etapa de pérdida y registra el motivo.
Parámetros del body
stage_idintegerobligatoriois_lost = true)reason_idintegeropcionallost_reasons en [Pipelines](/es/pipelines))Errores: 422 si la etapa no es de pérdida; 422 blocked por tareas pendientes.
curl -X PUT "https://app.syncro.chat/api/v1/leads/123/lost" \
-H "X-API-Key: crm_SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"stage_id": 11,
"reason_id": 3
}'{
"success": true,
"lead_id": 123
}Eliminar lead
/leads/123leads:writeElimina el lead.
curl -X DELETE "https://app.syncro.chat/api/v1/leads/123" \ -H "X-API-Key: crm_SUA_CHAVE_AQUI"
{
"success": true
}Eliminar una tag
/leads/123/tags/vipleads:writeElimina una tag por el nombre.
curl -X DELETE "https://app.syncro.chat/api/v1/leads/123/tags/vip" \ -H "X-API-Key: crm_SUA_CHAVE_AQUI"
{
"success": true,
"lead_id": 123,
"tags": [
"enterprise"
]
}Inscribir en secuencia de nutrición
/leads/123/enroll-sequencesequences:writeInscribe el lead en una secuencia activa. Ve la lista de secuencias en Secuencias.
Parámetros del body
sequence_idintegerobligatoriocurl -X POST "https://app.syncro.chat/api/v1/leads/123/enroll-sequence" \
-H "X-API-Key: crm_SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"sequence_id": 1
}'{
"success": true,
"lead_id": 123,
"sequence_id": 1,
"lead_sequence_id": 45,
"status": "active",
"next_step_at": "2026-07-01T10:00:00Z"
}Eliminar de secuencia
/leads/123/enroll-sequence/1sequences:writeQuita el lead de una secuencia.
curl -X DELETE "https://app.syncro.chat/api/v1/leads/123/enroll-sequence/1" \ -H "X-API-Key: crm_SUA_CHAVE_AQUI"
{
"success": true,
"lead_id": 123,
"sequence_id": 1,
"status": "exited_manual"
}Enviar WhatsApp (texto o imagen)
/leads/123/send-whatsappwhatsapp:writeEnvía un mensaje de texto o imagen al teléfono del lead. Ve números conectados en WhatsApp.
Parámetros del body
typestringobligatoriotext o imagebodystringcondicionalmedia_url)media_urlstring (URL)condicionaltype=image)captionstringopcionalinstance_idintegeropcionalErrores: 422 si el lead no tiene teléfono; 422 con skip_reason: "window_closed" en números de la API Oficial fuera de la ventana de 24h (usa template); 502 en falla del proveedor.
curl -X POST "https://app.syncro.chat/api/v1/leads/123/send-whatsapp" \
-H "X-API-Key: crm_SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"type": "text",
"body": "Olá! Tudo bem?",
"instance_id": 1
}'{
"success": true,
"conversation_id": 99,
"message_id": 456,
"provider_msg_id": "wamid.xyz123"
}Enviar template (HSM)
/leads/123/send-whatsapp-templatewhatsapp:writeEnvía un template oficial aprobado (necesario fuera de la ventana de 24h en la API Oficial). Ve templates en WhatsApp.
Parámetros del body
template_idintegerobligatorioAPPROVED)variablesarray(string)opcionalheader_media_urlstring (URL)opcionalinstance_idintegeropcionalcurl -X POST "https://app.syncro.chat/api/v1/leads/123/send-whatsapp-template" \
-H "X-API-Key: crm_SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"template_id": 1,
"variables": [
"João",
"Proposta",
"30/07"
],
"instance_id": 2
}'{
"success": true,
"conversation_id": 99,
"message_id": 457,
"provider_msg_id": "wamid.xyz456",
"template_name": "lembrete_proposta"
}Relaciones extra (`?include`)
En GET /leads y GET /leads/{id}, usa ?include= con nombres separados por coma para cargar datos adicionales. Los tokens desconocidos se ignoran.
| include | Lo que agrega |
|---|---|
owner |
assigned_to (int) + owner {id, name, email} |
products |
products[] {id, product_id, product_name, quantity, unit_price, discount_percent, total} |
contacts |
contacts[] {id, name, role, phone, email, is_primary} |
notes |
notes_list[] {id, body, author, created_at} |
sales |
sales[] {id, pipeline_id, value, closed_by, closed_at} + lost_sales[] {id, pipeline_id, reason_id, lost_at, lost_by} |
tasks |
tasks[] {id, subject, type, status, priority, due_date, due_time, completed_at, assigned_to} |
sequences |
active_sequence {id, name, current_step, total_steps, status} + sequences[] {id, sequence_id, name, status, next_step_at} |
score |
score (int) + score_updated_at |
siblings |
siblings[] (otros negocios del mismo contacto) + contact_totals |
events |
events[] {id, event_type, description, performed_by, created_at} |
conversation |
conversation {id, phone, status, last_message_at, unread_count, instance_id} |
events,conversationysiblingssolo están disponibles enGET /leads/{id}(no en el listado, por costo).