Vienes de wuzapi
whatsapi corre wuzapi por debajo, así que nada de lo que ya sabes está mal. Solo dejó de ser la superficie que tocas. Aquí está la tabla de traducción.
Mismo gateway, contrato distinto
| POST /send/text {Phone, Body} | POST /v1/messages {to, text} |
| POST /session/qr | POST /v1/numbers/:id/pair {mode: "qr"} |
| POST /session/pairphone | POST /v1/numbers/:id/pair {mode: "code", phone} |
| GET /user/check | GET /v1/numbers/check/:phone |
| POST /send/image|video|audio|document | POST /v1/messages/image|video|audio|document |
| webhooks: 13 raw PascalCase events | PUT /v1/webhooks: 7 eventos normalizados y firmados |
| token header per instance | Authorization: Bearer wa_… (una clave, todos los números) |
Qué dejas de hacer
Los ids de sesión por teléfono, el header token y la carga útil en PascalCase desaparecen. La clave es dueña de la cuenta, y una cuenta con un solo número ni siquiera manda from. El 500 de already connected, que en wuzapi significaba tres cosas distintas, ya viene resuelto: conectado es un status, el cooldown es un 429 con Retry-After, y cualquier otra cosa es un 502.
antes
POST wa.whatsapi.sh:8001/send/text
token: <instance token>
{ "Phone": "5511988887777", "Body": "hi" }después
POST api.whatsapi.sh/v1/messages
Authorization: Bearer wa_…
{ "to": "+5511988887777", "text": "hi" }