Docs/Operaciones

Catálogo de operaciones

Las 134 operaciones de la API pública, agrupadas por dominio. De cada una: qué hace, qué permiso exige de la clave, tras qué puerta de despliegue vive, qué planes la alcanzan de serie y qué códigos HTTP declara.

Esta página se genera del contrato. Una operación nueva aparece aquí sin que nadie la escriba, y hay un test que se pone rojo si el disco y esta tabla dejan de coincidir.

Cómo leer la columna «Puerta»

ValorQué significa
SiempreServida sin condiciones de despliegue.
EscrituraExige PUBLIC_API_WRITE_ENABLED. Apagado responde 404.
GastoExige los dos interruptores, el alta explícita de la cuenta y cabecera Idempotency-Key.

Cómo leer la columna «Planes»

Son los planes cuyo nivel trae la capacidad de serie. Ninguno de serie (43 operaciones) significa que hay que pedir la capacidad para la cuenta — no que sea imposible. La guía de inicio lo explica en su sección 16.

Un 403 en cualquiera de estas operaciones tiene dos lecturas distintas (sección 5): insufficient_scope lo arregla quien emitió la clave; capability_required lo arregla el plan.


Agentes

Listar los agentes de voz del tenant, ver uno y editar su contenido (saludo, prompt, voz). Crear y borrar agentes NO está abierto por API: se hace desde el panel.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/agentsListar los agentes de voz del tenantagents:readSiempreTodos200, 400, 401, 403, 429, 500
GET /api/v1/agents/{agent_id}Ver un agenteagents:readSiempreTodos200, 401, 403, 404, 429, 500
PATCH /api/v1/agents/{agent_id}Actualizar el contenido de un agenteagents:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
GET /api/v1/agents/templatesListar el catálogo de plantillas de agenteagents:readSiempreTodos200, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/agents?limit=10"

Analítica

Los mismos agregados que pinta el panel: el resumen del dashboard y las estadísticas de llamadas por periodo.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/analytics/callsDesglose de llamadas por dirección y resultadoanalytics:readSiempreTodos200, 400, 401, 403, 429, 500
GET /api/v1/analytics/dashboardIndicadores del periodo y su variaciónanalytics:readSiempreTodos200, 400, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/analytics/dashboard?start_date=2026-07-01&end_date=2026-07-31"

Anuncios

Los comunicados internos de la cuenta: los mismos que ve el equipo en el panel. Solo lectura por API — publicarlos y retirarlos se hace desde el panel.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/announcementsListar los anuncios internos de la cuentaannouncements:readSiempreTodos200, 400, 401, 403, 429, 500
GET /api/v1/announcements/{announcement_id}Leer un anuncio internoannouncements:readSiempreTodos200, 401, 403, 404, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/announcements?limit=20"

Auditoría

El registro de actividad del tenant: quién hizo qué y cuándo.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/audit-logLeer el registro de actividad de la cuentaaudit:readSiempreTodos200, 400, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/audit-log?limit=50"

Avisos

Configurar, silenciar o descartar los avisos del sistema.

OperaciónQué haceScopePuertaPlanesCódigos
PATCH /api/v1/alertsConfigurar los avisos de la cuentaalerts:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
bash
curl -sS -X PATCH \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"alert_id":"<uuid>","dismissed":true}' \
  "https://$AMAI_API_HOST/api/v1/alerts"

Operación de escritura: 404 mientras PUBLIC_API_WRITE_ENABLED esté apagado.


Base de conocimiento

Gestionar las colecciones de documentos que consultan los agentes. La LECTURA de esas bases vive en el dominio «Knowledge Base» — son dos etiquetas para la misma cosa, y está anotado como defecto conocido en la ficha de la guía.

OperaciónQué haceScopePuertaPlanesCódigos
PATCH /api/v1/kb/collections/{collection_id}Renombrar o describir una colecciónkb:writeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
bash
curl -sS -X PATCH \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Manual de producto 2026"}' \
  "https://$AMAI_API_HOST/api/v1/kb/collections/<collection_id>"

Operación de escritura: 404 mientras PUBLIC_API_WRITE_ENABLED esté apagado.


