{
"id": "evt_01h455vb4pex5vsknk084sn02e",
"object": "event",
"type": "subscription.period_started",
"created": 1764039600,
"live_mode": true,
"data": {
"object": {
"id": "sub_01h455vb4pex5vsknk084sn02s",
"object": "subscription",
"live_mode": true,
"external_code": null,
"billing_cycle_anchor": 1764039600,
"created": 1764040287,
"customer": "cus_01h455vb4pex5vsknk084sn02p",
"payment_method_type": "card",
"installments": 1,
"current_period_start": 1764039600,
"ended": null,
"item": {
"id": "si_01h455vb4pex5vsknk084sn02i",
"object": "subscription_item",
"created": 1764040287,
"current_period_end": 1766717999,
"current_period_start": 1764039600,
"price": {
"id": "price_01h455vb4pex5vsknk084sn02q",
"object": "price",
"active": true,
"created": 1764039000,
"currency": "brl",
"product": "prod_01h455vb4pex5vsknk084sn02q",
"type": "recurring",
"interval": "month",
"interval_count": 1,
"unit_amount": 2990,
"unit_amount_decimal": "2990",
"nickname": "Plano mensal"
},
"quantity": 1,
"subscription": "sub_01h455vb4pex5vsknk084sn02s"
},
"latest_invoice": null,
"start_date": 1764039600,
"status": "active"
}
}
}Receber evento de ciclo da assinatura iniciado
Um novo ciclo de cobrança foi inserido para a assinatura, seja o primeiro ou uma renovação. Uma repetição que encontra o ciclo existente não gera outro evento.
data.object é a assinatura, no mesmo formato de GET /api/v1/subscriptions/{id}.
{
"id": "evt_01h455vb4pex5vsknk084sn02e",
"object": "event",
"type": "subscription.period_started",
"created": 1764039600,
"live_mode": true,
"data": {
"object": {
"id": "sub_01h455vb4pex5vsknk084sn02s",
"object": "subscription",
"live_mode": true,
"external_code": null,
"billing_cycle_anchor": 1764039600,
"created": 1764040287,
"customer": "cus_01h455vb4pex5vsknk084sn02p",
"payment_method_type": "card",
"installments": 1,
"current_period_start": 1764039600,
"ended": null,
"item": {
"id": "si_01h455vb4pex5vsknk084sn02i",
"object": "subscription_item",
"created": 1764040287,
"current_period_end": 1766717999,
"current_period_start": 1764039600,
"price": {
"id": "price_01h455vb4pex5vsknk084sn02q",
"object": "price",
"active": true,
"created": 1764039000,
"currency": "brl",
"product": "prod_01h455vb4pex5vsknk084sn02q",
"type": "recurring",
"interval": "month",
"interval_count": 1,
"unit_amount": 2990,
"unit_amount_decimal": "2990",
"nickname": "Plano mensal"
},
"quantity": 1,
"subscription": "sub_01h455vb4pex5vsknk084sn02s"
},
"latest_invoice": null,
"start_date": 1764039600,
"status": "active"
}
}
}Headers
O ID do evento, o mesmo evt_ que vem no corpo em id. É a sua chave de
idempotência: receber o mesmo webhook-id duas vezes significa a mesma
coisa que recebê-lo uma vez.
^evt_[0-9a-z]{26}$"evt_01h455vb4pex5vsknk084sn02e"
Timestamp Unix em segundos do instante do envio. Ele entra no conteúdo assinado, então recuse entregas com mais de 5 minutos de diferença do seu relógio: é o que impede que uma requisição capturada seja reenviada depois.
1741541400
Uma ou mais assinaturas, separadas por espaço, cada uma no formato
v1,<base64>.
A assinatura é um HMAC-SHA256 sobre {webhook-id}.{webhook-timestamp}.{corpo},
codificado em base64. A chave são os bytes do segredo do endpoint depois do
prefixo, decodificados de base64 — o segredo é publicado como
whsec_<base64> e fica visível no painel, em Configurações → Webhooks.
Compare com secure_compare, nunca com ==.
Durante as 24 horas seguintes a uma rotação de segredo o cabeçalho traz duas assinaturas, uma por segredo. Aceite a entrega se qualquer uma delas conferir, e você troca o segredo sem perder evento nenhum.
"v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4="
Body
Tipo do objeto. Sempre 'event'.
event "event"
Tipo do evento de início de ciclo da assinatura.
subscription.period_started "invoice.paid"
Indica ambiente de produção (true) ou sandbox (false).
true
O recurso a que o evento se refere, no mesmo formato em que
GET /api/v1/<recurso>/{id} o devolve. Recursos relacionados aparecem
como IDs, não aninhados.
Show child attributes
Show child attributes
Response
Responda 2xx assim que guardar o evento.

