Sessões e configuração do Customer Portal

Como um cliente entra no portal — o fluxo de magic-link, a sessão atual, os dados de bootstrap e a configuração do portal.

O Customer Portal permite que um cliente gerencie suas próprias assinaturas e métodos de pagamento sem precisar entrar em contato com o suporte. Uma sessão começa com um magic link: o cliente solicita um link por e-mail e, então, a etapa de verificação troca o token enviado por e-mail por um cookie de sessão. Estes endpoints cobrem esse handshake, a sessão atual, o payload de bootstrap que a interface carrega primeiro, e a configuração do portal.

Todo o restante do portal — assinaturas, métodos de pagamento, conta — funciona sobre o cookie estabelecido aqui. O portal é white-label, portanto seu branding e as ações permitidas vêm da configuração do portal do Merchant.

Estes endpoints alimentam o Customer Portal — a superfície self-service que os seus clientes finais usam, sob a sua marca. Eles são autenticados por um cookie de sessão do portal, estabelecido por meio do fluxo de magic-link (solicitar um link e depois verificar o token), e não por uma chave de API. Consulte Sessões e configuração.

A sessão do portal

Retornado pelos endpoints de listagem e consulta desta página.

FieldTypeDescription
idstringId da conta do portal.
organization_idstring—
merchant_idstringMerchant ao qual a sessão está vinculada.
emailstring—
expires_innumberTempo de vida da sessão em segundos.

Endpoints

GET/api/v1/merchants/:merchant_id/portal-config

Auth: Customer Portal session (cookie definido pelo fluxo de magic-link).

Branding e comportamento do portal self-service que os seus clientes usam para gerenciar as assinaturas deles. Retorna os padrões quando ainda não houver nada configurado.

Parâmetros de caminho

FieldTypeRequiredDescription
merchant_idstringSim—

Exemplo de requisição

curl https://api.tokeflow.com/api/v1/merchants/mrc_8a3f12d9/portal-config \
  -H "Cookie: tf_portal_session=…"

Exemplo de resposta — 200

{
  "merchant_id": "mrc_123",
  "allow_cancellation": true,
  "allow_plan_change": true,
  "allow_payment_method_change": true,
  "cancellation_survey": true,
  "custom_cancellation_message": "Operation completed successfully"
}

PUT/api/v1/merchants/:merchant_id/portal-config

Auth: Customer Portal session (cookie definido pelo fluxo de magic-link).

Faz upsert da configuração — a primeira chamada a cria, chamadas posteriores substituem os campos enviados.

Parâmetros de caminho

FieldTypeRequiredDescription
merchant_idstringSim—

Campos da requisição

FieldTypeRequiredDescription
allow_cancellationbooleanNãoPermite que os clientes cancelem pelo portal.
allow_plan_changebooleanNãoPermite que os clientes alterem o plano pelo portal.
allow_payment_method_changebooleanNãoPermite que os clientes adicionem um cartão durante o dunning.
cancellation_surveybooleanNãoExibe uma pesquisa de cancelamento.
custom_cancellation_messagestringNãoMarkdown exibido na tela de cancelamento.

Exemplo de requisição

curl -X PUT https://api.tokeflow.com/api/v1/merchants/mrc_8a3f12d9/portal-config \
  -H "Cookie: tf_portal_session=…" \
  -H "Content-Type: application/json" \
  -d '{
    "allow_cancellation": true,
    "allow_plan_change": true,
    "allow_payment_method_change": true,
    "cancellation_survey": true,
    "custom_cancellation_message": "Operation completed successfully"
  }'

Exemplo de resposta — 200

{
  "merchant_id": "mrc_123",
  "allow_cancellation": true,
  "allow_plan_change": true,
  "allow_payment_method_change": true,
  "cancellation_survey": true,
  "custom_cancellation_message": "Operation completed successfully"
}

POST/api/v1/portal/auth/email-change/confirm

Auth: Customer Portal session (cookie definido pelo fluxo de magic-link).

Confirma uma alteração de e-mail por meio do token enviado por e-mail.

Campos da requisição

FieldTypeRequiredDescription
tokenstringSimToken do e-mail de confirmação.

Exemplo de requisição