Calendario

El horario laboral del tenant y sus excepciones. GET /api/v1/calendar/check responde si un instante concreto cae dentro del horario — es lo que consulta un agente antes de prometer una devolución de llamada.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/bookingsCitas agendadascalendar:readSiempreTodos200, 400, 401, 403, 429, 500
DELETE /api/v1/calendar/overridesQuitar la excepción de un díacalendar:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
PUT /api/v1/calendar/overridesFijar la excepción de un díacalendar:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
PUT /api/v1/calendar/scheduleFijar el horario semanalcalendar:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/calendar/check?at=2026-07-28T10:30:00Z"

Campañas

Crear y editar campañas y asociarles listas de contactos. Lanzarlas no está aquí: el despacho gasta saldo y vive en el dominio «Gasto».

OperaciónQué haceScopePuertaPlanesCódigos
POST /api/v1/campaignsCrear una campaña de emailcampaigns:writeEscrituraNinguno de serie201, 400, 401, 403, 404, 429, 500
GET /api/v1/campaigns/{campaign_id}Consultar una campañacampaigns:readSiempreNinguno de serie200, 401, 403, 404, 429, 500
PATCH /api/v1/campaigns/{campaign_id}Editar una campaña de emailcampaigns:writeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
GET /api/v1/campaigns/{campaign_id}/attemptsIntentos de una campañacampaigns:readSiempreNinguno de serie200, 400, 401, 403, 404, 429, 500
GET /api/v1/campaigns/{campaign_id}/enrollmentsInscripciones de una campañacampaigns:readSiempreNinguno de serie200, 400, 401, 403, 404, 429, 500
DELETE /api/v1/campaigns/{campaign_id}/listsQuitar listas de la audiencia de una campañacampaigns:writeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
GET /api/v1/campaigns/{campaign_id}/listsConsultar la audiencia de una campañacampaigns:readSiempreNinguno de serie200, 400, 401, 403, 404, 429, 500
POST /api/v1/campaigns/{campaign_id}/listsAñadir listas a la audiencia de una campañacampaigns:writeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Recordatorio julio","agent_id":"<uuid>"}' \
  "https://$AMAI_API_HOST/api/v1/campaigns"

Operación de escritura: 404 mientras PUBLIC_API_WRITE_ENABLED esté apagado.


Canal

Solo para cuentas de tipo agencia o partner: el árbol de subcuentas y sus estadísticas agregadas.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/agency/statsAgregado del canal en el periodoagency:readSiempreAgency, Partner, Enterprise200, 400, 401, 403, 429, 500
GET /api/v1/subaccountsListar las subcuentas del árbolsubaccounts:readSiempreAgency, Partner, Enterprise200, 400, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/agency/stats"

Una cuenta cliente recibe 403 capability_required aquí, y es correcto: no tiene canal.


Claves de API

Rotar tu propia credencial por programa: se emite una nueva con el mismo nombre y los mismos permisos, y la anterior queda revocada en el acto — sin periodo de gracia, porque se rota cuando una clave se ha filtrado. key_id tiene que ser el id de la clave con la que llamas (el que ves en el panel, no el secreto); cualquier otro responde 404, incluidas las demás claves de tu cuenta. El valor nuevo viaja una sola vez, en esa respuesta. Listar, crear y revocar otras claves sigue siendo del panel.

OperaciónQué haceScopePuertaPlanesCódigos
POST /api/v1/api-keys/{key_id}/rotateRotar la propia clave de APIapi-keys:writeEscrituraStarter, Business, Agency, Partner, Enterprise201, 400, 401, 403, 404, 429, 500
bash
curl -sS -X POST -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/api-keys/$AMAI_API_KEY_ID/rotate"

Contactos

