API de Contactos
La API de Contactos permite gestionar la agenda de contactos del número de WhatsApp activo: listar, buscar, obtener, crear, actualizar el apodo, bloquear/desbloquear y exportar contactos. Con la introducción del BSUID (Business-Scoped User ID) por parte de Meta, cada contacto puede tener — además del teléfono (wa_id) — los campos user_id (BSUID), parent_user_id (parent BSUID) y username. Esto permite que un contacto exista incluso sin teléfono (por ejemplo, cuando el usuario adoptó un username). Comprende el concepto en BSUID e identificadores de usuario.
Los campos BSUID (
user_id, parent_user_id, username) se devuelven en todos los endpoints de contacto y aparecen rellenos cuando están disponibles o como null cuando están ausentes. El campo wa_id (teléfono) se sigue devolviendo normalmente por compatibilidad retroactiva.Autenticación y base URL
Todos los endpoints de esta página usan la base URL de producción y autenticación por Bearer Token:https://api.positus.global/v2
Headers
Los endpoints de listado, obtención, creación, apodo, bloqueo y desbloqueo operan sobre el número de WhatsApp activo de la sesión (el número seleccionado actualmente por el usuario autenticado). No reciben el código del número (
chave) en la ruta. Solo el endpoint de exportación recibe el UUID del número en la ruta.Listar contactos
GET https://api.positus.global/v2/messenger/contacts
Lista los contactos del número activo, paginados (40 por página), ordenados por la fecha del último mensaje. Soporta búsqueda textual y filtros.
Headers
Query Parameters
Response
- 200
- 403
Devuelve
403 cuando no hay un número de WhatsApp activo asociado a la sesión.Obtener contacto
GET https://api.positus.global/v2/messenger/contacts/{contact}
Devuelve un contacto específico del número activo, identificado por su UUID (id).
Path Parameters
Headers
Response
- 200
- 404
Crear / actualizar contacto
POST https://api.positus.global/v2/messenger/contacts
Crea un contacto en el número activo. Si ya existe un contacto con el mismo identificador de búsqueda, se actualiza en lugar de duplicarse (comportamiento update-or-create).
El contacto puede identificarse por teléfono (phone) O por BSUID (user_id) — debes informar al menos uno de los dos. Esto permite crear contactos sin teléfono, solo con el BSUID.
Headers
Request Body
Clave de búsqueda (evita duplicidad):
- Si se informa
user_id, el contacto se busca/actualiza poruser_id(prioridad BSUID). Si también vienephone, el teléfono se guarda enwa_id. - Si solo se informa
phone, el contacto se busca/actualiza porwa_id.
username no se usa como clave de identificación — lo rellenan los webhooks de Meta.Números on-premises: al crear un contacto solo por
phone (sin user_id), la API valida el número contra la WhatsApp API antes de guardar — si el número no existe, devuelve 404. Al crear solo por user_id (sin teléfono), esa validación se omite. En números Cloud API no hay validación previa.Request Body (contacto tradicional — por teléfono)
Request Body (contacto por BSUID — sin teléfono)
Request Body (BSUID + teléfono)
Response
- 200
- 404
- 422
El campo
recently_created indica si el contacto fue creado ahora (true) o si se actualizó un contacto existente (false).Actualizar apodo
PUT https://api.positus.global/v2/messenger/contacts/{contact}/nickname
Actualiza el apodo (nickname) de un contacto existente, identificado por su UUID.
Path Parameters
Request Body
Response
- 200
Bloquear contacto
POST https://api.positus.global/v2/messenger/contacts/{contact}/block
Bloquea un contacto existente.
Path Parameters
Request Body
Response
- 200
Desbloquear contacto
POST https://api.positus.global/v2/messenger/contacts/{contact}/unblock
Desbloquea un contacto bloqueado.
Path Parameters
Response
- 200
Exportar contactos
POST https://api.positus.global/v2/whatsapp/numbers/{number}/exports/contacts
Exporta todos los contactos de un número (identificado por su UUID en la ruta) en CSV o XLSX. El archivo incluye columnas dedicadas para los campos BSUID (user_id, parent_user_id, username).
Path Parameters
Request Body
Response
- 200
- 422
Devuelve el archivo binario para descarga (CSV o XLSX) con las columnas:
id, name, nickname, wa_id, user_id, parent_user_id, username, blocked, block_reason, blocked_at, created_at, updated_at.Objeto contacto
Campos devueltos en el objeto contacto (endpoints de listado, obtención y creación):Búsqueda por user_id o username
El parámetro query del listado de contactos hace una búsqueda textual (vía LIKE, coincidencia parcial) sobre los siguientes campos:
namenicknamewa_id(teléfono)user_id(BSUID)username
El
username es solo un criterio de búsqueda textual — no es una clave única. No uses username para identificar unívocamente un contacto; usa el id (UUID) o el user_id (BSUID).