Auphere
Menú de documentación

API de Partners de Auphere · Referencia

/ v0.1

Referencia de API

Todos los endpoints de la API de Partners de Auphere, con su scope, payload y respuesta.

Autenticación

Una cabecera en cada petición. Las claves son ak_live_… (producción) o ak_test_…; ambas se comportan igual — lo que decide qué puede hacer una clave son sus scopes, no su tipo.

Cabecera
Authorization: Bearer ak_live_4f9c…

# Every call. Server-to-server only — this key must never reach a browser.
# Base URL: https://api.auphere.com
ScopeEndpoints
provisionClientes, signup de WhatsApp, administradores, estado
broadcastsPlantillas y campañas

Clientes

Provisionar un cliente
POST /v1/partners/clients                          scope: provision

{
  "external_client_ref": "<your id>",     // required
  "name": "Bodegón El Ávila",             // required
  "timezone": "America/Caracas",
  "agent":     { "placeholders": { … } },
  "connector": { "credentials": { … }, "meta": { … } }
}

→ 200 {
  "external_client_ref": "…",
  "status": "provisioned",
  "whatsapp": { "status": "not_connected", "display_phone_number": null },
  "agent": { "status": "provisioned" },   // | already_provisioned | not_configured
  "connector_connected": true
}
Leer el estado de un cliente
GET /v1/partners/clients/{external_client_ref}      scope: provision

→ 200 {
  "external_client_ref": "…",
  "name": "Bodegón El Ávila",
  "timezone": "America/Caracas",
  "status": "active",                     // provisioning | active | paused | archived
  "whatsapp_connected": true,
  "display_phone_number": "+584241234567",
  "agent_configured": true,
  "agent_version": 3,
  "agent_seed_template": "cobranza_v1",
  "admins_count": 2,
  "ready": true,
  "missing": []                           // agent | whatsapp | admins | activation
}

WhatsApp

Identificadores de Meta
GET /v1/partners/whatsapp/signup-config            scope: provision

→ 200 {
  "app_id": "…",
  "coexistence_config_id": "…",
  "cloud_api_config_id": "…",
  "graph_api_version": "v23.0"
}
Completar el signup
POST /v1/partners/clients/{ref}/whatsapp/signup     scope: provision

{
  "code": "<single-use Meta code>",       // required
  "waba_id": "<waba id>",                 // required
  "phone_number_id": "<optional>",
  "mode": "coexistence"                   // coexistence (default) | cloud_api
}

→ 201 {
  "status": "connected",
  "waba_id": "…", "phone_number_id": "…",
  "display_phone_number": "+584241234567",
  "mode": "coexistence",
  "tenant_status": "active",
  "tenant_activated": true,
  "activation_blocked_reason": null       // no_agent | operator_review
}

Administradores

Leer / reemplazar la whitelist
GET /v1/partners/clients/{ref}/admins              scope: provision
PUT /v1/partners/clients/{ref}/admins              scope: provision

{
  "admins": [
    { "phone": "+584241234567", "name": "Ana", "role": "full" }
  ]
}

→ 200 { "admin_only": true, "admins": [ … ] }

# PUT replaces the whole list. role: full (default) | readonly

Campañas

Listar plantillas aprobadas
GET /v1/partners/clients/{ref}/templates           scope: broadcasts

→ 200 { "templates": [
  { "name": "…", "language": "es", "status": "APPROVED",
    "category": "UTILITY", "components": [ … ] }
] }
Enviar una campaña
POST /v1/partners/clients/{ref}/broadcasts         scope: broadcasts

{
  "template_name": "recordatorio_pago_vencido",   // required
  "language": "es",
  "recipients": [                                 // required, 1..cap
    { "phone": "+584241234567", "variables": { "cliente": "Ana" } }
  ],
  "idempotency_key": "invoice-991"
}

→ 202 { "broadcast_id": "…", "accepted": 1, "rejected": [] }
→ 200 on idempotent replay (same body, not sent twice)
Seguir una campaña
GET /v1/partners/clients/{ref}/broadcasts/{id}     scope: broadcasts

→ 200 {
  "broadcast_id": "…", "template_name": "…", "status": "sent",
  "counts": { "delivered": 1 },
  "recipients": [ { "phone": "…", "status": "delivered", "reason": null } ]
}

Códigos de estado

CódigoSignificado
200OK, o una repetición idempotente que no repitió el efecto.
201WhatsApp conectado.
202Campaña encolada — la entrega es asíncrona.
400Entrada inválida que podemos nombrar (teléfono inválido, Meta rechazó el code).
401Clave ausente, mal formada, revocada o expirada.
403Clave válida, scope incorrecto — o partner suspendido.
404Referencia de cliente desconocida para tu cuenta de partner.
409Conflicto: WhatsApp sin conectar, o el número pertenece a otro espacio.
413Más destinatarios que tu tope por llamada.
422Semánticamente inválido: placeholder que falta, plantilla no aprobada, parámetros posicionales.
429Límite de peticiones superado.

Los errores siempre traen un detail pensado para que lo lea una persona desarrolladora — nombra el placeholder, teléfono o plantilla exacto que falla. Guárdalo en tus logs.