Axuz Developers

POST /v1/teams/{teamId}/billing/subscription/cancel

Soft-cancel (cancel_at_period_end=true)

  • Access: Team admin
  • Service: https://api-billing.axuz.net

Accepted authentication

  • sessionCookie — Sessão plena Axuz (cookie de sessão da casa). Sessão restrita é 403 enrollment_required.
  • bearerSession — JWT de acesso da sessão em `Authorization: Bearer`.

Responde POST /teams/{teamId}/billing/ subscription/cancel do próprio time. Sempre soft-cancel via cancel_at_period_end=true — customer usa até fim do período. Quem EFETIVA o cancelamento é o ciclo de faturamento (cycle.go), quando o período vence.

F-058 — coleta de feedback. O corpo aceita, opcionalmente, {"reason": "...", "comment": "..."}. O motivo vem de lista fechada (motivo em texto livre não agrega em relatório nenhum) e é gravado em subscription_cancellation_feedback, uma linha por cancelamento — coluna única guardaria só o último e apagaria a série, que é justamente o que se quer analisar.

A coleta NÃO bloqueia o cancelamento: motivo inválido é 400 e nada é gravado, mas motivo AUSENTE cancela normalmente. Forçar o cliente a justificar-se pra conseguir sair é padrão escuro, e um motivo dado sob coação é dado sujo.

Parameters

NameInTypeRequiredDescription
teamIdpathstringyes

Request body

Corpo JSON. O schema detalhado deste endpoint ainda não está tipado na spec; veja a descrição da operação.

application/json

NameTypeRequiredDescription
(corpo)objectno
{}

Responses

200

ok

NameTypeRequiredDescription
okbooleanno

400

input inválido

NameTypeRequiredDescription
errorstringyes

401

Sem credencial valida

NameTypeRequiredDescription
errorstringyes

403

Sem permissao (nao e owner/admin; token sem escopo; token de integracao em rota nao permitida)

NameTypeRequiredDescription
errorstringyes

404

recurso não encontrado

NameTypeRequiredDescription
errorstringyes

429

Limite de requisições excedido.

NameTypeRequiredDescription
errorstringyes

500

erro interno

NameTypeRequiredDescription
errorstringyes

Examples

"Try it" is turned off in this reference. Use the examples with your test credential.

curl

curl -sS -X POST 'https://api-billing.axuz.net/v1/teams/TEAM_ID/billing/subscription/cancel' \
  -H "Authorization: Bearer $AXUZ_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

Node.js

const res = await fetch("https://api-billing.axuz.net/v1/teams/TEAM_ID/billing/subscription/cancel", {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.AXUZ_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({}),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
console.log(await res.json());

Python

import os
import requests

res = requests.request(
    "POST",
    "https://api-billing.axuz.net/v1/teams/TEAM_ID/billing/subscription/cancel",
    headers={
        "Authorization": f"Bearer {os.environ['AXUZ_TOKEN']}",
    },
    json={},
    timeout=30,
)
res.raise_for_status()
print(res.json())