Pular para o conteúdo principal

Assinaturas

Gerenciamento de assinaturas (Subscriptions) para cobrança recorrente.

Endpoints

MétodoEndpointDescriçãoPermissão
POST/billing/api/v1/subscriptionsCriar assinaturaBILLING_SUBSCRIPTIONS_CREATE
GET/billing/api/v1/subscriptionsListar assinaturasBILLING_SUBSCRIPTIONS_READ
GET/billing/api/v1/subscriptions/:idObter assinatura por IDBILLING_SUBSCRIPTIONS_READ
PATCH/billing/api/v1/subscriptions/:idAtualizar assinaturaBILLING_SUBSCRIPTIONS_UPDATE
POST/billing/api/v1/subscriptions/:id/cancelCancelar assinaturaBILLING_SUBSCRIPTIONS_CANCEL
POST/billing/api/v1/subscriptions/:id/pausePausar assinaturaBILLING_SUBSCRIPTIONS_UPDATE
POST/billing/api/v1/subscriptions/:id/resumeRetomar assinaturaBILLING_SUBSCRIPTIONS_UPDATE

Atributos

CampoTipoDescrição
billingAccountIdstring (UUID)ID da conta de faturamento
planIdstring (UUID)ID do plano de assinatura
planNamestringNome do plano (somente leitura)
statusenumStatus da assinatura
quantitynumberQuantidade de licenças/unidades
currentPeriodStartdatetimeInício do período atual
currentPeriodEnddatetimeFim do período atual
trialStartdatetimeInício do período de teste
trialEnddatetimeFim do período de teste
canceledAtdatetimeData do cancelamento
cancelAtPeriodEndbooleanSe cancela no fim do período
pausedAtdatetimeData da pausa
unitPricenumberPreço por unidade
currencystringMoeda
createdAtdatetimeData de criação
updatedAtdatetimeData da última atualização

Status da Assinatura

StatusDescrição
TRIALEm período de teste gratuito
ACTIVEAssinatura ativa e cobrando normalmente
PAUSEDAssinatura pausada temporariamente
CANCELEDAssinatura cancelada
EXPIREDAssinatura expirada (não renovada)

Criar Assinatura

POST /api/v1/subscriptions

Cria uma nova assinatura para uma conta de faturamento.

Atributos

CampoTipoObrigatórioDescrição
billingAccountIdstringSimID da conta de faturamento
planIdstringSimID do plano de assinatura
quantitynumberNãoQuantidade (padrão: 1)
startDatedatetimeNãoData de início (padrão: agora)
skipTrialbooleanNãoPular período de teste
curl -X POST 'https://billing.stg.catalisa.app/billing/api/v1/subscriptions' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "subscriptions",
"attributes": {
"billingAccountId": "550e8400-e29b-41d4-a716-446655440010",
"planId": "550e8400-e29b-41d4-a716-446655440020",
"quantity": 5
}
}
}'

Response (201 Created)

{
"data": {
"type": "subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440040",
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040"
},
"attributes": {
"billingAccountId": "550e8400-e29b-41d4-a716-446655440010",
"planId": "550e8400-e29b-41d4-a716-446655440020",
"planName": "Plano Pro",
"status": "TRIAL",
"quantity": 5,
"currentPeriodStart": "2024-01-15T10:30:00Z",
"currentPeriodEnd": "2024-02-15T10:30:00Z",
"trialStart": "2024-01-15T10:30:00Z",
"trialEnd": "2024-01-29T10:30:00Z",
"cancelAtPeriodEnd": false,
"unitPrice": 299.90,
"currency": "BRL",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
},
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040"
}
}

Listar Assinaturas

GET /api/v1/subscriptions

Lista todas as assinaturas com suporte a paginação e filtros.

Query Parameters

ParâmetroTipoDescrição
page[number]integerNúmero da página
page[size]integerItens por página
filter[billingAccountId]UUIDFiltrar por conta
filter[planId]UUIDFiltrar por plano
filter[status]enumFiltrar por status
curl 'https://billing.stg.catalisa.app/billing/api/v1/subscriptions?filter[status]=ACTIVE&filter[billingAccountId]=550e8400-e29b-41d4-a716-446655440010' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": [
{
"type": "subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440040",
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040"
},
"attributes": {
"billingAccountId": "550e8400-e29b-41d4-a716-446655440010",
"planId": "550e8400-e29b-41d4-a716-446655440020",
"planName": "Plano Pro",
"status": "ACTIVE",
"quantity": 5,
"currentPeriodStart": "2024-02-15T10:30:00Z",
"currentPeriodEnd": "2024-03-15T10:30:00Z",
"cancelAtPeriodEnd": false,
"unitPrice": 299.90,
"currency": "BRL",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-02-15T10:30:00Z"
}
}
],
"meta": {
"totalItems": 3,
"totalPages": 1,
"currentPage": 1,
"itemsPerPage": 20
},
"links": {
"self": "/api/v1/subscriptions?page[number]=1&page[size]=20"
}
}

Obter Assinatura por ID

GET /api/v1/subscriptions/:id

Obtém os detalhes de uma assinatura específica.

curl 'https://billing.stg.catalisa.app/billing/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": {
"type": "subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440040",
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040"
},
"attributes": {
"billingAccountId": "550e8400-e29b-41d4-a716-446655440010",
"planId": "550e8400-e29b-41d4-a716-446655440020",
"planName": "Plano Pro",
"status": "ACTIVE",
"quantity": 5,
"currentPeriodStart": "2024-02-15T10:30:00Z",
"currentPeriodEnd": "2024-03-15T10:30:00Z",
"cancelAtPeriodEnd": false,
"unitPrice": 299.90,
"currency": "BRL",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-02-15T10:30:00Z"
}
},
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040"
}
}