El directorio del tenant. POST /api/v1/contacts/identify es el que usa un agente en mitad de una llamada para saber con quién habla.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/contactsListar contactoscontacts:readSiempreTodos200, 400, 401, 403, 429, 500
POST /api/v1/contactsCrear un contactocontacts:writeEscrituraTodos201, 400, 401, 403, 404, 409, 429, 500
GET /api/v1/contacts/{contact_id}Consultar un contactocontacts:readSiempreTodos200, 401, 403, 404, 429, 500
PATCH /api/v1/contacts/{contact_id}Actualizar un contactocontacts:writeEscrituraTodos200, 400, 401, 403, 404, 409, 429, 500
POST /api/v1/contacts/identifyIdentificar un contactocontacts:writeSiempreTodos200, 400, 401, 403, 429, 500
POST /api/v1/contacts/importImportar contactos en lotecontacts:writeEscrituraTodos201, 400, 401, 403, 404, 429, 500
GET /api/v1/membersListar miembros del equipomembers:readSiempreNinguno de serie200, 400, 401, 403, 404, 429, 500, 503
GET /api/v1/team/mention-listListado de personas mencionables del equipoteam:readSiempreNinguno de serie200, 401, 403, 429
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phone":"+34600111222"}' \
  "https://$AMAI_API_HOST/api/v1/contacts/identify"

Conversations

La bandeja unificada de WhatsApp: hilos, mensajes, cesión humana y los números conectados, sin entrar nunca en Meta ni manejar un token suyo. Las tres listas —hilos, mensajes y números conectados— se paginan por cursor y no por offset, porque una bandeja se reordena mientras se lee y paginar por posición se salta hilos en silencio; la condición de parada es page.has_more, que se calcula leyendo una fila de más. Toda la sección exige el interruptor CONVERSATIONS_API_ENABLED: apagado responde 404. Y POST .../messages registra la intención de enviar, no envía: quien llama al proveedor es la pasarela.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/conversationsListar conversacioneswhatsapp:readConversationsTodos200, 400, 401, 403, 404, 429, 500
GET /api/v1/conversations/{conversation_uuid}Ver una conversaciónwhatsapp:readConversationsTodos200, 400, 401, 403, 404, 429, 500
GET /api/v1/conversations/{conversation_uuid}/messagesListar los mensajes de una conversaciónwhatsapp:readConversationsTodos200, 400, 401, 403, 404, 429, 500
POST /api/v1/conversations/{conversation_uuid}/messagesResponder en una conversaciónwhatsapp:sendConversationsTodos200, 202, 400, 401, 403, 404, 409, 429, 500
POST /api/v1/conversations/{conversation_uuid}/resumeDevolver el controlwhatsapp:sendConversationsTodos200, 400, 401, 403, 404, 409, 429, 500
POST /api/v1/conversations/{conversation_uuid}/takeoverTomar el control (takeover humano)whatsapp:sendConversationsTodos200, 400, 401, 403, 404, 409, 429, 500
GET /api/v1/events/catalogCatálogo de eventoswebhooks:readConversationsTodos200, 400, 401, 403, 404, 429, 500
POST /api/v1/events/replayReenviar una entrega de webhookwebhooks:writeConversationsTodos200, 400, 401, 403, 404, 409, 429, 500
GET /api/v1/whatsapp/connectionsListar los WhatsApp conectadoswhatsapp:readConversationsTodos200, 400, 401, 403, 404, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/conversations?status=open&limit=25"

Documentos

El archivo documental de la cuenta: listar y filtrar por tipo, etiqueta, texto y rango de fechas. Las fechas son inclusivas por los dos extremos.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/documentsListar el archivo documental de la cuentadocuments:readSiempreNinguno de serie200, 400, 401, 403, 429, 500, 502, 503
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/documents?date_from=2026-07-01&date_to=2026-07-31&limit=25"

Exige que la cuenta tenga el archivo CONECTADO, no solo el plan que lo incluye. Si el plan lo incluye y la integración no está configurada, responde 503 integration_not_configured — y eso no lo arregla ni la clave ni un cambio de plan, sino tu distribuidor.


Email

Las identidades de envío de correo dadas de alta en la cuenta: desde qué direcciones puede enviar, y cuáles están verificadas. Útil para elegir remitente ANTES de llamar al envío.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/email/connectionsListar las identidades de envío de emailemail-configs:readSiempreNinguno de serie200, 400, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/email/connections"

