Documentação

Autenticação

Toda requisição leva a chave de API no header Authorization como bearer. As chaves começam com zp_ e têm 256 bits de entropia; guardamos só o hash SHA-256 delas, então um banco vazado não vaza chaves.

Authorization: Bearer zp_...
  • Chave ausente responde 401. Chave desconhecida ou revogada também, com o mesmo corpo para as duas: a API não confirma quais chaves existem.
  • Conta sem assinatura ativa responde 402 com o código subscription_required. Não há período grátis: a conta assina pelo menos um número para abrir o console. Os números continuam conectados; assinar libera na chamada seguinte.
  • Revogar uma chave no console vale na requisição seguinte. Chave não tem escopo: uma chave abre a conta inteira, então mantenha uma por ambiente e rotacione criando a nova antes.

Erros

Toda resposta que não é 2xx é um objeto com o campo error, que carrega um código estável, uma mensagem em inglês e, quando ajuda, details. Ramifique pelo código, não pela mensagem.

{
  "error": {
    "code": "validation_failed",
    "message": "The request body does not match the schema.",
    "details": { "path": "message.text", "expected": "string", "got": "undefined" },
    "docs": "https://zaiped.com/developers/docs"
  }
}
  • 400: JSON inválido, corpo que não casa com o schema da rota (validation_failed, com o caminho), uma regra que a API confere antes da Meta (recipient_invalid, meta_window_closed) ou uma recusa da Meta traduzida num código meta_ (meta_account_blocked, meta_unknown).
  • 401 e 402: autenticação e direito de uso, como acima.
  • 404: a rota não existe, ou o id é de outra conta (nunca distinguimos os dois).
  • 429: um orçamento da Zaiped, com Retry-After dizendo quanto esperar, ou um limite de taxa da Meta (meta_rate_limited, meta_spam_rate_limited, meta_user_frequency_cap, meta_pair_rate_limited), sem o header.
  • 500: falhamos. Retente com backoff.

Limites de taxa

Por conta: 600 requisições por minuto, mais um orçamento de envio de 1.000 mensagens por hora e 5.000 por dia. A Meta aplica os limites dela por número por cima; eles voltam como 429 com um dos quatro códigos meta_ de taxa, sem Retry-After. O evento de teste de webhook tem orçamento próprio: 30 por hora.