Pular para o conteúdo

Endpoints de Assinaturas

A API de Assinaturas permite gerenciar planos de assinatura, acessar recursos premium e processar pagamentos via Stripe com aplicação automática de limites.

Todos os endpoints requerem autenticação.

Authorization: Bearer <token>

PlanoMáx. FazendasMáx. Viveiros/FazendaMáx. Lotes/ViveiroPreço Mensal
GRATUITO131Grátis
BÁSICO3102R$ 149/mês
PROFISSIONAL10505R$ 499/mês
EMPRESARIALIlimitadoIlimitadoIlimitadoPersonalizado
StatusDescrição
ACTIVEAssinatura ativa e todos os recursos disponíveis
PAST_DUEPagamento falhou, período de carência ativo
CANCELEDAssinatura foi cancelada
TRIALINGEm período de teste

Recursos premium controlados por nível de assinatura:

FuncionalidadeGRATUITOBÁSICOPROFISSIONALEMPRESARIAL
advanced_analytics
api_access
export_data
priority_support
custom_reports
ai_predictions
white_label

Obter detalhes da assinatura do usuário autenticado.

GET /api/v1/subscriptions/me
Authorization: Bearer <token>
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"user_id": "123e4567-e89b-12d3-a456-426614174000",
"plan": "PROFESSIONAL",
"status": "ACTIVE",
"stripe_customer_id": "cus_123456789",
"stripe_subscription_id": "sub_123456789",
"current_period_start": "2026-01-19T00:00:00Z",
"current_period_end": "2026-02-19T00:00:00Z",
"max_farms": 10,
"max_ponds_per_farm": 50,
"max_batches_per_pond": 5,
"current_farms": 5,
"features": {
"advanced_analytics": true,
"api_access": true,
"export_data": true,
"priority_support": true,
"custom_reports": true,
"ai_predictions": true
},
"currency": "BRL",
"created_at": "2026-01-19T00:00:00Z",
"updated_at": "2026-01-19T00:00:00Z"
}

Obter limites de recursos e uso atual para o usuário autenticado.

GET /api/v1/subscriptions/me/limits
Authorization: Bearer <token>
{
"plan": "PROFESSIONAL",
"limits": {
"max_farms": 10,
"max_ponds_per_farm": 50,
"max_batches_per_pond": 5
},
"usage": {
"farms": {
"current": 5,
"max": 10,
"percentage": 50.0
},
"ponds": {
"current": 25,
"max": 250,
"percentage": 10.0
},
"active_batches": {
"current": 12,
"max": 125,
"percentage": 9.6
}
},
"warnings": [],
"can_create": {
"farm": true,
"pond": true,
"batch": true
}
}

Quando próximo dos limites (>80%), avisos são retornados:

{
"warnings": [
{
"resource": "farms",
"message": "Você está usando 80% do seu limite de fazendas",
"current": 8,
"max": 10
}
]
}

Obter planos de assinatura disponíveis.

GET /api/v1/subscriptions/plans
{
"plans": [
{
"id": "FREE",
"name": "Gratuito",
"description": "Comece com recursos básicos",
"price": {
"usd": 0,
"brl": 0
},
"billing_period": null,
"limits": {
"max_farms": 1,
"max_ponds_per_farm": 3,
"max_batches_per_pond": 1
},
"features": {
"advanced_analytics": false,
"api_access": false,
"export_data": false,
"priority_support": false,
"custom_reports": false,
"ai_predictions": false,
"white_label": false
}
},
{
"id": "BASIC",
"name": "Básico",
"description": "Recursos essenciais para pequenas operações",
"price": {
"usd": 29,
"brl": 149
},
"billing_period": "monthly",
"limits": {
"max_farms": 3,
"max_ponds_per_farm": 10,
"max_batches_per_pond": 2
},
"features": {
"advanced_analytics": false,
"api_access": true,
"export_data": true,
"priority_support": false,
"custom_reports": false,
"ai_predictions": false,
"white_label": false
}
},
{
"id": "PROFESSIONAL",
"name": "Profissional",
"description": "Recursos completos para operações profissionais",
"price": {
"usd": 99,
"brl": 499
},
"billing_period": "monthly",
"limits": {
"max_farms": 10,
"max_ponds_per_farm": 50,
"max_batches_per_pond": 5
},
"features": {
"advanced_analytics": true,
"api_access": true,
"export_data": true,
"priority_support": true,
"custom_reports": true,
"ai_predictions": true,
"white_label": false
},
"popular": true
},
{
"id": "ENTERPRISE",
"name": "Empresarial",
"description": "Soluções personalizadas para grandes operações",
"price": null,
"billing_period": null,
"limits": {
"max_farms": -1,
"max_ponds_per_farm": -1,
"max_batches_per_pond": -1
},
"features": {
"advanced_analytics": true,
"api_access": true,
"export_data": true,
"priority_support": true,
"custom_reports": true,
"ai_predictions": true,
"white_label": true
},
"contact_sales": true
}
]
}

Obter limites de recursos e uso para um usuário específico (somente admin).

ParâmetroTipoDescrição
user_idUUIDID do usuário
GET /api/v1/subscriptions/{user_id}/limits
Authorization: Bearer <token>

