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.
Authorization: Bearer ak_live_4f9c…
# Every call. Server-to-server only — this key must never reach a browser.
# Base URL: https://api.auphere.com| Scope | Endpoints |
|---|---|
provision | Clientes, signup de WhatsApp, administradores, estado |
broadcasts | Plantillas y campañas |
Clientes
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
}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
}GET /v1/partners/whatsapp/signup-config scope: provision
→ 200 {
"app_id": "…",
"coexistence_config_id": "…",
"cloud_api_config_id": "…",
"graph_api_version": "v23.0"
}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
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) | readonlyCampañas
GET /v1/partners/clients/{ref}/templates scope: broadcasts
→ 200 { "templates": [
{ "name": "…", "language": "es", "status": "APPROVED",
"category": "UTILITY", "components": [ … ] }
] }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)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ódigo | Significado |
|---|---|
200 | OK, o una repetición idempotente que no repitió el efecto. |
201 | WhatsApp conectado. |
202 | Campaña encolada — la entrega es asíncrona. |
400 | Entrada inválida que podemos nombrar (teléfono inválido, Meta rechazó el code). |
401 | Clave ausente, mal formada, revocada o expirada. |
403 | Clave válida, scope incorrecto — o partner suspendido. |
404 | Referencia de cliente desconocida para tu cuenta de partner. |
409 | Conflicto: WhatsApp sin conectar, o el número pertenece a otro espacio. |
413 | Más destinatarios que tu tope por llamada. |
422 | Semánticamente inválido: placeholder que falta, plantilla no aprobada, parámetros posicionales. |
429 | Lí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.