curl -X POST https://api.tokeflow.com/api/v1/portal/auth/email-change/confirm \
  -H "Cookie: tf_portal_session=…" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "string"
  }'

POST/api/v1/portal/auth/logout

Auth: Customer Portal session (cookie definido pelo fluxo de magic-link).

Limpa o cookie de sessão do portal.

Exemplo de requisição

curl -X POST https://api.tokeflow.com/api/v1/portal/auth/logout \
  -H "Cookie: tf_portal_session=…"

GET/api/v1/portal/auth/me

Auth: Customer Portal session (cookie definido pelo fluxo de magic-link).

Obtém a conta da sessão atual do portal.

Exemplo de requisição

curl https://api.tokeflow.com/api/v1/portal/auth/me \
  -H "Cookie: tf_portal_session=…"

Exemplo de resposta — 200

{
  "id": "cpa_123",
  "organization_id": "org_123",
  "merchant_id": "mrc_123",
  "email": "customer@example.com",
  "expires_in": 1800
}

POST/api/v1/portal/auth/request-link

Auth: Customer Portal session (cookie definido pelo fluxo de magic-link).

Solicita um e-mail de magic link do portal.

Campos da requisição

FieldTypeRequiredDescription
organization_idstringSimOrganization à qual o portal pertence.
merchant_idstringSimMerchant ao qual a sessão do portal está vinculada (a partir da resposta de bootstrap). Obrigatório — o portal é de Merchant único, e uma sessão sem Merchant não pode ficar vinculada a nada.
emailstringSimE-mail do cliente.

Exemplo de requisição

curl -X POST https://api.tokeflow.com/api/v1/portal/auth/request-link \
  -H "Cookie: tf_portal_session=…" \
  -H "Content-Type: application/json" \
  -d '{
    "organization_id": "org_123",
    "merchant_id": "mrc_123",
    "email": "customer@example.com"
  }'

POST/api/v1/portal/auth/verify

Auth: Customer Portal session (cookie definido pelo fluxo de magic-link).

Verifica um token de magic link; define o cookie de sessão.

Campos da requisição

FieldTypeRequiredDescription
tokenstringSimToken bruto do magic link enviado por e-mail.

Exemplo de requisição

curl -X POST https://api.tokeflow.com/api/v1/portal/auth/verify \
  -H "Cookie: tf_portal_session=…" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "string"
  }'

Exemplo de resposta — 200

{
  "id": "cpa_123",
  "organization_id": "org_123",
  "merchant_id": "mrc_123",
  "email": "customer@example.com",
  "expires_in": 1800
}

GET/api/v1/portal/bootstrap

Auth: Customer Portal session (cookie definido pelo fluxo de magic-link).

Resolve o branding e as flags do Merchant para o portal.

Parâmetros de consulta

FieldTypeRequiredDescription
merchant_idstringNão—
organization_idstringNão—
merchantstringNão—

Exemplo de requisição

curl -G https://api.tokeflow.com/api/v1/portal/bootstrap \
  -H "Cookie: tf_portal_session=…" \
  --data-urlencode "merchant_id=mrc_123" \
  --data-urlencode "organization_id=org_123" \
  --data-urlencode "merchant=acme-store"

Exemplo de resposta — 200

{
  "organization_id": "org_123",
  "merchant_id": "mrc_123",
  "merchant_slug": "acme-store",
  "merchant_name": "Acme Store",
  "branding": {
    "site_title": "Acme Store",
    "favicon": "string",
    "logo_light_mode": "string",
    "logo_dark_mode": "string",
    "theme_primary_color": "#1A73E8",
    "theme_secondary_color": "#0B5394",
    "custom_url": "https://acme.example.com",
    "show_name_with_logo": false
  },
  "config": {
    "allow_cancellation": true,
    "allow_plan_change": true,
    "allow_payment_method_change": true,
    "cancellation_survey": false,
    "custom_cancellation_message": "Operation completed successfully"
  }
}

Erros

Os erros usam o envelope padrão. Os casos mais comuns aqui:

HTTPMeaning
400Parâmetros inválidos ou um estado que não permite esta operação.
401Token de sessão do Dashboard ausente, expirado ou inválido.
403Autenticado, mas o usuário logado não tem acesso a esta entidade.
404O registro não existe ou não é visível para esta entidade.

Relacionados

Nesta página