Atualizar Assinatura

PATCH /api/v1/subscriptions/:id

Atualiza a quantidade de licenças/unidades de uma assinatura.

Atributos Atualizáveis

CampoTipoDescrição
quantitynumberNova quantidade
curl -X PATCH 'https://billing.stg.catalisa.app/billing/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440040",
"attributes": {
"quantity": 10
}
}
}'

Response (200 OK)

{
"data": {
"type": "subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440040",
"attributes": {
"billingAccountId": "550e8400-e29b-41d4-a716-446655440010",
"planId": "550e8400-e29b-41d4-a716-446655440020",
"planName": "Plano Pro",
"status": "ACTIVE",
"quantity": 10,
"currentPeriodStart": "2024-02-15T10:30:00Z",
"currentPeriodEnd": "2024-03-15T10:30:00Z",
"unitPrice": 299.90,
"currency": "BRL",
"updatedAt": "2024-02-20T14:00:00Z"
}
}
}

Cancelar Assinatura

POST /api/v1/subscriptions/:id/cancel

Cancela uma assinatura. Pode cancelar imediatamente ou ao fim do período.

Query Parameters

ParâmetroTipoDescrição
cancelAtPeriodEndbooleanSe true, cancela ao fim do período atual
# Cancelar ao fim do período
curl -X POST 'https://billing.stg.catalisa.app/billing/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040/cancel?cancelAtPeriodEnd=true' \
-H 'Authorization: Bearer SEU_TOKEN'
# Cancelar imediatamente
curl -X POST 'https://billing.stg.catalisa.app/billing/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040/cancel' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": {
"type": "subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440040",
"attributes": {
"billingAccountId": "550e8400-e29b-41d4-a716-446655440010",
"planId": "550e8400-e29b-41d4-a716-446655440020",
"planName": "Plano Pro",
"status": "ACTIVE",
"quantity": 5,
"currentPeriodStart": "2024-02-15T10:30:00Z",
"currentPeriodEnd": "2024-03-15T10:30:00Z",
"canceledAt": "2024-02-20T15:00:00Z",
"cancelAtPeriodEnd": true,
"unitPrice": 299.90,
"currency": "BRL",
"updatedAt": "2024-02-20T15:00:00Z"
}
}
}

Pausar Assinatura

POST /api/v1/subscriptions/:id/pause

Pausa uma assinatura temporariamente. Não gera cobranças enquanto pausada.

curl -X POST 'https://billing.stg.catalisa.app/billing/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040/pause' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": {
"type": "subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440040",
"attributes": {
"billingAccountId": "550e8400-e29b-41d4-a716-446655440010",
"planId": "550e8400-e29b-41d4-a716-446655440020",
"planName": "Plano Pro",
"status": "PAUSED",
"quantity": 5,
"currentPeriodStart": "2024-02-15T10:30:00Z",
"currentPeriodEnd": "2024-03-15T10:30:00Z",
"pausedAt": "2024-02-20T16:00:00Z",
"unitPrice": 299.90,
"currency": "BRL",
"updatedAt": "2024-02-20T16:00:00Z"
}
}
}

Retomar Assinatura

POST /api/v1/subscriptions/:id/resume

Retoma uma assinatura que estava pausada.

curl -X POST 'https://billing.stg.catalisa.app/billing/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440040/resume' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": {
"type": "subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440040",
"attributes": {
"billingAccountId": "550e8400-e29b-41d4-a716-446655440010",
"planId": "550e8400-e29b-41d4-a716-446655440020",
"planName": "Plano Pro",
"status": "ACTIVE",
"quantity": 5,
"currentPeriodStart": "2024-02-20T16:30:00Z",
"currentPeriodEnd": "2024-03-20T16:30:00Z",
"pausedAt": null,
"unitPrice": 299.90,
"currency": "BRL",
"updatedAt": "2024-02-20T16:30:00Z"
}
}
}

Ciclo de Vida da Assinatura

Estados da Assinatura

TRIAL (Período de Teste)

  • Período de teste gratuito (opcional)
  • Duração definida em trialDays do plano
  • Não gera cobranças
  • Transições:
    • ACTIVE: Fim do período de teste (automático)

ACTIVE (Ativa)

  • Assinatura ativa e gerando cobranças recorrentes
  • Gera faturas automaticamente ao fim de cada período
  • Transições:
    • PAUSED: Chamada de pause() (pausar temporariamente)
    • CANCELED: Chamada de cancel() (cancelar definitivamente)

PAUSED (Pausada)

  • Assinatura pausada temporariamente
  • Não gera cobranças enquanto pausada
  • Pode retomar a qualquer momento
  • Transições:
    • ACTIVE: Chamada de resume() (retomar assinatura)

CANCELED (Cancelada)

  • Assinatura cancelada definitivamente
  • Estado final
  • Não permite mais transições
  • Pode ser cancelada imediatamente ou ao fim do período atual

EXPIRED (Expirada)

  • Assinatura expirou por falta de renovação
  • Estado final
  • Não permite mais transições

Erros Comuns

CódigoErroDescrição
400VALIDATIONDados inválidos
404NOT_FOUNDAssinatura, conta ou plano não encontrado
409CONFLICTConta já possui assinatura do mesmo plano
409CONFLICTAssinatura não está ativa (para pausar/cancelar)
409CONFLICTAssinatura não está pausada (para retomar)
409CONFLICTAssinatura já foi cancelada