CRPRO HubEntrar no painel

Assinatura

GET
/api/v1/subscription

Consulta plano, status, quotas e uso

Responde 404 se a organização nunca teve entitlements provisionados (não deveria acontecer em uso normal). portal_available diz se já existe cliente de cobrança criado — quando true, POST /api/v1/subscription/portal abre o autoatendimento.

Autenticação
Sessão do painel, Chave de API
Escopo
billing:read
Limite
120 requisições por minuto por organização e credencial
Requisição
curl https://crprohub.com/api/v1/subscription \
  -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
Resposta
{
  "data": {
    "subscription": {
      "subscription_id": "f5a6b7c8-9d0e-4f1a-2b3c-4d5e6f7a8b9c",
      "plan": "pro",
      "status": "active",
      "extra_channels": 2,
      "amount_cents": 20600,
      "next_due_date": "2026-09-01",
      "portal_available": true,
      "usage": {
        "channels": { "used": 3, "limit": 7 },
        "webhooks": { "used": 1, "limit": 5 }
      }
    }
  }
}
POST
/api/v1/subscription/checkout
Idempotency-Key obrigatória

Abre o checkout da Stripe; a quota só libera após o pagamento

O header Idempotency-Key é obrigatório, para evitar cobrança duplicada em caso de retentativa. Só o proprietário da organização (role owner) autenticado por sessão consegue chamar esta rota — mesmo uma chave de API com escopo billing:read responde 403 OWNER_REQUIRED. Devolve a URL de uma sessão do Stripe Checkout: redirecione o cliente para lá. O pagamento é por cartão de crédito, e a quota do plano só é liberada quando o pagamento é confirmado, via webhook de cobrança — não nesta resposta.

Autenticação
Sessão do painel
Escopo
billing:read
Limite
120 requisições por minuto por organização e credencial

Corpo

ParâmetroTipoObrigatórioDescrição
planenumSimstarter ou pro.
Requisição
curl -X POST https://crprohub.com/api/v1/subscription/checkout \
  -H "Cookie: <cookie de sessao do painel, dono da organizacao>" \
  -H "Idempotency-Key: 7c1e9a2d-4b3f-4e5a-8d6c-9f0a1b2c3d4e" \
  -H "Content-Type: application/json" \
  -d '{"plan":"pro"}'
Resposta
{
  "data": {
    "checkout_url": "https://checkout.stripe.com/c/pay/EXEMPLO123"
  }
}
POST
/api/v1/subscription/portal

Abre o portal de cobrança para autoatendimento

Devolve uma URL de uso único do Customer Portal da Stripe, onde o cliente troca o cartão, consulta as faturas e cancela a assinatura. Só o proprietário da organização (role owner) autenticado por sessão consegue chamar esta rota — mesmo uma chave de API com escopo billing:read responde 403 OWNER_REQUIRED. Responde 404 CUSTOMER_NOT_FOUND se a organização nunca iniciou uma cobrança. A URL expira sozinha; gere uma nova a cada acesso.

Autenticação
Sessão do painel
Escopo
billing:read
Limite
120 requisições por minuto por organização e credencial
Requisição
curl -X POST https://crprohub.com/api/v1/subscription/portal \
  -H "Cookie: <cookie de sessao do painel, dono da organizacao>"
Resposta
{
  "data": {
    "portal_url": "https://billing.stripe.com/p/session/EXEMPLO123"
  }
}
POST
/api/v1/subscription/addons
Idempotency-Key obrigatória

Define quantas conexões adicionais a assinatura tem

O header Idempotency-Key é obrigatório, para evitar cobrança duplicada em caso de retentativa. Só o proprietário da organização (role owner) autenticado por sessão consegue chamar esta rota — mesmo uma chave de API com escopo billing:read responde 403 OWNER_REQUIRED. Exige uma assinatura paga ativa; sem isso responde 402 ACTIVE_SUBSCRIPTION_REQUIRED. extra_channels é o total desejado, não o incremento — enviar o mesmo número duas vezes não cobra duas vezes. A Stripe cobra a proporção dos dias restantes do ciclo automaticamente, e a quota só muda quando a alteração é confirmada pelo webhook de cobrança.

Autenticação
Sessão do painel
Escopo
billing:read
Limite
120 requisições por minuto por organização e credencial

Corpo

ParâmetroTipoObrigatórioDescrição
extra_channelsnúmero inteiroSimTotal de conexões adicionais que a assinatura deve passar a ter, de 0 a 100.
Requisição
curl -X POST https://crprohub.com/api/v1/subscription/addons \
  -H "Cookie: <cookie de sessao do painel, dono da organizacao>" \
  -H "Idempotency-Key: 9d2f0b3e-5c4a-4f6b-9e7d-0a1b2c3d4e5f" \
  -H "Content-Type: application/json" \
  -d '{"extra_channels":2}'
Resposta
{
  "data": {
    "extra_channels_requested": 2,
    "monthly_amount_after_cents": 20600,
    "warning": "A quota e atualizada assim que a Stripe confirmar a alteracao."
  }
}
POST
/api/v1/subscription/addons/preview

Simula o valor proporcional de alterar as conexões adicionais

Não cobra nem altera nada — pergunta à Stripe quanto sairia a alteração agora. Só o proprietário da organização (role owner) autenticado por sessão consegue chamar esta rota — mesmo uma chave de API com escopo billing:read responde 403 OWNER_REQUIRED. Exige uma assinatura paga ativa; sem isso responde 402 ACTIVE_SUBSCRIPTION_REQUIRED. proration_amount_cents é o valor que a próxima fatura cobrará pela mudança no meio do ciclo.

Autenticação
Sessão do painel
Escopo
billing:read
Limite
120 requisições por minuto por organização e credencial

Corpo

ParâmetroTipoObrigatórioDescrição
extra_channelsnúmero inteiroSimTotal de conexões adicionais a simular, de 0 a 100.
Requisição
curl -X POST https://crprohub.com/api/v1/subscription/addons/preview \
  -H "Cookie: <cookie de sessao do painel, dono da organizacao>" \
  -H "Content-Type: application/json" \
  -d '{"extra_channels":2}'
Resposta
{
  "data": {
    "preview": {
      "current_extra_channels": 0,
      "extra_channels_after": 2,
      "proration_amount_cents": 3267,
      "monthly_amount_after_cents": 20600,
      "limits_after": { "channels": 7, "webhooks": 21 }
    }
  }
}