Pular para o conteúdo principal

Planos de Assinatura

Gerenciamento de planos de assinatura (Subscription Plans) para configuração de cobrança recorrente.

Endpoints

MétodoEndpointDescriçãoPermissão
POST/billing/api/v1/subscription-plansCriar planoBILLING_PLANS_CREATE
GET/billing/api/v1/subscription-plansListar planosBILLING_PLANS_READ
GET/billing/api/v1/subscription-plans/:idObter plano por IDBILLING_PLANS_READ
PATCH/billing/api/v1/subscription-plans/:idAtualizar planoBILLING_PLANS_UPDATE
DELETE/billing/api/v1/subscription-plans/:idExcluir planoBILLING_PLANS_DELETE
POST/billing/api/v1/subscription-plans/:id/itemsAdicionar item ao planoBILLING_PLANS_UPDATE
DELETE/billing/api/v1/subscription-plans/:planId/items/:itemIdRemover item do planoBILLING_PLANS_UPDATE

Atributos do Plano

CampoTipoDescrição
namestringNome do plano
descriptionstringDescrição do plano
billingIntervalenumIntervalo de cobrança
billingCycleTypeenumTipo do ciclo de cobrança
basePricenumberPreço base do plano
currencystringMoeda
trialDaysnumberDias de período de teste
isActivebooleanSe o plano está ativo
itemsarrayItens incluídos no plano
createdAtdatetimeData de criação
updatedAtdatetimeData da última atualização

Intervalos de Cobrança (billingInterval)

ValorDescrição
DAILYCobrança diária
WEEKLYCobrança semanal
MONTHLYCobrança mensal
QUARTERLYCobrança trimestral
YEARLYCobrança anual

Tipos de Ciclo de Cobrança (billingCycleType)

ValorDescrição
CALENDAR_ALIGNEDAlinhado ao calendário (ex: dia 1 de cada mês)
ANNIVERSARYBaseado na data de início da assinatura

Estrutura do Item do Plano

CampoTipoDescrição
productIdstring (UUID)ID do produto de cobrança
productNamestringNome do produto (somente leitura)
quantitynumberQuantidade incluída
priceOverridenumberPreço customizado (opcional)
includedUnitsnumberUnidades incluídas no plano

Criar Plano de Assinatura

POST /api/v1/subscription-plans

Cria um novo plano de assinatura.

Atributos

CampoTipoObrigatórioDescrição
namestringSimNome do plano
descriptionstringNãoDescrição
billingIntervalenumSimIntervalo de cobrança
billingCycleTypeenumSimTipo do ciclo
basePricenumberSimPreço base
currencystringNãoMoeda (padrão: config da org)
trialDaysnumberNãoDias de teste (padrão: 0)
isActivebooleanNãoSe está ativo (padrão: true)
curl -X POST 'https://billing.stg.catalisa.app/billing/api/v1/subscription-plans' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "subscription-plans",
"attributes": {
"name": "Plano Pro",
"description": "Acesso completo a todos os recursos da plataforma",
"billingInterval": "MONTHLY",
"billingCycleType": "ANNIVERSARY",
"basePrice": 299.90,
"currency": "BRL",
"trialDays": 14
}
}
}'

Response (201 Created)

{
"data": {
"type": "subscription-plans",
"id": "550e8400-e29b-41d4-a716-446655440020",
"links": {
"self": "/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020"
},
"attributes": {
"name": "Plano Pro",
"description": "Acesso completo a todos os recursos da plataforma",
"billingInterval": "MONTHLY",
"billingCycleType": "ANNIVERSARY",
"basePrice": 299.90,
"currency": "BRL",
"trialDays": 14,
"isActive": true,
"items": [],
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
},
"links": {
"self": "/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020"
}
}

Listar Planos de Assinatura

GET /api/v1/subscription-plans

Lista todos os planos de assinatura 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[isActive]booleanFiltrar por status ativo
filter[billingInterval]enumFiltrar por intervalo
curl 'https://billing.stg.catalisa.app/billing/api/v1/subscription-plans?filter[isActive]=true&filter[billingInterval]=MONTHLY' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": [
{
"type": "subscription-plans",
"id": "550e8400-e29b-41d4-a716-446655440020",
"links": {
"self": "/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020"
},
"attributes": {
"name": "Plano Pro",
"description": "Acesso completo a todos os recursos da plataforma",
"billingInterval": "MONTHLY",
"billingCycleType": "ANNIVERSARY",
"basePrice": 299.90,
"currency": "BRL",
"trialDays": 14,
"isActive": true,
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
},
{
"type": "subscription-plans",
"id": "550e8400-e29b-41d4-a716-446655440021",
"links": {
"self": "/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440021"
},
"attributes": {
"name": "Plano Básico",
"description": "Recursos essenciais para começar",
"billingInterval": "MONTHLY",
"billingCycleType": "ANNIVERSARY",
"basePrice": 99.90,
"currency": "BRL",
"trialDays": 7,
"isActive": true,
"createdAt": "2024-01-10T10:00:00Z",
"updatedAt": "2024-01-10T10:00:00Z"
}
}
],
"meta": {
"totalItems": 5,
"totalPages": 1,
"currentPage": 1,
"itemsPerPage": 20
},
"links": {
"self": "/api/v1/subscription-plans?page[number]=1&page[size]=20"
}
}