Solo lectura, y a propósito: no devuelve ninguna credencial de la conexión (ni contraseña, ni token de OAuth). Dar de alta o revocar una identidad se hace desde el panel.


Equipo

La administración del equipo: invitaciones pendientes, plazas contratadas y ocupadas, y los roles personalizados del tenant. Se puede revocar una invitación.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/team/invitesListar invitaciones del equipomembers:readSiempreNinguno de serie200, 400, 401, 403, 429, 500
DELETE /api/v1/team/invites/{invite_id}Revocar una invitación pendienteinvites:revokeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
GET /api/v1/team/rolesListar los roles personalizados del tenantmembers:readSiempreNinguno de serie200, 401, 403, 429, 500
GET /api/v1/team/seatsConsultar las plazas de equipomembers:readSiempreNinguno de serie200, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/team/seats"

Las tres lecturas comparten el scope members:read. La revocación (DELETE /api/v1/team/invites/{invite_id}) es otra autorización — invites:revoke — y además exige PUBLIC_API_WRITE_ENABLED.


Espacio de trabajo

Lo que el panel enseña en su bandeja: recados, avisos y el listado de campañas. Es la vista de lectura del día a día.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/alertsConsultar los avisos configurados y el gasto que los disparaalerts:readSiempreTodos200, 401, 403, 429, 500
GET /api/v1/campaignsListar las campañas de la cuentacampaigns:readSiempreNinguno de serie200, 400, 401, 403, 429, 500
GET /api/v1/recadosListar la bandeja de recadosrecados:readSiempreNinguno de serie200, 400, 401, 403, 429, 500, 503
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/recados?limit=20"

Facturación

Consulta de saldo, suscripción, consumo, movimientos y facturas. Todo de LECTURA: contratar y recargar viven en «Gasto».

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/billing/addonsVer los add-ons disponibles y los contratadosbilling:readSiempreTodos200, 401, 403, 429, 500
GET /api/v1/billing/balanceConsultar el saldo del monederobilling:readSiempreTodos200, 401, 403, 429, 500
GET /api/v1/billing/concurrencyConsultar el cupo de llamadas simultáneasbilling:readSiempreTodos200, 401, 403, 429, 500
GET /api/v1/billing/invoicesListar las facturas emitidasbilling:readSiempreTodos200, 400, 401, 403, 429, 500
GET /api/v1/billing/pending-ordersListar compras de número sin completarbilling:readSiempreTodos200, 400, 401, 403, 429, 500
GET /api/v1/billing/subscriptionVer el plan contratado y su ciclo de facturaciónbilling:readSiempreTodos200, 401, 403, 429, 500
GET /api/v1/billing/transactionsListar los movimientos del monederobilling:readSiempreTodos200, 400, 401, 403, 429, 500
GET /api/v1/billing/usageConsumo del periodobilling:readSiempreTodos200, 400, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/billing/balance"

Gasto

Todo lo que mueve dinero o genera tráfico real: lanzar una llamada, despachar una campaña, recargar saldo, contratar plan o add-on, crear troncales SIP y gestionar subcuentas. Es la superficie con más condiciones de toda la API — cuatro, y hacen falta las cuatro.

