← Documentation

OPENAPI 3.1

Référence API

La spécification versionnée est la source de cette référence.

Télécharger OpenAPI ↗Collection Postman
MéthodeEndpointRôle
GET/authorizeCreate a 90-second login session
POST/authorize/activateActivate before opening WhatsApp
GET/authorize/statusPoll every two seconds using the original session
POST/authorize/sandboxSimulate an inbound message for TEST clients only
POST/tokenExchange one code exactly once; validates client, redirect and PKCE
POST/internal/verifySMSV HMAC proof; loopback only, never publicly proxied
GET/.well-known/jwks.jsonActive and previous public RSA keys
GET/.well-known/oauth-authorization-serverOAuth authorization server metadata
GET/healthzPostgreSQL and Redis health
POST/manage/loginRedeem tenant invitation key for one-hour session
POST/manage/logoutRevoke the current dashboard session
GET/manage/overviewOwn clients and 50 most recent redacted events
POST/manage/clientsCreate client; confidential secret shown once
PATCH/manage/clients/{id}Update exact redirect allowlist and activation
POST/manage/clients/{id}/rotateReplace client secret immediately

Exemple d’échange

POST /token
Content-Type: application/json

{
  "grant_type": "authorization_code",
  "client_id": "pk_test_...",
  "client_secret": "secret_serveur",
  "code": "CODE_RECU",
  "code_verifier": "VERIFICATEUR_CONSERVE",
  "redirect_uri": "http://localhost:3000/auth/callback"
}

Le secret est absent pour un client public. La réponse contient token, un alias access_token, expires_in, subject, issued_at et profile. Validez le JWT côté serveur avant de faire confiance au profil.

Cookies et appels navigateur

Le cookie de session est HttpOnly, SameSite=Lax et Secure en production. Les mutations du navigateur exigent une origine identique à celle du service. Le polling se fait toutes les deux secondes. Les réponses d’authentification ne sont pas mises en cache.

Contrat SMSV → Auth

L’appel interne signe les octets JSON exacts avec HMAC SHA-256 dans X-SMSV-Signature. Le corps inclut loginKeyId, phoneE164, displayName optionnel, messageId, timestamp en millisecondes, receiverPhoneId et matchingWords. Les deux derniers champs lient la preuve au destinataire prévu et au message affiché.

Erreurs

Consultez les codes et pistes de résolution. Le code OAuth est dans error ; le diagnostic précis dans error_code.