Obter Plano por ID

GET /api/v1/subscription-plans/:id

Obtém os detalhes de um plano de assinatura específico.

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

Response (200 OK)

{
"data": {
"type": "subscription-plans",
"id": "550e8400-e29b-41d4-a716-446655440020",
"links": {
"self": "/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020"
},
"attributes": {
"name": "Plano Pro",
"description": "Acesso completo a todos os recursos da plataforma",
"billingInterval": "MONTHLY",
"billingCycleType": "ANNIVERSARY",
"basePrice": 299.90,
"currency": "BRL",
"trialDays": 14,
"isActive": true,
"items": [
{
"productId": "550e8400-e29b-41d4-a716-446655440030",
"productName": "API Calls",
"quantity": 1,
"includedUnits": 10000
},
{
"productId": "550e8400-e29b-41d4-a716-446655440031",
"productName": "Storage",
"quantity": 1,
"includedUnits": 100
}
],
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
},
"links": {
"self": "/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020"
}
}

Atualizar Plano

PATCH /api/v1/subscription-plans/:id

Atualiza os dados de um plano de assinatura.

Atributos Atualizáveis

CampoTipoDescrição
namestringNome do plano
descriptionstringDescrição
billingIntervalenumIntervalo de cobrança
billingCycleTypeenumTipo do ciclo
basePricenumberPreço base
trialDaysnumberDias de teste
isActivebooleanSe está ativo
curl -X PATCH 'https://billing.stg.catalisa.app/billing/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "subscription-plans",
"id": "550e8400-e29b-41d4-a716-446655440020",
"attributes": {
"basePrice": 349.90,
"trialDays": 30
}
}
}'

Response (200 OK)

{
"data": {
"type": "subscription-plans",
"id": "550e8400-e29b-41d4-a716-446655440020",
"links": {
"self": "/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020"
},
"attributes": {
"name": "Plano Pro",
"description": "Acesso completo a todos os recursos da plataforma",
"billingInterval": "MONTHLY",
"billingCycleType": "ANNIVERSARY",
"basePrice": 349.90,
"currency": "BRL",
"trialDays": 30,
"isActive": true,
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T11:00:00Z"
}
},
"links": {
"self": "/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020"
}
}

Excluir Plano

DELETE /api/v1/subscription-plans/:id

Remove um plano de assinatura. O plano não pode ter assinaturas ativas.

curl -X DELETE 'https://billing.stg.catalisa.app/billing/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (204 No Content)

Sem corpo de resposta.


Adicionar Item ao Plano

POST /api/v1/subscription-plans/:id/items

Adiciona um produto ao plano de assinatura.

Atributos

CampoTipoObrigatórioDescrição
productIdstringSimID do produto de cobrança
quantitynumberNãoQuantidade (padrão: 1)
priceOverridenumberNãoPreço customizado
includedUnitsnumberNãoUnidades incluídas
curl -X POST 'https://billing.stg.catalisa.app/billing/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020/items' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "subscription-plan-items",
"attributes": {
"productId": "550e8400-e29b-41d4-a716-446655440030",
"quantity": 1,
"includedUnits": 10000
}
}
}'

Response (200 OK)

Retorna o plano atualizado com o novo item.

{
"data": {
"type": "subscription-plans",
"id": "550e8400-e29b-41d4-a716-446655440020",
"attributes": {
"name": "Plano Pro",
"billingInterval": "MONTHLY",
"basePrice": 299.90,
"currency": "BRL",
"isActive": true,
"items": [
{
"productId": "550e8400-e29b-41d4-a716-446655440030",
"productName": "API Calls",
"quantity": 1,
"includedUnits": 10000
}
],
"updatedAt": "2024-01-15T11:30:00Z"
}
}
}

Remover Item do Plano

DELETE /api/v1/subscription-plans/:planId/items/:itemId

Remove um produto do plano de assinatura.

curl -X DELETE 'https://billing.stg.catalisa.app/billing/api/v1/subscription-plans/550e8400-e29b-41d4-a716-446655440020/items/550e8400-e29b-41d4-a716-446655440030' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (204 No Content)

Sem corpo de resposta.


Erros Comuns

CódigoErroDescrição
400VALIDATIONDados inválidos (intervalo, preço negativo, etc.)
404NOT_FOUNDPlano não encontrado
404NOT_FOUNDProduto não encontrado (ao adicionar item)
409CONFLICTPlano possui assinaturas ativas (exclusão)
409CONFLICTProduto já existe no plano