OperaciónQué haceScopePuertaPlanesCódigos
POST /api/v1/agency/subaccountsCrear una subcuentaagency:writeGastoAgency, Partner, Enterprise201, 400, 401, 403, 404, 409, 429, 500, 503
PATCH /api/v1/agency/subaccounts/{subaccount_id}Activar o suspender una subcuentaagency:writeGastoAgency, Partner, Enterprise200, 400, 401, 403, 404, 409, 429, 500, 503
POST /api/v1/billing/addonsContratar un add-onbilling:writeGastoTodos200, 201, 400, 401, 403, 404, 409, 429, 500, 503
DELETE /api/v1/billing/addons/{addon_type}Cancelar un add-onbilling:writeGastoTodos200, 400, 401, 403, 404, 409, 429, 500, 503
DELETE /api/v1/billing/subscriptionCancelar el plan al final del periodobilling:writeGastoTodos200, 400, 401, 403, 404, 409, 429, 500, 503
POST /api/v1/billing/subscriptionContratar o cambiar de planbilling:writeGastoTodos200, 201, 400, 401, 403, 404, 409, 429, 500, 503
POST /api/v1/billing/topupsRecargar el monederobilling:writeGastoTodos201, 400, 401, 403, 404, 409, 429, 500, 503
POST /api/v1/calls/dialLanzar una llamada salientecalls:dialGastoTodos201, 400, 401, 402, 403, 404, 409, 429, 500, 503
POST /api/v1/campaigns/{campaign_id}/dispatchDespachar un lote de una campañacampaigns:dispatchGastoNinguno de serie200, 400, 401, 403, 404, 409, 429, 500, 503
GET /api/v1/sip-trunksListar los troncales SIP de la cuentasip-trunks:readSiempreTodos200, 401, 403, 429, 500
POST /api/v1/sip-trunksCrear un troncal SIPsip-trunks:writeGastoPAYG, Starter, Business, Agency, Partner, Enterprise201, 400, 401, 403, 404, 409, 429, 500, 503
DELETE /api/v1/sip-trunks/{trunk_id}Eliminar un troncal SIPsip-trunks:writeGastoPAYG, Starter, Business, Agency, Partner, Enterprise200, 400, 401, 403, 404, 409, 429, 500, 503
PATCH /api/v1/sip-trunks/{trunk_id}Modificar un troncal SIPsip-trunks:writeGastoPAYG, Starter, Business, Agency, Partner, Enterprise200, 400, 401, 403, 404, 409, 429, 500, 503
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"to":"+34600111222","agent_id":"<uuid>"}' \
  "https://$AMAI_API_HOST/api/v1/calls/dial"

Guarda el UUID que generes: si la petición da timeout, reintenta con el mismo o pagarás dos llamadas. Ver la sección de idempotencia de la guía de inicio.


Inbox

La bandeja de correo de la cuenta, de fuera adentro: buzones, carpetas de un buzón, mensajes de una carpeta, un mensaje, sus adjuntos y el hilo al que pertenece. Todo lectura.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/inbox/{mailbox_id}/conversations/{conversation_id}Leer un hilo completoinbox:readSiempreNinguno de serie200, 401, 403, 404, 429, 500, 501, 502
GET /api/v1/inbox/{mailbox_id}/foldersListar las carpetas de un buzón, con sus contadoresinbox:readSiempreNinguno de serie200, 401, 403, 404, 429, 500, 501, 502
GET /api/v1/inbox/{mailbox_id}/messagesListar los mensajes de un buzón compartidoinbox:readSiempreNinguno de serie200, 400, 401, 403, 404, 429, 500, 501, 502
GET /api/v1/inbox/{mailbox_id}/messages/{message_id}Leer un mensaje con su cuerpoinbox:readSiempreNinguno de serie200, 401, 403, 404, 429, 500, 501, 502
GET /api/v1/inbox/{mailbox_id}/messages/{message_id}/attachmentsListar los adjuntos de un mensajeinbox:readSiempreNinguno de serie200, 401, 403, 404, 429, 500, 501, 502
GET /api/v1/inbox/{mailbox_id}/messages/{message_id}/attachments/{attachment_id}Descargar el contenido de un adjunto (base64)inbox:readSiempreNinguno de serie200, 401, 403, 404, 413, 429, 500, 501, 502
GET /api/v1/inbox/mailboxesListar los buzones compartidos que esta clave puede leerinbox:readSiempreNinguno de serie200, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/inbox/mailboxes"

La descarga de un adjunto corta en 15 MiB con 413 attachment_too_large; por encima de ese tamaño la ficha del adjunto sigue estando en el listado, pero el binario no se sirve por esta vía.


Knowledge Base

Listar las bases de conocimiento y buscar dentro de una. Es la LECTURA; la gestión de colecciones está bajo «Base de conocimiento».

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/knowledge-basesListar las bases de conocimiento de la cuentakb:readSiempreNinguno de serie200, 400, 401, 403, 429, 500
POST /api/v1/knowledge-bases/{kb_id}/searchBuscar en una base de conocimientokb:readSiempreNinguno de serie200, 400, 401, 403, 404, 429, 500
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"horario de atención"}' \
  "https://$AMAI_API_HOST/api/v1/knowledge-bases/<kb_id>/search"

