IA lee la empresa
Cada agente
IA recorre el sitio y escribe la oferta, la audiencia, la voz y la marca. El chat del sitio, los flujos de tarjetas y LinkedIn parten de ahí.
Guía de la API Pública de Contactos de SMOC: un endpoint REST de solo lectura para listar contactos y obtener recuentos agregados de tu empresa. Úsalo desde integraciones personalizadas, trabajos de sincronización o junto con la aplicación de Zapier.
La API Pública de SMOC permite que sistemas de terceros lean contactos de una sola empresa. Está alojada en Cloudflare Workers y se delimita automáticamente a la empresa asociada a tu clave API.
Lo que hace actualmente:
Lo que no hace:
limit)Este contrato compatible con Zapier se mantiene. El único endpoint de contactos para ese contrato es:
GET /api/company/mongocontact
La búsqueda avanzada de contactos es adicional: POST /api/v2/contacts_search. No migres Zapier fuera de mongocontact.
Para la configuración en Console, autenticación y una visión general de las funciones, comienza con la guía de conexión a la API REST.
Todas las integraciones de datos de SMOC utilizan el mismo patrón de token de Console que Zapier y MCP:
Generar una nueva clave no revoca las claves existentes. Las claves emitidas se muestran en la misma página: revoca las claves no utilizadas allí cuando necesites rotar credenciales.
Cada clave está vinculada a una empresa. La clave lleva una declaración operatorId igual al ID de esa empresa. La API utiliza esto para delimitar todos los datos de contacto: no puedes pasar un ID de empresa diferente en la solicitud.
| Entorno | URL base |
|---|---|
| Producción | https://api.smoc.ai |
Ejemplo de endpoint completo:
GET https://api.smoc.ai/api/company/mongocontact
Envía tu clave API en una cabecera HTTP personalizada llamada token:
GET /api/company/mongocontact HTTP/1.1
Host: api.smoc.ai
token: <your-api-key>
Content-Type: application/json
La API verifica la clave y lee la declaración operatorId para determinar de qué empresa devolver los contactos. No envías un ID de empresa en la URL ni en la cadena de consulta.
No uses:
Authorization: Bearer … — esta cabecera no es aceptada por este endpoint (aunque la página "API Access" de Console pueda mostrarlo actualmente). Usa la cabecera token en integraciones hasta que se añada soporte de producto para Bearer.sk_…) o claves publicables (pk_…): se rechazan con 401 Invalid token type.Método: solo GET. Otros métodos (por ejemplo, POST) devuelven 404 Not Found.
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
limit |
entero | No | 100 |
Máximo de contactos a devolver. Debe estar entre 1–500. |
sortByField |
cadena | No | (ninguno) | Ordena los contactos descendente por este campo. |
status |
cadena | No | (ninguno) | Filtra por estado del contacto. status=1 es el sondeo estándar de leads, incluyendo smart leads positivos de flujo de mensajes. |
Valores permitidos para sortByField:
| Valor | Ordena por |
|---|---|
createdAt |
Fecha de creación del contacto. Cuando se solicita este orden (y status se omite o es 1), los smart leads recientes de los últimos 14 días se integran y la página se reordena por max(createdAt, leadCapturedAt) para que aparezcan sin desplazar los contactos web más recientes. |
updatedAt |
Fecha de última actualización |
lastConversationDate |
Fecha de última conversación |
leadCapturedAt |
Cuando el contacto se convirtió en smart lead (usa updatedAt para filas históricas) |
companyUsers.lastConversationDate |
Alias heredado de lastConversationDate (compatibilidad con Zapier) |
El orden es siempre descendente (más reciente/mayor primero). Si se omite, se usa el orden natural de MongoDB.
200 OK){
"data": [ /* array of contact objects */ ],
"leadsCount": 42,
"customerCount": 18
}
| Campo | Tipo | Descripción |
|---|---|---|
data |
array | Registros de contactos de tu empresa |
leadsCount |
número | Contactos con estado "1" o null |
customerCount |
número | Contactos con estado "2" |
leadsCount y customerCount reflejan todos los contactos de la empresa, no solo la página actual.
Cada elemento en data incluye solo los campos siguientes (se excluyen campos sensibles/internos):
| Campo | Descripción |
|---|---|
id |
Identidad de sondeo de Zapier. Normalmente el _id de Mongo. Los smart leads de conversión tardía (leadCapturedAt al menos 1 hora después de createdAt, y a partir del 11-09-2026) usan {mongoId}__sl para que New Contact pueda activarse. Usa contactId para el id estable de Mongo. |
contactId |
_id estable de Mongo. No cambia cuando id se reescribe para un smart lead tardío. |
linkedinUrl |
URL de perfil de LinkedIn cuando está presente (linkedinUrl de nivel superior o el primer linkedinProfiles[].url). |
userId |
Identificador de usuario |
email |
Dirección de correo electrónico |
firstName |
Nombre |
lastName |
Apellidos |
msisdn |
Número de teléfono |
company |
Nombre de la empresa (empleador del contacto, si se captura) |
city, state, street, zip |
Campos de dirección |
status |
Estado del ciclo de vida del contacto (ver abajo). Los smart leads positivos de flujo de mensajes usan "1" como los leads de formulario web. |
leadSentiment |
"positive" o "negative" cuando se clasificó una respuesta de flujo de mensajes; se omite en caso contrario |
leadCapturedAt |
Hora ISO-8601 en que el contacto se convirtió en smart lead positivo (usa updatedAt si falta) |
tags |
Etiquetas de contacto resueltas { id, name, systemKind? }[] (incluye Auto: Positive Lead / Auto: Negative Lead) |
brandId |
Identificador de marca |
operatorId |
Identificador de empresa/operador |
createdAt |
Marca de tiempo de creación ISO-8601 |
updatedAt |
Marca de tiempo de última actualización ISO-8601 |
lastConversationDate |
Fecha ISO-8601 de la última conversación |
acceptedCommunication |
Si el contacto aceptó comunicaciones |
acceptedPrivacy |
Si el contacto aceptó los términos de privacidad |
inviterUser |
Quién refirió a este contacto (objeto) |
rewardFlows |
Flujos donde se ganaron recompensas |
promosPresented |
Promociones mostradas al contacto |
promosRedeemed |
Promociones canjeadas |
answeredSurveyQuestions |
Respuestas a encuestas |
usersReferred |
Usuarios referidos por este contacto |
referralLinks |
Detalles del enlace de referido |
visitList |
Historial de visitas/sesiones (dispositivo, UTM, geo, etc.) |
textFields |
Campos de texto personalizados capturados en flujos |
Los campos pueden ser null o estar ausentes si no se recopilaron para ese contacto.
| Estado | Significado |
|---|---|
"1" |
Lead (incluye smart leads positivos de flujo de mensajes) |
"2" |
Cliente |
"3" |
Perdido |
"4" |
Convertido |
null |
Se trata como Lead en los recuentos |
inviterUser
{
"id": 123,
"firstName": "Jane",
"lastName": "Doe",
"email": "[email protected]"
}
rewardFlows / promos
{ "id": "...", "title": "Summer promo" }
referralLinks
{
"key": "...",
"campaignId": 1,
"campaignName": "...",
"flowVariantId": 1,
"url": "https://...",
"share": true
}
visitList — incluye browser, os, deviceType, country, region, city, campos UTM (utmSource, utmMedium, utmCampaign, etc.), referrer, landingPage, userAgent, ip.
answeredSurveyQuestions — incluye texto de pregunta/respuesta, traducciones, información de recompensa y marcas de tiempo.
textFields — campos personalizados de flujo: flowId, flowName, variantId, variantName, key, value.
Todos los errores devuelven JSON con un campo error. Algunos incluyen un hint.
| Estado HTTP | Condición | Ejemplo de cuerpo |
|---|---|---|
401 |
Falta la cabecera token |
{ "error": "Missing token header" } |
401 |
Clave inválida/revocada, o clave sk_/pk_ usada |
{ "error": "Invalid or revoked token", "hint": "You can create a valid token from the Integration Dashboard." } |
403 |
Clave válida pero sin declaración operatorId |
{ "error": "Unauthorized" } |
422 |
limit > 500 |
{ "error": "limit must not exceed 500" } |
422 |
sortByField inválido |
{ "error": "Invalid sortByField value" } |
422 |
status inválido |
{ "error": "Invalid status value" } |
404 |
Ruta o método incorrecto | Not Found (texto plano) |
Básico — obtener hasta 100 contactos:
curl -s \
-H "token: YOUR_API_KEY" \
"https://api.smoc.ai/api/company/mongocontact"
Obtener 25 contactos, ordenados por última conversación:
curl -s \
-H "token: YOUR_API_KEY" \
"https://api.smoc.ai/api/company/mongocontact?limit=25&sortByField=lastConversationDate"
Obtener leads estándar (leads de formulario web y smart leads positivos de flujo de mensajes):
curl -s \
-H "token: YOUR_API_KEY" \
"https://api.smoc.ai/api/company/mongocontact?status=1&sortByField=leadCapturedAt"
Ejemplo de respuesta truncada:
{
"data": [
{
"id": "665a1b2c3d4e5f6789012345",
"email": "[email protected]",
"firstName": "Alex",
"lastName": "Smith",
"msisdn": "+4712345678",
"status": "2",
"operatorId": "10",
"createdAt": "2025-03-15T10:22:00.000Z",
"lastConversationDate": "2025-06-01T14:30:00.000Z",
"visitList": [
{
"deviceType": "mobile",
"browser": "Chrome",
"country": "NO",
"utmSource": "google"
}
]
}
],
"leadsCount": 120,
"customerCount": 45
}
SMOC ofrece una aplicación de Zapier que utiliza este mismo endpoint. Flujo típico:
El disparador de Zapier consulta este endpoint y trata los contactos devueltos como nuevos cuando aparecen. Nuevo contacto se basa en id. Los smart leads de conversión tardía (prospectos importados que luego obtienen leadCapturedAt) ahora reciben un id {contactId}__sl estable para que el Zap existente de Nuevo contacto pueda activarse una vez. contactId sigue siendo el id de Mongo para el mapeo CRM. Esto se aplica a cada empresa; solo las capturas a partir del 11-09-2026 se reescriben (temporal hasta que exista un disparador dedicado de Nuevo smart lead). Es preferible usar HubSpot Crear o actualizar contacto por correo electrónico para evitar duplicados si el prospecto ya fue sincronizado. Consulta la guía de Zapier para la configuración paso a paso.
limit (máx. 500). Para sincronizar todos los contactos, ordena de forma consistente y rastrea los IDs vistos en el cliente, o usa el modelo de sondeo de Zapier.companyUsers.lastConversationDate existen para mantener la compatibilidad con la API original y la app de Zapier.El mismo worker de API también expone MCP en https://api.smoc.ai/mcp y REST v2 en POST /api/v2/{toolName} con herramientas de contacto más avanzadas (contacts_search, contacts_get, contacts_get_stats, etc.). Consulta la guía de MCP y la referencia de REST v2.
Para una visión general de producto de todas las rutas de integración, consulta smoc.ai/integraciones.
| Elemento | Valor |
|---|---|
| Endpoint | GET /api/company/mongocontact |
| Cabecera de autenticación | token: <api-key> |
| Tipo de contenido | application/json |
| Tamaño máximo de página | 500 |
| Tamaño de página predeterminado | 100 |
| Delimitación de empresa | Por clave API (declaración operatorId) |
| Creación de clave | Console → Ajustes → Integraciones → API |
POST /api/v2/{toolName}Dónde corre la IA
El chat del sitio, los flujos de tarjetas y LinkedIn comparten un sistema. La IA hace cada trabajo de abajo. La línea bajo el título dice dónde corre ese trabajo.
Cada agente
IA recorre el sitio y escribe la oferta, la audiencia, la voz y la marca. El chat del sitio, los flujos de tarjetas y LinkedIn parten de ahí.
Panel · Estrategia de leads
Fija tu objetivo de leads. IA simula miles de mezclas de canales, las ordena por eficiencia y muestra el plan más rentable. Tus datos y tus límites guían el cálculo.
Cada agente · tema en la web · lista en LinkedIn
IA escribe el flujo. El tema se ejecuta en el chat del sitio y en las tarjetas. La traducción se ejecuta en cada agente. IA encuentra la lista de prospectos en LinkedIn.
Ruta en cada flujo · web y LinkedIn por separado
El aprendizaje por refuerzo en la ruta del flujo se ejecuta en cada agente. Las recomendaciones se ejecutan en la web. El momento adecuado y la lectura de respuestas se ejecutan en LinkedIn.
Cada agente
IA propone una variante, usa tu revisión en el siguiente borrador y parte de un ejemplo que ya funciona. Tú aplicas el cambio.
Recibe novedades del producto y una mirada sobre agentes de IA proactivos, orquestación multicanal y conversión, sin ruido.
Ingresa tu correo electrónico a continuación para comenzar con SMOC.AI