Axuz Developers

POST /v1/teams/{teamId}/billing/portal-session

Cria sessão do Stripe Billing Portal (Fase 125c)

  • 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`.

— Fase 125c. POST body opcional:

{ "return_url": "https://workspace.axuz.net/{teamId}/settings/billing" }

Default: FRONTEND_URL/{teamId}/settings/billing (back-compat com quem chamar sem body). 503 quando Stripe não está configurado; 404 quando o team ainda não tem stripe_customer_id (Checkout não rodou nem add-card foi feito).

Parameters

NameInTypeRequiredDescription
teamIdpathstringyes

Request body

application/json

NameTypeRequiredDescription
return_urlstring<uri>no

Fallback FRONTEND_URL/{teamId}/settings/billing

{
  "return_url": "https://example.test/"
}

Responses

200

url

NameTypeRequiredDescription
urlstring<uri>no

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

team sem stripe customer

NameTypeRequiredDescription
errorstringyes

429

Limite de requisições excedido.

NameTypeRequiredDescription
errorstringyes

500

Erro interno. Tente de novo com backoff; reporte o X-Request-Id.

NameTypeRequiredDescription
errorstringyes

502

falha do Stripe

NameTypeRequiredDescription
errorstringyes

503

Stripe não configurado

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/portal-session' \
  -H "Authorization: Bearer $AXUZ_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"return_url":"https://example.test/"}'

Node.js

const res = await fetch("https://api-billing.axuz.net/v1/teams/TEAM_ID/billing/portal-session", {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.AXUZ_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "return_url": "https://example.test/"
  }),
});
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/portal-session",
    headers={
        "Authorization": f"Bearer {os.environ['AXUZ_TOKEN']}",
    },
    json={
        "return_url": "https://example.test/",
    },
    timeout=30,
)
res.raise_for_status()
print(res.json())