Listas

Listas de contactos: crearlas, renombrarlas y meter o sacar miembros.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/contact-listsListar las listas de contactoscontacts:readSiempreTodos200, 400, 401, 403, 429, 500
POST /api/v1/contact-listsCrear una lista de contactoscontacts:writeEscrituraTodos201, 400, 401, 403, 404, 429, 500
GET /api/v1/contact-lists/{list_id}Consultar una listacontacts:readSiempreTodos200, 401, 403, 404, 429, 500
PATCH /api/v1/contact-lists/{list_id}Renombrar o describir una listacontacts:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
DELETE /api/v1/contact-lists/{list_id}/membersQuitar contactos de una listacontacts:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
GET /api/v1/contact-lists/{list_id}/membersListar los contactos de una listacontacts:readSiempreTodos200, 400, 401, 403, 404, 429, 500
POST /api/v1/contact-lists/{list_id}/membersAñadir contactos a una listacontacts:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Clientes activos"}' \
  "https://$AMAI_API_HOST/api/v1/contact-lists"

Operación de escritura: 404 mientras PUBLIC_API_WRITE_ENABLED esté apagado.


Llamadas

El historial con desglose de coste y los agregados del periodo completo — el sustituto por API del CSV del panel — más las anotaciones sobre una llamada (miembro asignado, etiquetas).

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/call-labelsListar el catálogo de etiquetas de llamadacalls:readSiempreTodos200, 401, 403, 429, 500
GET /api/v1/callsListar llamadas con coste y agregados del periodocalls:readSiempreTodos200, 400, 401, 403, 429, 500
GET /api/v1/calls/{call_id}Ver una llamadacalls:readSiempreTodos200, 400, 401, 403, 404, 429, 500
POST /api/v1/calls/{call_id}/labelsEtiquetar una llamadacalls:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
DELETE /api/v1/calls/{call_id}/labels/{label_key}Quitar una etiqueta de una llamadacalls:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
DELETE /api/v1/calls/{call_id}/memberQuitar la asignación de una llamadacalls:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
PUT /api/v1/calls/{call_id}/memberAsignar personas del equipo a una llamadacalls:writeEscrituraTodos200, 400, 401, 403, 404, 409, 410, 429, 500
GET /api/v1/qualificationsVeredictos de cualificacióncalls:readSiempreTodos200, 400, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/calls?start_date=2026-07-01&end_date=2026-07-31&limit=50"

Guía completa, con paginación de un mes entero: /docs/calls.


Marca blanca

Dar de alta clientes con tu marca, sin ratón. El alta ya existía (POST /api/v1/agency/subaccounts, que cuelga la cuenta nueva de la tuya); esto es la otra mitad: leer y escribir cómo se ve el panel de esa cuenta —nombre, logo, colores, dominio propio— y las tres verjas que deciden si admite altas (allow_signup) y qué puede contratar (hide_plans, hide_addons). El identificador tiene que colgar de ti; cualquier otro responde 404 sin decirte si existe.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/subaccounts/{subaccount_id}Leer una cuenta del árbolsubaccounts:readSiempreAgency, Partner, Enterprise200, 401, 403, 404, 429, 500
GET /api/v1/subaccounts/{subaccount_id}/brandingLeer la marca de una cuenta del árbolbranding:readSiempreAgency, Partner, Enterprise200, 401, 403, 404, 429, 500
PATCH /api/v1/subaccounts/{subaccount_id}/brandingEditar la marca de una cuenta del árbolbranding:writeEscrituraAgency, Partner, Enterprise200, 400, 401, 403, 404, 409, 429, 500
POST /api/v1/subaccounts/{subaccount_id}/branding/verify-domainVerificar el dominio propio contra el DNSbranding:writeEscrituraAgency, Partner, Enterprise200, 400, 401, 403, 404, 429, 500
GET /api/v1/subaccounts/{subaccount_id}/packagingLeer las verjas de empaquetado de una cuenta del árbolbranding:readSiempreAgency, Partner, Enterprise200, 401, 403, 404, 429, 500
PATCH /api/v1/subaccounts/{subaccount_id}/packagingEditar las verjas de empaquetado de una cuenta del árbolbranding:writeEscrituraAgency, Partner, Enterprise200, 400, 401, 403, 404, 429, 500
bash
curl -sS -X PATCH -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_name":"Mi Marca","primary_color":"#00a86b","custom_domain":"panel.miempresa.com"}' \
  "https://$AMAI_API_HOST/api/v1/subaccounts/$AMAI_SUBACCOUNT_ID/branding"

