Autenticação do Dashboard
Faça login no Tokeflow Dashboard — login de merchant e organization, redefinição de senha, renovação de token, associações e troca da organization ativa.
Estes endpoints alimentam o login no Dashboard. Um usuário faz login como usuário de merchant ou de organization, recebe uma sessão e a apresenta como token bearer em cada chamada subsequente ao Dashboard. Eles também cobrem a manutenção rotineira de uma sessão: renovar um token prestes a expirar, alterar ou redefinir uma senha, listar as associações que um usuário possui e trocar qual é a organization ativa.
Isto é diferente da autenticação por chave de API. As chamadas de máquina a máquina para a API pública usam chaves sk_…/pk_… e nunca tocam nestes endpoints; estes existem para o Dashboard humano, baseado em navegador. Aceitar um convite do Dashboard também acontece aqui — consulte Convites para conhecer o ciclo de vida do convite.
Estes endpoints são a forma como uma pessoa faz login no Tokeflow Dashboard. Eles trocam credenciais por uma sessão (JWT bearer) — o token que qualquer outro endpoint do Dashboard espera. Não fazem parte da superfície pública de chaves de API; uma integração de máquina se autentica, em vez disso, com uma chave sk_…. Consulte Autenticação.
A resposta de login
Retornado pelos endpoints de listagem e recuperação desta página.
| Field | Type | Description |
|---|---|---|
user | object | Usuário de merchant autenticado. |
access_token | string | Token de acesso JWT. |
refresh_token | string | Token de atualização. |
token_type | string | Tipo de token. |
expires_in | number | Expiração do token em segundos. |
Endpoints
POST/api/v1/auth/change-password
Auth: Dashboard session (JWT bearer).
Permite que usuários com senhas temporárias alterem sua senha antes de fazer login. Obrigatório quando must_change_password é true.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail do usuário. |
current_password | string | Sim | Senha atual/temporária. |
new_password | string | Sim | Nova senha. A senha deve ter de 12 a 128 caracteres e incluir uma letra minúscula, uma letra maiúscula e um número. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/change-password \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "admin@tokeflow.com",
"current_password": "TempPass@2025Xyz",
"new_password": "NewSecurePass@2025"
}'Exemplo de resposta — 200
{}POST/api/v1/auth/forgot-password
Auth: Dashboard session (JWT bearer).
Sempre retorna a mesma resposta 202, esteja o endereço registrado ou não, de modo que não pode ser usada para descobrir contas. O limite por e-mail é aplicado no serviço; a limitação aqui é uma salvaguarda por IP.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail da conta que se deseja recuperar. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/forgot-password \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "user@organization.com"
}'Exemplo de resposta — 202
{
"message": "If an account exists for that email, a password reset link has been sent."
}POST/api/v1/auth/login
Auth: Dashboard session (JWT bearer).
Autentica os usuários internos da plataforma (super admin, platform admin, support) com e-mail e senha. Retorna um token JWT para as solicitações subsequentes à API.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail do usuário. |
password | string | Sim | Senha do usuário. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/login \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "superadmin@tokeflow.com",
"password": "SuperAdmin@123"
}'Exemplo de resposta — 200
{}POST/api/v1/auth/logout
Auth: Dashboard session (JWT bearer).
Invalida o token de atualização atual. O token de acesso expirará naturalmente.
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/logout \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"Exemplo de resposta — 200
{}POST/api/v1/auth/merchant/accept-invitation
Auth: Dashboard session (JWT bearer).
Define uma senha e ativa a linha de merchant_users associada ao token de convite fornecido. Após a aceitação, o usuário pode fazer login por meio de /auth/merchant/login.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
token | string | Sim | Token de convite do e-mail de boas-vindas. |
password | string | Sim | Nova senha. A senha deve ter de 12 a 128 caracteres e incluir uma letra minúscula, uma letra maiúscula e um número. |
name | string | Não | Nome alternativo opcional (por padrão, o valor capturado no convite). |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/merchant/accept-invitation \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"token": "a1b2c3...e9f0",
"password": "StrongP@ssw0rd!",
"name": "Acme Store"
}'Exemplo de resposta — 200
{
"message": "Operation completed successfully",
"email": "jane@example.com"
}POST/api/v1/auth/merchant/change-password
Auth: Dashboard session (JWT bearer).
Consulta apenas merchant_users. O mesmo endereço pode ser uma identidade independente em mais de uma tabela, portanto use o endpoint que corresponda ao dashboard ao qual a senha pertence — este para merchant, organization/change-password para org, change-password para admin. Revoga os tokens de atualização; os tokens de acesso expiram em 15 minutos.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail do usuário. |
current_password | string | Sim | Senha atual/temporária. |
new_password | string | Sim | Nova senha. A senha deve ter de 12 a 128 caracteres e incluir uma letra minúscula, uma letra maiúscula e um número. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/merchant/change-password \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "contact@organization.com",
"current_password": "TempPass@2025Xyz",
"new_password": "NewSecurePass@2025"
}'Exemplo de resposta — 200
{
"message": "Password changed successfully",
"email": "contact@organization.com",
"can_login": true
}POST/api/v1/auth/merchant/forgot-password
Auth: Dashboard session (JWT bearer).
Sempre retorna a mesma resposta 202, esteja o endereço registrado ou não, de modo que não pode ser usada para descobrir contas.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail da conta que se deseja recuperar. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/merchant/forgot-password \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "user@organization.com"
}'Exemplo de resposta — 202
{
"message": "If an account exists for that email, a password reset link has been sent."
}POST/api/v1/auth/merchant/login
Auth: Dashboard session (JWT bearer).
Autentica os usuários que foram atribuídos a merchants. Retorna o token JWT e a lista de associações de merchant para o seletor de merchant.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail do usuário de merchant. |
password | string | Sim | Senha do usuário de merchant. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/merchant/login \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "user@merchant.com",
"password": "Password@123"
}'Exemplo de resposta — 200
{
"user": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "user@merchant.com",
"name": "John Doe",
"merchants": [
{
"membership_id": "f0f524fe-d28f-485b-bc3c-2c6acc26d12b",
"merchant_id": "mrc_abc123",
"merchant_name": "Store XPTO",
"status": "active",
"role": "owner",
"organization_id": "org_xyz",
"organization_name": "Acme Corp"
}
],
"last_login_at": "2026-04-09T10:00:00.000Z"
},
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 900
}GET/api/v1/auth/merchant/memberships
Auth: Dashboard session (JWT bearer).
Retorna todas as associações de merchant do usuário autenticado. Usado pelo frontend para exibir um seletor de contexto de merchant.
Exemplo de requisição
curl https://api.tokeflow.com/api/v1/auth/merchant/memberships \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"Exemplo de resposta — 200
{
"memberships": [
{
"membership_id": "f0f524fe-d28f-485b-bc3c-2c6acc26d12b",
"merchant_id": "mrc_abc123",
"merchant_name": "Store XPTO",
"status": "active",
"role": "owner",
"organization_id": "org_xyz",
"organization_name": "Acme Corp"
}
]
}POST/api/v1/auth/organization/change-password
Auth: Dashboard session (JWT bearer).
Consulta apenas organization_users. Permite que um usuário de organization com uma senha temporária a altere antes de fazer login; obrigatório quando must_change_password é true. As identidades de merchant usam merchant/change-password — o mesmo endereço pode existir de forma independente em ambas as tabelas.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail do usuário. |
current_password | string | Sim | Senha atual/temporária. |
new_password | string | Sim | Nova senha. A senha deve ter de 12 a 128 caracteres e incluir uma letra minúscula, uma letra maiúscula e um número. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/organization/change-password \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "contact@organization.com",
"current_password": "TempPass@2025Xyz",
"new_password": "NewSecurePass@2025"
}'Exemplo de resposta — 200
{}POST/api/v1/auth/organization/forgot-password
Auth: Dashboard session (JWT bearer).
Sempre retorna a mesma resposta 202, esteja o endereço registrado ou não, de modo que não pode ser usada para descobrir contas.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail da conta que se deseja recuperar. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/organization/forgot-password \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "user@organization.com"
}'Exemplo de resposta — 202
{
"message": "If an account exists for that email, a password reset link has been sent."
}POST/api/v1/auth/organization/login
Auth: Dashboard session (JWT bearer).
Autentica os usuários de organization (contatos principais e membros da organization) com e-mail e senha. Retorna o token JWT com as associações de organization.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Sim | Endereço de e-mail do usuário de organization. |
password | string | Sim | Senha do usuário de organization. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/organization/login \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"email": "owner@company.com",
"password": "OrgPass@123"
}'Exemplo de resposta — 200
{}POST/api/v1/auth/organization/logout
Auth: Dashboard session (JWT bearer).
Invalida o token de atualização atual de um usuário de organization. O token de acesso expirará naturalmente.
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/organization/logout \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"Exemplo de resposta — 200
{}GET/api/v1/auth/organization/memberships
Auth: Dashboard session (JWT bearer).
Retorna todas as organizations às quais o usuário autenticado pertence. A resposta de login inclui a mesma lista, mas os clientes conservam apenas a organization ativa, então é assim que um seletor volta a ser preenchido após um recarregamento.
Exemplo de requisição
curl https://api.tokeflow.com/api/v1/auth/organization/memberships \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"Exemplo de resposta — 200
{
"memberships": [
{
"membership_id": "f0f524fe-d28f-485b-bc3c-2c6acc26d12b",
"organization_id": "org_abc123",
"organization_name": "Acme Corp",
"role": "owner"
}
]
}POST/api/v1/auth/organization/switch
Auth: Dashboard session (JWT bearer).
Reemite esta sessão para outra organization à qual quem chama pertence, retornando um novo par de tokens. Autenticado em vez de público: a organization retornada é aquela à qual cada solicitação subsequente fica restrita, portanto quem chama deve ser um sujeito verificado, não apenas quem possui um token de atualização. 403 se quem chama não tiver associação no destino.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
organization_id | string | Sim | A organization que será ativada para esta sessão. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/organization/switch \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"organization_id": "org_abc123"
}'Exemplo de resposta — 200
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 900
}POST/api/v1/auth/password-reset/confirm
Auth: Dashboard session (JWT bearer).
Consome o token, define a senha, remove qualquer bloqueio e revoga os tokens de atualização para que as sessões existentes terminem. Os tokens de acesso já emitidos permanecem válidos até expirarem (15 minutos).
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
token | string | Sim | O token do link de redefinição enviado por e-mail. |
new_password | string | Sim | Nova senha. A senha deve ter de 12 a 128 caracteres e incluir uma letra minúscula, uma letra maiúscula e um número. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/password-reset/confirm \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"token": "V-9nQ2h1c2VyLXRva2VuLWV4YW1wbGUtdmFsdWU",
"new_password": "CorrectHorse1Battery"
}'Exemplo de resposta — 200
{
"message": "Password reset successfully",
"email": "user@organization.com",
"can_login": true
}POST/api/v1/auth/refresh
Auth: Dashboard session (JWT bearer).
Troca um token de atualização válido por um novo par de token de acesso e token de atualização (rotação de tokens).
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
refresh_token | string | Sim | Token de atualização emitido durante o login. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/auth/refresh \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}'Exemplo de resposta — 200
{}Erros
Os erros usam o envelope padrão. Os casos mais comuns aqui:
| HTTP | Significado |
|---|---|
400 | Parâmetros inválidos ou um estado que não permite esta operação. |
401 | Token de sessão do Dashboard ausente, expirado ou inválido. |
403 | Autenticado, mas o usuário que fez login não tem acesso a esta entidade. |
404 | O registro não existe ou não é visível para esta entidade. |