Docs

Buscar na documentação

Guias, endpoints e eventos

Ir ao painel

Entitlements

Entitlements são as capacidades que um plano concede, o que o seu SaaS deve liberar ({"seats": 5, "api": true}, etc.). A ribbo não conhece "planos" do seu lado, só capacidades.

Consultar as capacidades de um cliente

curl "https://api.ribbo.app/v1/entitlements?external_id=cliente-123" -H "Authorization: Bearer bk_..."
# ou ?email=cliente@empresa.com

Lista as assinaturas do cliente que não estão canceladas, cada uma com os entitlements do plano, e soma em merged_entitlements as que estão active, trialing ou past_due (uma suspended aparece na lista, mas não soma):

{
  "customer_id": "cus_01J…",
  "subscriptions": [
    { "id": "sub_01J…", "status": "active", "plan_id": "plan_01J…", "interval": "month",
      "current_period_end": "2026-09-01T00:00:00Z", "entitlements": { "seats": 5, "api": true } }
  ],
  "merged_entitlements": { "seats": 5, "api": true }
}

Cliente inexistente → 200 com customer_id: null (nunca 404). Sem external_id nem email → 400.

Editar o plano reflete sozinho

Os entitlements vêm sempre do catálogo atual. Ao editar o que um plano libera no painel, a ribbo envia subscription.updated (com o mapa novo) para cada assinatura viva daquele plano, e o GET /v1/entitlements já devolve o novo conjunto. O seu app não precisa de script de migração.

🔑 A regra de ouro

No webhook, o campo entitlements vem cheio mesmo quando a assinatura está suspended/past_due/canceled. Decida o acesso pelo status, nunca pela presença de entitlements, senão você re-libera acesso a um inadimplente. Ver Webhooks.

O merged_entitlements acima já segue o status (só soma active, trialing e past_due) e serve para reconciliar quando o seu app perdeu um webhook.