custom_domain_verified no se puede escribir. Se gana publicando el registro TXT que devuelve la lectura (_amai-verify.<dominio>amai-verify=<account_id>) y llamando a POST …/branding/verify-domain, que lo comprueba contra el DNS. Y cambiar el dominio revoca la verificación en la misma escritura: si no, apuntar el dominio a otro sitio heredaría un sello que no se ha ganado.


Plantillas

Plantillas de email reutilizables en campañas y secuencias.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/email-templatesListar las plantillas de email de la cuentacampaigns:readSiempreNinguno de serie200, 400, 401, 403, 429, 500
POST /api/v1/email-templatesCrear una plantilla de emailcampaigns:writeEscrituraNinguno de serie201, 400, 401, 403, 404, 429, 500
GET /api/v1/email-templates/{template_id}Ver una plantilla de emailcampaigns:readSiempreNinguno de serie200, 401, 403, 404, 429, 500
PATCH /api/v1/email-templates/{template_id}Editar una plantilla de emailcampaigns:writeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Bienvenida","subject":"Hola {{first_name}}","body":"<p>Gracias por confiar en nosotros.</p>"}' \
  "https://$AMAI_API_HOST/api/v1/email-templates"

Operación de escritura: 404 mientras PUBLIC_API_WRITE_ENABLED esté apagado.


Secuencias

Secuencias de seguimiento automatizadas: crearlas y editarlas.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/sequencesListar las secuencias de la cuentacampaigns:readSiempreNinguno de serie200, 400, 401, 403, 429, 500
POST /api/v1/sequencesCrear una secuencia de emailcampaigns:writeEscrituraNinguno de serie201, 400, 401, 403, 404, 429, 500
DELETE /api/v1/sequences/{sequence_id}Archivar una secuencia de emailcampaigns:writeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
PATCH /api/v1/sequences/{sequence_id}Editar una secuencia de emailcampaigns:writeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
POST /api/v1/sequences/{sequence_id}/enrollInscribir contactos en una secuenciacampaigns:writeEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 500
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Seguimiento a 3 días"}' \
  "https://$AMAI_API_HOST/api/v1/sequences"

Operación de escritura: 404 mientras PUBLIC_API_WRITE_ENABLED esté apagado.


Telefonía

Los números del tenant y las tarifas de venta propias de la cuenta, con el catálogo de países disponibles.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/numbersListar los números del tenantnumbers:readSiempreTodos200, 400, 401, 403, 429, 500
PATCH /api/v1/numbers/{number_id}Renombrar un número del inventarionumbers:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
GET /api/v1/ratesConsultar las tarifas de salida de la cuentarates:readSiempreStarter, Business, Agency, Partner, Enterprise200, 400, 401, 403, 429, 500
GET /api/v1/rates/countriesListar el catálogo de destinos que se pueden llamarrates:readSiempreStarter, Business, Agency, Partner, Enterprise200, 401, 403, 429, 500
GET /api/v1/telephony/extensionsListar las extensiones SIP del tenantnumbers:readSiempreTodos200, 400, 401, 403, 429, 500
GET /api/v1/telephony/profilesListar los perfiles de telefonía del tenantnumbers:readSiempreTodos200, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/numbers"

/api/v1/rates devuelve tus tarifas de venta, las de tu cuenta. No expone el coste de proveedor de AMAI ni ningún multiplicador.


Utilidades

