Lista los contactos
Devuelve { data, total, has_more }. Por defecto ordena por recencia de la conversación y pagina con page. Para barrer la lista completa usa el cursor: order=id en la primera página y starting_after=<id del último contacto> en las siguientes — es el único orden estable (el default se reordena con cada mensaje entrante). El SDK lo hace solo con contacts.iterate().
Request
- Base URL: https://api.met.meteor.com.co/api/v1
- URL: https://api.met.meteor.com.co/api/v1/contacts
- Auth: one of:
- bearer (a scheme the document does not define)
- HTTP bearer
Query parameters
Chip rápido de la bandeja. open = no cerrados (estado distinto de finished y archived; sin estado cuenta como abierto, y si mandas status ese manda), unread = con mensajes sin leer, human = human_requested (manda sobre status), autopilot = piloto encendido.
true = el cliente escribió después de la última respuesta humana válida, aunque el bot haya respondido.
Condiciones sobre los campos del contacto, como arreglo JSON (codificado en la URL) de { "field", "op", "value" }. Se combinan con AND.
- field: la clave tal como vive en data. Las de sistema llevan $ ($status, $last_message_at); las personalizadas van con su field_key sin $ (id_empresa_ave). También acepta created_at y $tags.
- op: eq, neq, contains, not_contains, before, after, between (con value2), in y not_in (con values: [...]), y is_empty, not_empty, is_true, is_false (sin value). Con $tags: has y not_has.
before y after comparan el texto guardado: para fechas usa ISO 8601 en UTC con milisegundos (2026-09-24T00:00:00.000Z), el mismo formato en que Met guarda $last_message_at.
Ojo: una condición mal formada (campo con caracteres no permitidos, operador desconocido o JSON inválido) se ignora, no da error. Revisa total en la respuesta antes de confiar en el filtro.
Ejemplos: los contactos sin id_empresa_ave → [{"field":"id_empresa_ave","op":"is_empty"}]; los que tuvieron mensajes desde una fecha → [{"field":"$last_message_at","op":"after","value":"2026-09-24T00:00:00.000Z"}].
Coincidencia exacta por teléfono normalizado: ignora +, espacios, guiones y paréntesis, y completa el indicativo de un número nacional con el de la línea de WhatsApp del workspace (si no tiene línea, el de Colombia para un móvil de 10 dígitos). Así 3001234567, +57 300 123 4567 y 573001234567 encuentran al mismo contacto, y no a uno que solo comparte los últimos dígitos.
Entre 6 y 15 dígitos; si no, responde 400 validation_error con param: "phone". Se combina con los demás filtros (AND).
Límite: un teléfono guardado con separadores internos (+57 300-123 4567) solo se encuentra si lo escribes igual. Los contactos que crea WhatsApp lo guardan sin separadores; PATCH y POST /contacts en Meteor CRM lo guardan tal como lo mandaste.
Alias de q. Si mandas los dos, gana q.
Búsqueda por texto: devuelve los contactos cuyo nombre ($name), teléfono ($phone), email ($email) o identificador del canal ($user_ns) contiene el texto, sin distinguir mayúsculas. Compara el texto guardado: 3001234567 encuentra +573001234567, pero 300 123 4567 no. Para ubicar a una persona por su número usa phone.
Id del último contacto que ya tienes: devuelve los siguientes. Implica order=id.
id: orden estable por id descendente. Omítelo para el orden por recencia de la conversación.
Página, desde 1. Solo con el orden por defecto; para barrer la lista completa usa order=id y starting_after.
Contactos por página (1–200). Por defecto 100.
Response
Example response
{
"data": {
"data": [
{
"app_url": "https://met.meteor.com.co/abrir/137/contacto/4821",
"channel_id": 5,
"channel_name": "WhatsApp Ventas",
"channel_type": "whatsapp",
"code": "K7F2QA",
"collection_id": 137,
"conversation_line_id": "606306225903622",
"created_at": "2026-07-30T04:12:33.120Z",
"data": {
"$name": "Ada Lovelace",
"$phone": "+573001112233",
"etapa": "Negociación"
},
"id": 4821,
"line_attention_enabled": true
}
],
"has_more": true,
"total": 1284
}
}Changes
No recorded changes to this operation across all 1 revision of this API.