Pular para o conteúdo

Receber a mensagem de um provedor

POST
/in/{token}

Onde o provedor externo (Mercado Pago, Stripe, Asaas) entrega os webhooks dele. Você não chama esta URL: você a cola no painel do provedor. Ela é anônima, porque quem autentica é o token no caminho e a assinatura do provedor, e fica fora de /v1 porque não pode mudar quando a API ganhar uma versão nova: trocá-la obrigaria a recadastrar cada provedor.

O contrato de status existe para não fazer o provedor retentar à toa, porque gateways desativam webhooks que falham demais. Por isso quota esgotada e fonte pausada respondem 202: a mensagem fica gravada e não é repassada, e o aviso vai para você, e não para o provedor, que não tem como resolver.

O corpo é lido cru, até 256 KB, e repassado sem alteração, com o Content-Type original.

O corpo do provedor, como ele o enviou: JSON, form-urlencoded ou o que o provedor usar.

object
Exemplogerado
{}

Aceita. deliveries é quantos destinos vão receber, e é zero quando a fonte está pausada ou a quota do plano acabou. Quando o provedor reenvia um evento que já chegou, a resposta é a da mensagem original, e nada novo é criado.

Tipo de mídiaapplication/json
object
id
obrigatório
string
deliveries
obrigatório
integer | string formato: int32
/^-?(?:0|[1-9]\d*)$/
Exemplo
{
"id": "in_01JB8Z0M5V3H7Q2KX9WRC4D6TN",
"deliveries": 1
}

A assinatura do provedor não confere. A tentativa fica registrada, sem o corpo.

Token desconhecido. A resposta é a mesma de uma rota que não existe, para não revelar quais tokens existem.

O corpo passa de 256 KB.

Limite de requisições por segundo da fonte. É um balde separado do da API: uma rajada do provedor não consome o limite das suas chamadas.

Retry-After
integer

Segundos até a próxima janela.

O provedor da fonte exige um segredo de verificação, e a fonte ainda não tem um.

Tipo de mídiaapplication/problem+json
object
type
null | string
title
null | string
status
null | integer | string formato: int32
/^-?(?:0|[1-9]\d*)$/
detail
null | string
instance
null | string
Exemplogerado
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}