Mesma estrutura de GET /subscriptions/me/limits.

StatusDetalhe
403Não autorizado (somente admin)
404Usuário não encontrado

Cancelar a assinatura atual.

POST /api/v1/stripe/cancel-subscription
Authorization: Bearer <token>
Content-Type: application/json
{
"cancel_at_period_end": true,
"reason": "Mudando para plano anual"
}
CampoTipoObrigatórioDescrição
cancel_at_period_endbooleanSe true, cancela ao final do período de cobrança (padrão: true)
reasonstringMotivo do cancelamento
{
"subscription_id": "sub_123456789",
"status": "ACTIVE",
"cancel_at_period_end": true,
"current_period_end": "2026-03-19T00:00:00Z",
"message": "Assinatura será cancelada ao final do período de cobrança atual"
}

Criar uma sessão do portal de cobrança Stripe para gerenciar métodos de pagamento e visualizar faturas.

POST /api/v1/stripe/create-billing-portal
Authorization: Bearer <token>
Content-Type: application/json
{
"return_url": "https://app.aeraplus.com/account/billing"
}
CampoTipoObrigatórioDescrição
return_urlstring (URL)URL de retorno após sessão do portal
{
"url": "https://billing.stripe.com/p/session/test_123456789"
}

O portal de cobrança permite aos usuários:

  • Visualizar e baixar faturas
  • Atualizar métodos de pagamento
  • Visualizar histórico de assinatura
  • Gerenciar endereço de cobrança

Atualizar plano e limites de assinatura de um usuário (somente admin).

ParâmetroTipoDescrição
user_idUUIDID do usuário a atualizar
PUT /api/v1/subscriptions/{user_id}
Authorization: Bearer <token>
Content-Type: application/json
{
"plan": "PROFESSIONAL",
"status": "ACTIVE",
"max_farms": 10,
"max_ponds_per_farm": 50,
"max_batches_per_pond": 5,
"features": {
"advanced_analytics": true,
"api_access": true,
"export_data": true,
"priority_support": true,
"custom_reports": true,
"ai_predictions": true
},
"currency": "BRL"
}
CampoTipoObrigatórioDescrição
planenumPlano de assinatura (FREE, BASIC, PROFESSIONAL, ENTERPRISE)
statusenumStatus da assinatura
max_farmsintegerNúmero máximo de fazendas
max_ponds_per_farmintegerMáximo de viveiros por fazenda
max_batches_per_pondintegerMáximo de lotes por viveiro
featuresobjectObjeto com flags de funcionalidades
currencystringCódigo da moeda (USD, BRL)

Retorna o objeto de assinatura atualizado.


Criar uma sessão de checkout Stripe para pagamento de assinatura.

POST /api/v1/stripe/create-checkout-session
Authorization: Bearer <token>
Content-Type: application/json
{
"plan": "PROFESSIONAL",
"success_url": "https://app.aeraplus.com/subscription/success",
"cancel_url": "https://app.aeraplus.com/subscription/cancel"
}
CampoTipoObrigatórioDescrição
planenumPlano de assinatura desejado
success_urlstring (URL)URL de redirecionamento em caso de sucesso
cancel_urlstring (URL)URL de redirecionamento em caso de cancelamento
{
"session_id": "cs_test_123456789",
"url": "https://checkout.stripe.com/pay/cs_test_123456789"
}

Criar uma sessão do portal do cliente Stripe para gerenciar assinatura e métodos de pagamento.

POST /api/v1/stripe/create-portal-session
Authorization: Bearer <token>
Content-Type: application/json
{
"return_url": "https://app.aeraplus.com/account/subscription"
}
{
"url": "https://billing.stripe.com/p/session/test_123456789"
}

Os limites de taxa variam por plano de assinatura:

PlanoRequisições/HoraConexões Simultâneas
GRATUITO1005
BÁSICO50020
PROFISSIONAL2,00050
EMPRESARIALIlimitadoIlimitado

CódigoDescrição
SUBSCRIPTION_LIMIT_REACHEDLimite de recursos excedido para o plano atual
FEATURE_NOT_AVAILABLERecurso não disponível no plano atual
SUBSCRIPTION_REQUIREDAssinatura ativa necessária
PAYMENT_REQUIREDMétodo de pagamento necessário
SUBSCRIPTION_CANCELEDAssinatura foi cancelada

const response = await fetch('https://api.aeraplus.com/v1/subscriptions/me', {
headers: {
'Authorization': `Bearer ${token}`
}
});
const subscription = await response.json();
// Verificar se pode criar nova fazenda
if (subscription.current_farms >= subscription.max_farms) {
console.log('Limite de fazendas atingido. Por favor, atualize seu plano.');
} else {
// Criar fazenda
}
const response = await fetch('https://api.aeraplus.com/v1/stripe/create-checkout-session', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
plan: 'PROFESSIONAL',
success_url: 'https://app.aeraplus.com/subscription/success',
cancel_url: 'https://app.aeraplus.com/subscription/cancel'
})
});
const { url } = await response.json();
window.location.href = url; // Redirecionar para checkout Stripe