Las piezas sueltas que un flujo de agente necesita: calendario, envío de email e histórico de email y de SMS.

OperaciónQué haceScopePuertaPlanesCódigos
GET /api/v1/calendarCalendario laboral de un rango de fechascalendar:readSiempreTodos200, 400, 401, 403, 404, 429
GET /api/v1/calendar/checkComprobar día/hora laborablecalendar:readSiempreTodos200, 400, 401, 403, 404, 429
GET /api/v1/email/historyListar el histórico de emailemail:readSiempreNinguno de serie200, 400, 401, 403, 429, 500
POST /api/v1/email/sendEnviar un email desde el tenantemail:sendEscrituraNinguno de serie200, 400, 401, 403, 429, 502, 503
POST /api/v1/sms/checkVerificar destinatarios de SMS (sin enviar)sms:sendEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 503
GET /api/v1/sms/historyListar el histórico de SMSsms:readSiempreNinguno de serie200, 400, 401, 403, 429, 500
POST /api/v1/sms/sendEnviar un SMSsms:sendEscrituraNinguno de serie200, 400, 401, 403, 404, 429, 502, 503
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"cliente@ejemplo.com","subject":"Tu cita","body":"Confirmada para el martes."}' \
  "https://$AMAI_API_HOST/api/v1/email/send"

Operación de escritura: 404 mientras PUBLIC_API_WRITE_ENABLED esté apagado.


Webhooks

Tu suscripción a los eventos de la plataforma —un destino por cuenta— y el registro de cada intento de entrega. El ejemplo es la consulta, que es lo primero que se necesita: hasta ahora se entregaba a ciegas y el único sitio donde se veía si algo había llegado era la pantalla del panel.

OperaciónQué haceScopePuertaPlanesCódigos
DELETE /api/v1/webhooksDar de baja tu suscripción de webhookswebhooks:writeEscrituraTodos200, 401, 403, 404, 429, 500
GET /api/v1/webhooksConsultar tu suscripción de webhookswebhooks:readSiempreTodos200, 401, 403, 429, 500
PATCH /api/v1/webhooksCambiar el destino o los eventoswebhooks:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
POST /api/v1/webhooksDar de alta (o reemplazar) tu suscripción de webhookswebhooks:writeEscrituraTodos200, 400, 401, 403, 404, 429, 500
GET /api/v1/webhooks/deliveriesVer si tus entregas llegaronwebhooks:readSiempreTodos200, 400, 401, 403, 429, 500
bash
curl -sS -H "Authorization: Bearer $AMAI_API_KEY" \
  "https://$AMAI_API_HOST/api/v1/webhooks/deliveries?success=false&limit=20"

El secreto de firma no viaja en ninguna lectura: GET /api/v1/webhooks solo dice si lo hay. Se enseña una única vez, en el POST que lo emite. Si lo pierdes, rotate_secret emite otro — y las firmas anteriores dejan de validar.


WhatsApp

Enviar texto y plantillas, leer el histórico y consultar las plantillas aprobadas. El token de Meta lo custodia y rota AMAI: nunca lo manejas tú.

OperaciónQué haceScopePuertaPlanesCódigos
POST /api/v1/whatsapp/check¿A quién se le puede escribir, y cómo?whatsapp:sendEscrituraTodos200, 400, 401, 403, 404, 429, 503
GET /api/v1/whatsapp/messagesListar mensajes (recibir por polling)whatsapp:readSiempreTodos200, 401, 403, 404, 429, 500
POST /api/v1/whatsapp/sendEnviar un mensaje de WhatsAppwhatsapp:sendEscrituraTodos200, 400, 401, 403, 404, 422, 429, 500, 502
GET /api/v1/whatsapp/templatesListar plantillas aprobadaswhatsapp:readSiempreTodos200, 400, 401, 403, 404, 429, 500, 502
bash
curl -sS -X POST \
  -H "Authorization: Bearer $AMAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"+34600111222","type":"text","text":"Hola desde la API de AMAI"}' \
  "https://$AMAI_API_HOST/api/v1/whatsapp/send"

Guía completa, con la ventana de 24 h y los webhooks: /docs/whatsapp.