Documentação da API

Tudo o que a sua IA precisa para construir sobre a Brief App.

12 módulos, 250 endpoints, explicados com conceitos, ciclos de vida, fluxos e exemplos. A referência é gerada a partir do código da API.

Visão geral

A API Brief App expõe, por HTTP, os módulos que operam uma startup inteira: identidade, agendamento, assinaturas, pagamentos, catálogo, parceiros, mobilidade, comunicação e arquivos. Tudo roda num único Gateway, e cada cliente seu vive num tenant com dados isolados.

  • Formato: JSON em UTF-8 em todas as requisições e respostas (exceto uploads, que usam multipart/form-data).
  • Base URL: o endereço do seu ambiente, informado ao criar o tenant. Todas as rotas começam com /api.
  • Contrato OpenAPI: GET /openapi/v1.json. Entregue esse arquivo à sua IA (Lovable, Cursor, Claude Code…) para ela gerar as chamadas.
  • Saúde: GET /health (o processo está vivo) e GET /ready (dependências prontas).
  • Datas: ISO 8601 em UTC (2026-10-15T13:00:00Z). Datas sem hora usam AAAA-MM-DD.
  • Dinheiro: valores decimais em reais (89.90), nunca em centavos.
  • Paginação: listas aceitam page (começa em 1) e pageSize (padrão 20).

O banco de dados é nosso: o PostgreSQL é a fonte da verdade para dinheiro, contratos e agendas, e uma camada de leitura em tempo real sincroniza o seu front-end. Você não modela tabelas nem cuida de backup.

Autenticação

Todo endpoint exige um token Authorization: Bearer <token>, exceto os marcados como Público. Há duas formas de obter o token.

1. Token do tenant (servidor para servidor)

Ao criar o seu tenant você recebe chaves de API:

  • sk_live_… Secret key: só no seu backend. Pode receber qualquer escopo.
  • pk_live_… Publishable key: pode ir para o app ou navegador, limitada aos escopos públicos (public, identity:login, identity:refresh, identity:2fa, identity:firebase, catalog:read, catalog:availability, scheduling:read) e às origens/bundle IDs cadastrados.
POST /api/tenants/token
Content-Type: application/json

{ "grant_type": "client_credentials", "api_key": "sk_live_…", "scope": "financial partners" }

→ 200 { "access_token": "eyJ…", "token_type": "Bearer", "expires_in": 600,
        "scope": "financial partners", "tenant_id": "…", "tenant_slug": "minha-startup" }

O token vale 10 minutos. Peça só os escopos de que precisa: se omitir scope, recebe todos os da chave. Para agir em nome de um usuário, envie on_behalf_of com o id dele (ou o header X-On-Behalf-Of). A chave também pode vir no header X-Api-Key.

2. Login do usuário final

Para os usuários do seu app (clientes, parceiros, motoristas), o 2FA por aplicativo autenticador (TOTP) é obrigatório:

  1. POST /api/auth/register cria a conta. Os papéis Admin e Parceiro ficam aguardando aprovação.
  2. POST /api/auth/login com e-mail e senha. Na primeira vez a resposta traz requiresTwoFactorSetup: true, o userId e um twoFactorSetupToken de curta duração, mas nenhum token de sessão.
  3. POST /api/auth/2fa/setup devolve a chave e o QR Code para o app autenticador.
  4. POST /api/auth/2fa/verify confirma o código de 6 dígitos, ativa o 2FA e já devolve os tokens de sessão.
  5. Nos próximos logins, envie twoFactorCode junto com e-mail e senha.

O access token dura 15 minutos. O refresh token dura 7 dias e é trocado a cada uso: POST /api/auth/refresh devolve um par novo e invalida o anterior. Também é possível entrar com Firebase (POST /api/auth/firebase-login).

Papéis e permissões

A API é segura por padrão: qualquer rota exige usuário autenticado, a não ser que esteja marcada como pública. Algumas rotas exigem um papel; para tokens de tenant, o escopo equivalente também libera.

ExigênciaPapéis aceitosEscopo do token de tenant
AdminAdminadmin
FinanceiroAdmin, Financeirofinancial
ParceiroAdmin, Parceiropartners
MotoristaAdmin, Motoristamobility
Envio de e-mailAdmin, Suporteemail

Papéis disponíveis: Admin, Parceiro, Cliente, Membro, Financeiro, Suporte e Motorista.

Rotas que levam o id de um usuário, cliente ou parceiro também conferem o Dono: só o próprio dono do recurso (ou um Admin) passa. Um cliente nunca lê a agenda de outro, por exemplo.

Erros e status HTTP

Erros de negócio voltam sempre no mesmo formato, com uma mensagem legível e um código estável para o seu código tratar:

{ "error": "Horário não encontrado.", "code": "Scheduling.NotFound" }
StatusQuando acontece
400Dados inválidos ou regra de negócio violada (ex.: faixas de horário sobrepostas).
401Sem token, token expirado ou inválido.
403Autenticado, mas sem o papel exigido ou sem ser dono do recurso.
404Recurso inexistente.
409Conflito de estado: horário já reservado, corrida já aceita, cadastro duplicado.
429Limite de requisições atingido. Espere e tente de novo.

Idempotência e limites

Idempotência

Em criações e mutações (POST, PUT, PATCH, DELETE), envie o header X-Idempotency-Key com um valor único por operação (um UUID, por exemplo). Se a mesma chave chegar de novo em até 24 horas, a API devolve a resposta original sem repetir a operação, com o header Idempotent-Replayed: true. Isso torna seguro repetir uma cobrança ou um agendamento após uma queda de rede.

Limites de requisição

GrupoLimite padrãoPor
Geral100 por minutousuário (ou IP)
Login e cadastro5 por minutoIP
Pagamentos10 por minutousuário (ou IP)
Emissão de token de tenant60 por minutoIP

O plano Enterprise pode ter limites próprios por tenant.

Tempo real e webhooks

Hubs em tempo real (SignalR)

  • /hubs/chat: mensagens de chat entre cliente e parceiro.
  • /hubs/mobility: posição do motorista e mudanças de status de corridas e entregas. O motorista envia a posição pelo método AtualizarLocalizacao, que é mais leve que o PATCH de localização.

Conecte com o mesmo Bearer token da API.

Webhooks dos gateways de pagamento

Asaas, Mercado Pago e PagBank avisam a Brief App quando um pagamento é confirmado, estornado ou contestado. A Brief App valida a assinatura HMAC de cada aviso (Asaas e Mercado Pago em hexadecimal, PagBank em Base64), atualiza a cobrança e libera ou bloqueia o repasse ao parceiro. Você não precisa implementar nada disso: basta consultar o status da cobrança ou reagir às notificações.

SDK, Sidecar e Ferramentas

  • Scalar API Reference: documentação interativa e exploratória acessível em /scalar/v1 tanto no Gateway quanto no Sidecar, com suporte completo a autenticação Bearer JWT e API Key (X-Api-Key).
  • Coleção Bruno: conjunto com mais de 30 requisições prontas na pasta api/bruno/, com ambientes configurados (local, staging e prod) e automação de token exchange no pós-resposta.
  • Qualquer linguagem: HTTP puro seguindo o contrato OpenAPI (/openapi/v1.json) ou gerando clientes em TypeScript, Python e C# com nossos scripts de codegen.
  • .NET: o pacote BriefApp.Sdk traz um cliente tipado, com renovação automática do token, retry seguro com X-Idempotency-Key e três modos de autenticação: conta de serviço, repasse do token do usuário ou híbrido.
  • Sidecar: um contêiner HTTP que envolve o SDK e expõe todos os módulos para qualquer linguagem na porta 5005, autenticado por X-Api-Key. Útil quando o seu backend não é .NET e você quer a renovação de token e os retries prontos.
Módulo

Identidade e acesso

Usuários, login, 2FA, papéis, aprovação de contas e verificação de documentos.

O módulo de identidade é o controle de usuários da sua startup. Ele guarda as contas, autentica com senha e 2FA obrigatório, emite os tokens de sessão e define quem pode fazer o quê por meio de papéis. Cadastros sensíveis (Admin e Parceiro) passam por aprovação, e contas podem ser suspensas ou bloqueadas a qualquer momento.

Conceitos

Usuário
Conta com e-mail único por tenant, nome, telefone, papéis e status.
Papel
Admin, Parceiro, Cliente, Membro, Financeiro, Suporte ou Motorista. Um usuário pode ter mais de um.
Status da conta
PendingApproval (aguardando aprovação), Active, Suspended, Blocked ou Rejected.
2FA (TOTP)
Código de 6 dígitos de um app autenticador. Obrigatório para todos; sem ele não há sessão.
Access / refresh token
Access de 15 minutos para chamar a API; refresh de 7 dias, trocado a cada renovação.
KYC
Consulta de CPF/CNPJ ou extração de dados de um PDF, usada para validar parceiros e motoristas.

Estados possíveis

Conta
  1. PendingApproval
  2. Active
  3. Suspended
  4. Blocked

Fluxo típico

  1. Cadastre o usuário com POST /api/auth/register informando o papel desejado.
  2. Se o papel for Admin ou Parceiro, um Admin aprova com PUT /api/auth/users/{id}/approve.
  3. O usuário faz login e, na primeira vez, configura o 2FA (setup e verify).
  4. Com o token de sessão, o app chama GET /api/auth/me para montar o perfil e as permissões na tela.
  5. Quando o access token expirar, troque pelo refresh com POST /api/auth/refresh.

Exemplo: Login com 2FA já configurado

Requisição
POST /api/auth/login
{ "email": "julia@exemplo.com", "password": "••••••••", "twoFactorCode": "482913" }
Resposta
200 OK
{ "accessToken": "eyJ…", "refreshToken": "q3V…",
  "accessTokenExpiresAt": "2026-10-15T13:15:00Z", "refreshTokenExpiresAt": "2026-10-22T13:00:00Z",
  "requiresTwoFactor": false, "requiresTwoFactorSetup": false, "userId": "7b1c…", "roles": ["Cliente"] }

Regras importantes

  • O login aceita 5 tentativas por minuto por IP.
  • Suspender ou bloquear um usuário revoga todos os refresh tokens dele na hora.
  • Ao conceder um papel (ex.: Motorista), o usuário passa a tê-lo no próximo login ou refresh.
  • Consultas de KYC trazem dados pessoais (LGPD) e são cobradas pelo provedor, por isso são restritas a Admin.

Referência de endpoints

Endpoints de autenticação e gestão de usuários. Rate limit para auth: 5 tentativas/min por IP (proteção brute-force).

POST /api/auth/login Autentica um usuário com email e senha. Se a conta ainda não tem 2FA configurado, retorna requiresTwoFactorSetup=true (e o userId) para o cliente ir direto para a configuração — 2FA é obrigatório para todas as contas. Se já tem 2FA habilitado, retorna requiresTwoFactor=true e um segundo passo com o código TOTP é necessário. Público

Autentica um usuário com email e senha. Se a conta ainda não tem 2FA configurado, retorna requiresTwoFactorSetup=true (e o userId) para o cliente ir direto para a configuração — 2FA é obrigatório para todas as contas. Se já tem 2FA habilitado, retorna requiresTwoFactor=true e um segundo passo com o código TOTP é necessário.

Permissão: Não exige token.

Corpo (JSON) · LoginRequest

CampoTipoObrigatórioDescrição
emailstringsim
passwordstringsim
twoFactorCodestringnão

Resposta · LoginResult

CampoTipoDescrição
accessTokenstring
refreshTokenstring
accessTokenExpiresAtdatetime
refreshTokenExpiresAtdatetime
requiresTwoFactorboolean
requiresTwoFactorSetupboolean
userIduuid
rolesstring[]
twoFactorSetupTokenstring

Status possíveis

  • 200 OK
  • 401 Não autenticado
  • 429 Limite de requisições
POST /api/auth/register Registra um novo usuário. Roles Admin/Parceiro requerem aprovação administrativa — ficam com status PendingApproval. Público

Registra um novo usuário. Roles Admin/Parceiro requerem aprovação administrativa — ficam com status PendingApproval.

Permissão: Não exige token.

Corpo (JSON) · RegisterUserRequest

CampoTipoObrigatórioDescrição
emailstringsim
passwordstringsim
fullNamestringsim
phoneNumberstringnão
requestedRolestringnão

Resposta · UserRegistrationResult

CampoTipoDescrição
iduuid
emailstring
fullNamestring
statusUserStatus
rolestring

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 409 Conflito de estado
POST /api/auth/refresh Renova o access token usando um refresh token válido. Público

Renova o access token usando um refresh token válido.

Permissão: Não exige token.

Corpo (JSON) · RefreshTokenRequest

CampoTipoObrigatórioDescrição
userIduuidsim
refreshTokenstringsim

Resposta · TokenResponse

CampoTipoDescrição
accessTokenstring
refreshTokenstring
accessTokenExpiresAtdatetime
refreshTokenExpiresAtdatetime

Status possíveis

  • 200 OK
  • 401 Não autenticado
GET /api/auth/me Retorna o perfil do usuário autenticado (lido do JWT). Autenticado

Retorna o perfil do usuário autenticado (lido do JWT).

Permissão: Exige um token válido (usuário ou tenant).

Resposta · UserProfileResponse

CampoTipoDescrição
userIdstring
emailstring
fullNamestring
rolesstring[]
partnerIdstring

Status possíveis

  • 200 OK
  • 401 Não autenticado
POST /api/auth/2fa/setup Gera a chave secreta e o QR Code URI para configurar o autenticador TOTP. Público

Gera a chave secreta e o QR Code URI para configurar o autenticador TOTP.

Permissão: Não exige token.

Corpo (JSON) · Setup2faRequest

CampoTipoObrigatórioDescrição
userIduuidsim
setupTokenstringnão

Resposta · Enable2faResult

CampoTipoDescrição
secretKeystring
qrCodeUristring

Status possíveis

  • 200 OK
  • 404 Não encontrado
POST /api/auth/2fa/verify Confirma o código TOTP, habilita o 2FA permanentemente na conta e autentica a sessão (retorna os mesmos tokens de um login bem-sucedido). Público

Confirma o código TOTP, habilita o 2FA permanentemente na conta e autentica a sessão (retorna os mesmos tokens de um login bem-sucedido).

Permissão: Não exige token.

Corpo (JSON) · Verify2faRequest

CampoTipoObrigatórioDescrição
userIduuidsim
secretKeystringsim
codestringsim
setupTokenstringnão

Resposta · Verify2faResult

CampoTipoDescrição
accessTokenstring
refreshTokenstring
accessTokenExpiresAtdatetime
refreshTokenExpiresAtdatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
PUT /api/auth/users/{userId}/approve Aprova um usuário com status PendingApproval (apenas Admin). Admin

Aprova um usuário com status PendingApproval (apenas Admin).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
userIdrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 403 Sem permissão
  • 404 Não encontrado
PUT /api/auth/users/{userId}/reject Rejeita um cadastro com status PendingApproval (apenas Admin). Admin

Rejeita um cadastro com status PendingApproval (apenas Admin).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
userIdrotauuid

Corpo (JSON) · RejectUserRequest

CampoTipoObrigatórioDescrição
reasonstringsim

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
GET /api/auth/users Lista usuários com paginação e filtros opcionais de papel, status e busca (nome, e-mail, telefone). Admin

Lista usuários com paginação e filtros opcionais de papel, status e busca (nome, e-mail, telefone).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
rolequerystring
statusqueryUserStatus
searchquerystring
pagequeryinteger
pageSizequeryinteger

Resposta · UserPageDto

CampoTipoDescrição
itemsUserSummaryDto[]
pageinteger
pageSizeinteger
totalinteger

Status possíveis

  • 200 OK
  • 400 Dados inválidos
GET /api/auth/users/{userId} Detalhe de um usuário. O próprio usuário ou um Admin. Autenticado Dono

Detalhe de um usuário. O próprio usuário ou um Admin.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
userIdrotauuid

Resposta · UserSummaryDto

CampoTipoDescrição
iduuid
emailstring
fullNamestring
phoneNumberstring
statusstring
rolesstring[]
isTwoFactorEnabledboolean
createdAtdatetime
lastLoginAtdatetime

Status possíveis

  • 200 OK
  • 403 Sem permissão
  • 404 Não encontrado
PUT /api/auth/users/{userId}/status Muda o status de um usuário já aprovado: Active, Suspended ou Blocked (apenas Admin). Suspender/bloquear revoga os refresh tokens. Admin

Muda o status de um usuário já aprovado: Active, Suspended ou Blocked (apenas Admin). Suspender/bloquear revoga os refresh tokens.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
userIdrotauuid

Corpo (JSON) · ChangeUserStatusRequest

CampoTipoObrigatórioDescrição
statusstringsim
reasonstringnão

Resposta · UserSummaryDto

CampoTipoDescrição
iduuid
emailstring
fullNamestring
phoneNumberstring
statusstring
rolesstring[]
isTwoFactorEnabledboolean
createdAtdatetime
lastLoginAtdatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado
PUT /api/auth/users/{userId}/roles/{role} Concede um papel ao usuário (apenas Admin) — ex.: Motorista ou Parceiro depois que o cadastro operacional foi aprovado. O usuário recebe o papel no próximo refresh/login. Idempotente. Admin

Concede um papel ao usuário (apenas Admin) — ex.: Motorista ou Parceiro depois que o cadastro operacional foi aprovado. O usuário recebe o papel no próximo refresh/login. Idempotente.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
userIdrotauuid
rolerotastring

Resposta · UserSummaryDto

CampoTipoDescrição
iduuid
emailstring
fullNamestring
phoneNumberstring
statusstring
rolesstring[]
isTwoFactorEnabledboolean
createdAtdatetime
lastLoginAtdatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado
DELETE /api/auth/users/{userId}/roles/{role} Remove um papel do usuário (Admin). Não é possível remover o próprio papel de Admin. Admin

Remove um papel do usuário (Admin). Não é possível remover o próprio papel de Admin.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
userIdrotauuid
rolerotastring

Resposta · UserSummaryDto

CampoTipoDescrição
iduuid
emailstring
fullNamestring
phoneNumberstring
statusstring
rolesstring[]
isTwoFactorEnabledboolean
createdAtdatetime
lastLoginAtdatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado
PUT /api/auth/users/{userId}/profile Atualiza nome e/ou telefone. O próprio usuário ou um Admin; campos nulos ficam como estão. Autenticado Dono

Atualiza nome e/ou telefone. O próprio usuário ou um Admin; campos nulos ficam como estão.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
userIdrotauuid

Corpo (JSON) · UpdateUserProfileRequest

CampoTipoObrigatórioDescrição
fullNamestringnão
phoneNumberstringnão

Resposta · UserSummaryDto

CampoTipoDescrição
iduuid
emailstring
fullNamestring
phoneNumberstring
statusstring
rolesstring[]
isTwoFactorEnabledboolean
createdAtdatetime
lastLoginAtdatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 403 Sem permissão
  • 404 Não encontrado
POST /api/auth/firebase-login Verifica um Firebase ID token e sincroniza o usuário (cria no primeiro login). Público

Verifica um Firebase ID token e sincroniza o usuário (cria no primeiro login).

Permissão: Não exige token.

Corpo (JSON) · FirebaseLoginRequest

CampoTipoObrigatórioDescrição
idTokenstringsim

Endpoint OAuth2/OpenID Connect para emissão de tokens de Tenant (client credentials e on-behalf-of).

POST /api/tenants/token Emite um token de acesso JWT (10 min) a partir de uma API Key válida do Tenant. Suporta formatos JSON e application/x-www-form-urlencoded. Público

Emite um token de acesso JWT (10 min) a partir de uma API Key válida do Tenant. Suporta formatos JSON e application/x-www-form-urlencoded.

Permissão: Não exige token.

Consulta KYC (CPF/CNPJ e PDF) com chaveamento dinâmico via HashiCorp Vault (ApiBrasil e PdfExtractor). Restrito a Admin: a resposta traz dados pessoais (LGPD) e cada consulta é cobrada pelo provedor.

POST /api/kyc/consulta Consulta um CPF ou CNPJ no provedor de KYC configurado no Vault para o tenant. Pontuação (., -, /) é aceita e removida. Admin

Consulta um CPF ou CNPJ no provedor de KYC configurado no Vault para o tenant. Pontuação (., -, /) é aceita e removida.

Permissão: Exige o papel Admin (ou escopo admin).

Corpo (JSON) · ConsultaKycRequest

CampoTipoObrigatórioDescrição
tipoDocumentostringsim
documentostringsim

Resposta · ConsultaKycResponse

CampoTipoDescrição
sucessoboolean
statusstring
provedorstring
dadosJsonElement
mensagemErrostring

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 503 Indisponível
POST /api/kyc/consulta/pdf Consulta e extração estruturada de dados KYC a partir de um documento PDF. Admin

Consulta e extração estruturada de dados KYC a partir de um documento PDF.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
fileformarquivo

Resposta · ConsultaKycResponse

CampoTipoDescrição
sucessoboolean
statusstring
provedorstring
dadosJsonElement
mensagemErrostring

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 503 Indisponível
Módulo

Agendamento

Grade semanal, exceções, horários livres, reservas, remarcação, conclusão e no-show.

O agendamento resolve o calendário de qualquer negócio de serviço. O parceiro define uma grade semanal (ex.: segunda a sexta, das 9h às 18h, atendimentos de 60 minutos) e marca exceções como folgas e feriados. A API gera os horários das próximas semanas a partir dessa grade, e o cliente reserva um horário livre, pagando com créditos da assinatura ou de forma avulsa. Remarcação, cancelamento com política de estorno, conclusão e no-show fecham o ciclo.

Conceitos

Grade semanal
Faixas por dia da semana (Monday … Sunday) com hora de início, fim e duração do atendimento, no fuso do parceiro.
Exceção
Data indisponível (folga, feriado, férias). Bloqueia os horários livres daquela data; os já reservados continuam.
Horário (slot)
Um intervalo concreto da agenda: Disponivel, Reservado, Bloqueado ou Cancelado.
Agendamento
A reserva de um horário por um cliente, ligada a uma oferta do catálogo.
Tipo de pagamento
Credito (debita créditos da assinatura ou pacote) ou Avulso (valor pago na hora).
Política de estorno
Total, Parcial ou SemEstorno, aplicada automaticamente ao cancelar.

Estados possíveis

Horário
  1. Disponivel
  2. Reservado
  3. Bloqueado
  4. Cancelado
Agendamento
  1. PendentePagamento
  2. Confirmado
  3. EmAndamento
  4. Concluido
  5. Cancelado
  6. NoShow

Fluxo típico

  1. O parceiro define a grade com PUT /api/scheduling/partners/{partnerId}/availability/weekly.
  2. Marca folgas e feriados com POST …/availability/exceptions.
  3. Gera os horários das próximas 1 a 12 semanas com POST …/slots/generate. Pode repetir: horários já existentes não são duplicados.
  4. O cliente vê os horários livres numa data com GET /api/scheduling/availability (público, cache de 30 s).
  5. O cliente reserva com POST /api/scheduling/appointments, escolhendo pagar com créditos ou avulso.
  6. Se precisar, remarca para outro horário livre (PUT …/reschedule) ou cancela (DELETE …/appointments/{id}), com estorno pela política.
  7. Depois do atendimento, o parceiro conclui (…/complete) ou registra que o cliente faltou (…/no-show).

Exemplo: Definir a grade semanal do parceiro

Requisição
PUT /api/scheduling/partners/9f2e…/availability/weekly
{ "regras": [
  { "diaSemana": "Monday",  "horaInicio": "09:00", "horaFim": "18:00", "duracaoMinutos": 60 },
  { "diaSemana": "Saturday", "horaInicio": "09:00", "horaFim": "13:00", "duracaoMinutos": 30 }
] }
Resposta
200 OK
[ { "id": "…", "diaSemana": "Monday", "horaInicio": "09:00:00", "horaFim": "18:00:00", "duracaoMinutos": 60 }, … ]

Regras importantes

  • Faixas do mesmo dia não podem se sobrepor, e a duração precisa caber na faixa.
  • Enviar a grade substitui a anterior inteira; lista vazia limpa a grade.
  • Informe utcOffsetMinutes (ex.: -180 para Brasília) ao gerar horários e criar exceções.
  • O calendário do parceiro (GET …/slots) aceita no máximo 62 dias por consulta.
  • Só o próprio parceiro ou um Admin gerencia a agenda; o cliente só vê os próprios agendamentos.

Referência de endpoints

Endpoints de agendamento — disponibilidade, marcação, cancelamento e remarcação.

GET /api/scheduling/availability Consulta os slots de horário disponíveis para um parceiro em uma data. Cache de 30s, variado por partnerId + date. Público

Consulta os slots de horário disponíveis para um parceiro em uma data. Cache de 30s, variado por partnerId + date.

Permissão: Não exige token.

Parâmetros

NomeOndeTipoDescrição
partnerIdqueryuuid
datequerydate

Resposta · AvailabilityResponse

CampoTipoDescrição
partnerIduuid
datedate
slotsSlotResponse[]

Status possíveis

  • 200 OK
POST /api/scheduling/appointments Cria um agendamento consumindo um slot disponível. Pagamento pode ser via créditos ou avulso. Autenticado Dono

Cria um agendamento consumindo um slot disponível. Pagamento pode ser via créditos ou avulso.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · BookAppointmentRequest

CampoTipoObrigatórioDescrição
clienteIduuidsim
parceiroIduuidsim
ofertaIduuidsim
slotIduuidsim
tipoPagamentostringsim
valorAvulsodecimalnãoPadrão: 0.
quantidadeCreditosintegernãoPadrão: 1.

Resposta · AgendamentoResponse

CampoTipoDescrição
iduuid
clienteIduuid
parceiroIduuid
dataHoraIniciodatetime
statusstring

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 409 Conflito de estado
GET /api/scheduling/appointments/{appointmentId} Retorna os detalhes de um agendamento pelo ID. Autenticado Dono

Retorna os detalhes de um agendamento pelo ID.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
appointmentIdrotauuid

Resposta · AgendamentoResponse

CampoTipoDescrição
iduuid
clienteIduuid
parceiroIduuid
dataHoraIniciodatetime
statusstring

Status possíveis

  • 200 OK
  • 404 Não encontrado
DELETE /api/scheduling/appointments/{appointmentId} Cancela um agendamento. Aplica política de estorno de créditos conforme configuração. Autenticado

Cancela um agendamento. Aplica política de estorno de créditos conforme configuração.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
appointmentIdrotauuid

Corpo (JSON) · CancelAppointmentRequest

CampoTipoObrigatórioDescrição
motivostringsim

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
PUT /api/scheduling/appointments/{appointmentId}/reschedule Remarca um agendamento para outro slot disponível. Autenticado

Remarca um agendamento para outro slot disponível.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
appointmentIdrotauuid

Corpo (JSON) · RescheduleRequest

CampoTipoObrigatórioDescrição
novoSlotIduuidsim

Resposta · AgendamentoResponse

CampoTipoDescrição
iduuid
clienteIduuid
parceiroIduuid
dataHoraIniciodatetime
statusstring

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado

Agenda do parceiro (grade semanal, exceções, geração e bloqueio de horários), listagens de agendamentos e conclusão. As operações de agenda são do próprio parceiro ou de um Admin.

GET /api/scheduling/partners/{partnerId}/availability/weekly Grade semanal de atendimento do parceiro (horários locais do parceiro). Parceiro Dono

Grade semanal de atendimento do parceiro (horários locais do parceiro).

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Resposta · IReadOnlyList<RegraSemanalResponse>

CampoTipoDescrição
iduuid
diaSemanastring
horaIniciotime (HH:mm)
horaFimtime (HH:mm)
duracaoMinutosinteger

Status possíveis

  • 200 OK
PUT /api/scheduling/partners/{partnerId}/availability/weekly Substitui a grade semanal inteira. Faixas de um mesmo dia não podem se sobrepor e a duração precisa caber na faixa. Lista vazia limpa a grade. DiaSemana: Monday … Sunday. Parceiro Dono

Substitui a grade semanal inteira. Faixas de um mesmo dia não podem se sobrepor e a duração precisa caber na faixa. Lista vazia limpa a grade. DiaSemana: Monday … Sunday.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Corpo (JSON) · SetWeeklyAvailabilityRequest

CampoTipoObrigatórioDescrição
regrasRegraSemanalRequest[]sim

Resposta · IReadOnlyList<RegraSemanalResponse>

CampoTipoDescrição
iduuid
diaSemanastring
horaIniciotime (HH:mm)
horaFimtime (HH:mm)
duracaoMinutosinteger

Status possíveis

  • 200 OK
  • 400 Dados inválidos
GET /api/scheduling/partners/{partnerId}/availability/exceptions Lista as exceções (folgas, feriados, férias) do parceiro. Parceiro Dono

Lista as exceções (folgas, feriados, férias) do parceiro.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Resposta · IReadOnlyList<ExcecaoResponse>

CampoTipoDescrição
iduuid
datadate
motivostring

Status possíveis

  • 200 OK
POST /api/scheduling/partners/{partnerId}/availability/exceptions Marca uma data como indisponível (folga, feriado, férias). Os horários livres dessa data que já existem são bloqueados; os já reservados permanecem. UtcOffsetMinutes: fuso do parceiro (ex.: -180). Parceiro Dono

Marca uma data como indisponível (folga, feriado, férias). Os horários livres dessa data que já existem são bloqueados; os já reservados permanecem. UtcOffsetMinutes: fuso do parceiro (ex.: -180).

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Corpo (JSON) · AddExceptionRequest

CampoTipoObrigatórioDescrição
datadatesim
motivostringsim
utcOffsetMinutesintegernãoPadrão: 0.

Resposta · ExcecaoCriadaResponse

CampoTipoDescrição
excecaoExcecaoResponse
slotsBloqueadosinteger

Status possíveis

  • 201 Criado
  • 409 Conflito de estado
DELETE /api/scheduling/partners/{partnerId}/availability/exceptions/{date} Remove a exceção da data. Os horários que ela bloqueou continuam bloqueados até serem liberados. Parceiro Dono

Remove a exceção da data. Os horários que ela bloqueou continuam bloqueados até serem liberados.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid
daterotadate

Status possíveis

  • 204 Sem conteúdo
  • 404 Não encontrado
POST /api/scheduling/partners/{partnerId}/slots/generate Gera os horários das próximas Semanas (1 a 12) a partir de DataInicio (data local do parceiro), pela grade semanal e respeitando as exceções. Idempotente: horários que já existem não são recriados. Parceiro Dono

Gera os horários das próximas Semanas (1 a 12) a partir de DataInicio (data local do parceiro), pela grade semanal e respeitando as exceções. Idempotente: horários que já existem não são recriados.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Corpo (JSON) · GenerateSlotsRequest

CampoTipoObrigatórioDescrição
dataIniciodatesim
semanasintegersim
utcOffsetMinutesintegernãoPadrão: 0.

Resposta · GeracaoSlotsResponse

CampoTipoDescrição
geradosinteger
ignoradosinteger
dedate
atedate

Status possíveis

  • 200 OK
  • 400 Dados inválidos
GET /api/scheduling/partners/{partnerId}/slots Calendário do parceiro: todos os horários (livres, reservados e bloqueados) em [from, to). Máx. 62 dias. Parceiro Dono

Calendário do parceiro: todos os horários (livres, reservados e bloqueados) em [from, to). Máx. 62 dias.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid
fromquerydatetime
toquerydatetime

Resposta · IReadOnlyList<SlotDetalheResponse>

CampoTipoDescrição
iduuid
parceiroIduuid
iniciodatetime
fimdatetime
statusstring
motivoBloqueiostring

Status possíveis

  • 200 OK
  • 400 Dados inválidos
POST /api/scheduling/slots/{slotId}/block Bloqueia um horário livre, com motivo (ex.: almoço, compromisso). Parceiro Dono

Bloqueia um horário livre, com motivo (ex.: almoço, compromisso).

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
slotIdrotauuid

Corpo (JSON) · BlockSlotRequest

CampoTipoObrigatórioDescrição
motivostringsim

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
POST /api/scheduling/slots/{slotId}/unblock Libera um horário bloqueado, que volta a ficar disponível para reserva. Parceiro Dono

Libera um horário bloqueado, que volta a ficar disponível para reserva.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
slotIdrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
GET /api/scheduling/appointments/client/{clientId} Agendamentos de um cliente, do mais recente ao mais antigo. status: PendentePagamento, Confirmado, EmAndamento, Concluido, Cancelado, NoShow. Autenticado Dono

Agendamentos de um cliente, do mais recente ao mais antigo. status: PendentePagamento, Confirmado, EmAndamento, Concluido, Cancelado, NoShow.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
clientIdrotauuid
statusquerystring
pagequeryinteger
pageSizequeryinteger

Resposta · AgendamentoPaginaResponse

CampoTipoDescrição
itensAgendamentoDetalheResponse[]
paginainteger
tamanhointeger
totalinteger

Status possíveis

  • 200 OK
  • 400 Dados inválidos
GET /api/scheduling/appointments/partner/{partnerId} Agendamentos de um parceiro no intervalo [from, to) (UTC), do mais cedo ao mais tarde. Parceiro Dono

Agendamentos de um parceiro no intervalo [from, to) (UTC), do mais cedo ao mais tarde.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid
fromquerydatetime
toquerydatetime
statusquerystring
pagequeryinteger
pageSizequeryinteger

Resposta · AgendamentoPaginaResponse

CampoTipoDescrição
itensAgendamentoDetalheResponse[]
paginainteger
tamanhointeger
totalinteger

Status possíveis

  • 200 OK
  • 400 Dados inválidos
POST /api/scheduling/appointments/{appointmentId}/complete O parceiro conclui o atendimento (agendamento confirmado ou em andamento). Parceiro Dono

O parceiro conclui o atendimento (agendamento confirmado ou em andamento).

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
appointmentIdrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
POST /api/scheduling/appointments/{appointmentId}/no-show O parceiro registra que o cliente não compareceu. Parceiro Dono

O parceiro registra que o cliente não compareceu.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
appointmentIdrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
Módulo

Assinaturas e recorrência

Planos, assinaturas com trial, renovação, inadimplência, cancelamento e ledger de créditos.

O Billing transforma o seu produto em receita recorrente. Você cria planos com preço, periodicidade e quantidade de créditos por ciclo; o cliente assina, opcionalmente começando com trial; a cada renovação os créditos do ciclo entram no saldo dele. Se uma cobrança falhar, a assinatura fica inadimplente durante o prazo de carência do plano antes de ser cancelada. Os créditos vivem num ledger de dupla entrada: toda entrada, uso, estorno e expiração fica registrada, e o saldo nunca é editado à mão.

Conceitos

Plano
Nome, preço, periodicidade (Mensal, Trimestral, Semestral, Anual), créditos por ciclo, dias de carência e validade dos créditos.
Status do plano
Ativo (aceita novas assinaturas), Inativo ou Descontinuado.
Assinatura
O vínculo de um cliente com um plano. Guarda o valor contratado, a vigência e o ciclo atual.
Trial
Período de teste antes da primeira cobrança.
Carência
Dias que a assinatura inadimplente continua de pé esperando o pagamento.
Ledger de créditos
Extrato imutável: EntradaAssinatura, EntradaPacote, EntradaBonus, DebitoUso, Estorno e Expiracao.

Estados possíveis

Assinatura
  1. Trial
  2. Ativa
  3. Inadimplente
  4. Pausada
  5. Cancelada

Fluxo típico

  1. Crie os planos com POST /api/billing/plans (papel Financeiro).
  2. O app lista os planos ativos com GET /api/billing/plans para a tela de preços.
  3. O cliente assina com POST /api/billing/subscriptions, com ou sem trial.
  4. A cada renovação a cobrança é gerada e, confirmada pelo gateway, os créditos do ciclo entram no saldo.
  5. O consumo (ex.: um agendamento pago com créditos) debita do saldo; cancelamentos estornam.
  6. O cliente cancela com POST …/subscriptions/{id}/cancel, na hora ou ao fim do ciclo pago.

Exemplo: Criar um plano mensal com créditos

Requisição
POST /api/billing/plans
{ "nome": "Pro", "preco": 89.90, "periodicidade": "Mensal", "creditosPorCiclo": 8,
  "descricao": "8 sessões por mês", "diasCarenciaInadimplencia": 7, "validadeDiasCreditos": 60 }
Resposta
201 Created
{ "id": "c41d…", "nome": "Pro", "descricao": "8 sessões por mês", "preco": 89.90,
  "periodicidade": "Mensal", "creditosPorCiclo": 8, "diasCarenciaInadimplencia": 7,
  "validadeDiasCreditos": 60, "status": "Ativo" }

Regras importantes

  • Alterar o preço de um plano vale só para novas assinaturas; quem já assina mantém o valor contratado.
  • Upgrade e downgrade trocam o plano com proporcionalidade sobre o ciclo vigente.
  • Quem não é Admin ou Financeiro só enxerga os planos ativos.
  • Adicionar, debitar e estornar créditos manualmente exige o papel Financeiro.

Referência de endpoints

Endpoints de billing — créditos e assinaturas.

GET /api/billing/credits/{clienteId} Consulta o saldo de créditos disponível de um cliente. Autenticado Dono

Consulta o saldo de créditos disponível de um cliente.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
clienteIdrotauuid

Resposta · SaldoCreditosResponse

CampoTipoDescrição
clienteIduuid
saldointeger

Status possíveis

  • 200 OK
POST /api/billing/credits/{clienteId}/add Adiciona créditos ao saldo de um cliente (ex: compra de pacote). Financeiro

Adiciona créditos ao saldo de um cliente (ex: compra de pacote).

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
clienteIdrotauuid

Corpo (JSON) · AddCreditsRequest

CampoTipoObrigatórioDescrição
quantidadeintegersim
descricaostringsim
referenciaIduuidnão
validadeDiasintegernão

Resposta · CreditoResponse

CampoTipoDescrição
iduuid
clienteIduuid
saldointeger

Status possíveis

  • 200 OK
  • 400 Dados inválidos
POST /api/billing/credits/{clienteId}/debit Debita créditos do saldo de um cliente (ex: consumo de agendamento). Financeiro

Debita créditos do saldo de um cliente (ex: consumo de agendamento).

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
clienteIdrotauuid

Corpo (JSON) · DebitCreditsRequest

CampoTipoObrigatórioDescrição
quantidadeintegersim
motivostringsim
referenciaIduuidnão

Resposta · CreditoResponse

CampoTipoDescrição
iduuid
clienteIduuid
saldointeger

Status possíveis

  • 200 OK
  • 400 Dados inválidos
POST /api/billing/credits/{clienteId}/refund Estorna créditos debitados (ex: cancelamento de agendamento). Financeiro

Estorna créditos debitados (ex: cancelamento de agendamento).

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
clienteIdrotauuid

Corpo (JSON) · RefundCreditsRequest

CampoTipoObrigatórioDescrição
quantidadeintegersim
motivostringsim
referenciaIduuidnão

Resposta · CreditoResponse

CampoTipoDescrição
iduuid
clienteIduuid
saldointeger

Status possíveis

  • 200 OK
  • 400 Dados inválidos
GET /api/billing/plans Lista os planos. Quem não é Admin/Financeiro só vê os ativos (os que aceitam novas assinaturas); staff pode pedir também os inativos e descontinuados com includeInactive=true. Autenticado

Lista os planos. Quem não é Admin/Financeiro só vê os ativos (os que aceitam novas assinaturas); staff pode pedir também os inativos e descontinuados com includeInactive=true.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
includeInactivequeryboolean

Resposta · IReadOnlyList<PlanoResponse>

CampoTipoDescrição
iduuid
nomestring
descricaostring
precodecimal
periodicidadestring
creditosPorCiclointeger
diasCarenciaInadimplenciainteger
validadeDiasCreditosinteger
statusstring

Status possíveis

  • 200 OK
GET /api/billing/plans/{planId} Detalhe de um plano. Autenticado

Detalhe de um plano.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
planIdrotauuid

Resposta · PlanoResponse

CampoTipoDescrição
iduuid
nomestring
descricaostring
precodecimal
periodicidadestring
creditosPorCiclointeger
diasCarenciaInadimplenciainteger
validadeDiasCreditosinteger
statusstring

Status possíveis

  • 200 OK
  • 404 Não encontrado
POST /api/billing/plans Cria um plano com preço, periodicidade, créditos por ciclo, carência de inadimplência e validade dos créditos. Financeiro

Cria um plano com preço, periodicidade, créditos por ciclo, carência de inadimplência e validade dos créditos.

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Corpo (JSON) · CreatePlanRequest

CampoTipoObrigatórioDescrição
nomestringsim
precodecimalsim
periodicidadestringsim
creditosPorCiclointegersim
descricaostringnão
diasCarenciaInadimplenciaintegernãoPadrão: 3.
validadeDiasCreditosintegernãoPadrão: 365.

Resposta · PlanoResponse

CampoTipoDescrição
iduuid
nomestring
descricaostring
precodecimal
periodicidadestring
creditosPorCiclointeger
diasCarenciaInadimplenciainteger
validadeDiasCreditosinteger
statusstring

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 409 Conflito de estado
PUT /api/billing/plans/{planId} Atualiza nome, descrição, preço e créditos. Quem já assina mantém o valor contratado; a mudança vale para novas assinaturas. Financeiro

Atualiza nome, descrição, preço e créditos. Quem já assina mantém o valor contratado; a mudança vale para novas assinaturas.

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
planIdrotauuid

Corpo (JSON) · UpdatePlanRequest

CampoTipoObrigatórioDescrição
nomestringsim
precodecimalsim
creditosPorCiclointegersim
descricaostringnão

Resposta · PlanoResponse

CampoTipoDescrição
iduuid
nomestring
descricaostring
precodecimal
periodicidadestring
creditosPorCiclointeger
diasCarenciaInadimplenciainteger
validadeDiasCreditosinteger
statusstring

Status possíveis

  • 200 OK
  • 404 Não encontrado
PATCH /api/billing/plans/{planId}/status Muda o status do plano: Ativo, Inativo ou Descontinuado. Só planos ativos aceitam novas assinaturas. Financeiro

Muda o status do plano: Ativo, Inativo ou Descontinuado. Só planos ativos aceitam novas assinaturas.

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
planIdrotauuid

Corpo (JSON) · SetPlanStatusRequest

CampoTipoObrigatórioDescrição
statusstringsim

Resposta · PlanoResponse

CampoTipoDescrição
iduuid
nomestring
descricaostring
precodecimal
periodicidadestring
creditosPorCiclointeger
diasCarenciaInadimplenciainteger
validadeDiasCreditosinteger
statusstring

Status possíveis

  • 200 OK
  • 404 Não encontrado
POST /api/billing/subscriptions Cria uma nova assinatura para um cliente. Autenticado Dono

Cria uma nova assinatura para um cliente.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · CreateSubscriptionRequest

CampoTipoObrigatórioDescrição
clienteIduuidsim
planoIduuidsim
iniciarComoTrialbooleannãoPadrão: false.

Resposta · AssinaturaResponse

CampoTipoDescrição
iduuid
clienteIduuid
statusstring
dataIniciodatetime
dataRenovacaodatetime

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 409 Conflito de estado
GET /api/billing/subscriptions/{clienteId} Consulta a assinatura ativa de um cliente. Autenticado Dono

Consulta a assinatura ativa de um cliente.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
clienteIdrotauuid

Resposta · AssinaturaResponse

CampoTipoDescrição
iduuid
clienteIduuid
statusstring
dataIniciodatetime
dataRenovacaodatetime

Status possíveis

  • 200 OK
  • 404 Não encontrado
GET /api/billing/subscriptions Lista todas as assinaturas da plataforma (Financeiro). Financeiro

Lista todas as assinaturas da plataforma (Financeiro).

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
statusquerystring
planIdqueryuuid
pagequeryinteger
pageSizequeryinteger

Resposta · AssinaturaPaginaResponse

CampoTipoDescrição
itensAssinaturaDetalheResponse[]
paginainteger
tamanhointeger
totalinteger

Status possíveis

  • 200 OK
  • 400 Dados inválidos
GET /api/billing/subscriptions/client/{clienteId} Histórico de assinaturas de um cliente, incluindo as canceladas. Autenticado Dono

Histórico de assinaturas de um cliente, incluindo as canceladas.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
clienteIdrotauuid

Resposta · IReadOnlyList<AssinaturaDetalheResponse>

CampoTipoDescrição
iduuid
clienteIduuid
planoIduuid
valorRecorrentedecimal
statusstring
cicloAtualinteger
dataIniciodatetime
dataFimVigenciadatetime
proximaCobrancadatetime
dataCancelamentodatetime
motivoCancelamentostring
tentativasCobrancaFalhadasinteger

Status possíveis

  • 200 OK
POST /api/billing/subscriptions/{assinaturaId}/cancel Cancela uma assinatura (imediatamente ou ao fim do ciclo vigente). Autenticado Dono

Cancela uma assinatura (imediatamente ou ao fim do ciclo vigente).

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
assinaturaIdrotauuid

Corpo (JSON) · CancelSubscriptionRequest

CampoTipoObrigatórioDescrição
clienteIduuidsim
motivostringsim
imediatobooleannãoPadrão: false.

Resposta · AssinaturaResponse

CampoTipoDescrição
iduuid
clienteIduuid
statusstring
dataIniciodatetime
dataRenovacaodatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 403 Sem permissão
  • 404 Não encontrado
Módulo

Pagamentos, split e repasses

Cobranças PIX, boleto e cartão, estornos, split com parceiros, saques e disputas.

O módulo de pagamentos cobra o cliente por PIX, boleto ou cartão em três gateways (Asaas, Mercado Pago e PagBank), escolhidos automaticamente ou por configuração. Cada cobrança pode ter split: a parte do parceiro fica registrada e é liberada quando o gateway confirma o pagamento. O parceiro acompanha o extrato e pede saques para a chave PIX. Disputas entre cliente e parceiro seguem um fluxo de reembolso com decisão do parceiro e mediação do Admin.

Conceitos

Cobrança
O registro do pagamento na Brief App. Tem o id interno (cobrancaId) e o id do gateway (transactionId).
Split
A divisão de uma cobrança: valor bruto, taxa da plataforma e valor líquido do parceiro.
Status do split
Pendente, Liquidado (repasse confirmado), Bloqueado (chargeback, fraude, disputa) ou Cancelado.
Saque
Pedido do parceiro para transferir o saldo a uma chave PIX, aprovado pelo Financeiro.
Reembolso
Solicitação do cliente sobre um agendamento: o parceiro aprova ou rejeita, e o cliente pode contestar para o Admin.

Estados possíveis

Split
  1. Pendente
  2. Liquidado
  3. Bloqueado
  4. Cancelado

Fluxo típico

  1. Crie a cobrança com POST /api/payments, informando valor, pagador e o percentual de repasse ao parceiro.
  2. Mostre ao cliente o QR Code PIX, o boleto ou o checkout do cartão devolvidos na resposta.
  3. O gateway confirma pelo webhook; a cobrança muda de status e o split é liquidado.
  4. Consulte o status quando quiser com GET /api/payments/{transactionId}/status, sem ir ao gateway.
  5. O parceiro vê o extrato em GET /api/payments/parceiros/{id}/repasses e pede saque em POST /api/transfers.

Exemplo: Cobrança PIX com repasse de 80% ao parceiro

Requisição
POST /api/payments
X-Idempotency-Key: 5c0e2a5e-…
{ "pedidoId": "…", "clienteId": "…", "parceiroId": "…", "valorTotal": 120.00, "metodo": "Pix",
  "payerEmail": "julia@exemplo.com", "payerName": "Júlia Andrade", "payerCpfCnpj": "123.456.789-09",
  "percentualRepasseParceiro": 80, "taxaFixaPlataforma": 0.50 }
Resposta
200 OK
{ "success": true, "transactionId": "pay_8x2…", "status": "Pending", "provedor": "Asaas",
  "pixQrCode": "iVBORw0KGgo…", "pixQrCodeText": "000201…", "boletoUrl": null, "paymentUrl": null }

Regras importantes

  • Não confunda os ids: o status usa o transactionId do gateway; o estorno usa o cobrancaId da Brief App.
  • Pagamentos aceitam 10 requisições por minuto por usuário. Sempre envie X-Idempotency-Key.
  • Um chargeback bloqueia o split automaticamente, antes que o dinheiro chegue ao parceiro.
  • Estornos, liquidação e bloqueio manual de splits exigem o papel Financeiro.

Referência de endpoints

Endpoints de pagamento — suporta Asaas, Mercado Pago e PagBank. Rate limit: 10 req/min por token (anti-fraude).

POST /api/payments Inicia um pagamento (PIX, Boleto ou Cartão de Crédito). Suporta os gateways: Asaas, MercadoPago e PagBank. Se omitido, o gateway é selecionado dinamicamente via Vault. Autenticado Dono

Inicia um pagamento (PIX, Boleto ou Cartão de Crédito). Suporta os gateways: Asaas, MercadoPago e PagBank. Se omitido, o gateway é selecionado dinamicamente via Vault.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · CriarPagamentoRequest

CampoTipoObrigatórioDescrição
pedidoIduuidsim
clienteIduuidsim
parceiroIduuidsim
valorTotaldecimalsim
metodostringsimPix | Boleto | CreditCard
provedorstringnãoAsaas | MercadoPago | PagBank (opcional: se omitido, resolvido via Vault)
payerEmailstringnão
payerNamestringnão
payerCpfCnpjstringnão
percentualRepasseParceirodecimalnãoPadrão: 85.
taxaFixaPlataformadecimalnãoPadrão: 0.
dataVencimentodatetimenão

Resposta · PaymentResultResponse

CampoTipoDescrição
successboolean
transactionIdstring
statusstring
provedorstring
pixQrCodestringImagem Base64 do QR Code PIX (somente para Pix)
pixQrCodeTextstringPayload EMV do PIX para copiar e colar
boletoUrlstringURL do PDF do Boleto (somente para Boleto)
boletoBarcodestringCódigo de barras do Boleto
paymentUrlstringURL de pagamento (somente para CreditCard)
errorMessagestring
cobrancaIduuidId interno da cobrança — use este valor (não o TransactionId) para solicitar estorno.

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 429 Limite de requisições
POST /api/payments/{cobrancaId}/refund Solicita estorno total ou parcial de um pagamento. O gateway correto é selecionado automaticamente com base no registro da cobrança. Financeiro

Solicita estorno total ou parcial de um pagamento. O gateway correto é selecionado automaticamente com base no registro da cobrança.

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
cobrancaIdrotauuid

Corpo (JSON) · EstornarPagamentoRequest

CampoTipoObrigatórioDescrição
valordecimalsim
motivostringsim

Resposta · RefundResultResponse

CampoTipoDescrição
successboolean
refundIdstring
statusstring

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado
GET /api/payments/{transactionId}/status Consulta o status atual de uma cobrança pelo transactionId do gateway. Autenticado Dono

Consulta o status atual de uma cobrança pelo transactionId do gateway.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
transactionIdrotastring

Resposta · PaymentStatusResponse

CampoTipoDescrição
transactionIdstring
statusstring
provedorstring
amountdecimal
paidAtdatetime

Status possíveis

  • 200 OK
  • 404 Não encontrado
GET /api/payments/{cobrancaId}/splits Lista todos os splits de repasse de uma cobrança. Retorna os detalhes do repasse ao parceiro: valor bruto, taxa da plataforma, valor líquido e status (Pendente / Liquidado / Bloqueado). Financeiro

Lista todos os splits de repasse de uma cobrança. Retorna os detalhes do repasse ao parceiro: valor bruto, taxa da plataforma, valor líquido e status (Pendente / Liquidado / Bloqueado).

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
cobrancaIdrotauuid

Resposta · IReadOnlyList<SplitResponse>

CampoTipoDescrição
splitIduuid
cobrancaIduuid
parceiroIduuid
percentualRepassedecimal
valorBrutodecimal
taxaPlataformadecimal
valorLiquidoParceirodecimal
statusstring
dataLiquidacaodatetime

Status possíveis

  • 200 OK
POST /api/payments/splits/{splitId}/liquidar Liquida manualmente um split, confirmando o repasse ao parceiro. Normalmente a liquidação ocorre automaticamente via webhook de pagamento confirmado. Use este endpoint para liquidações administrativas ou fallback. Financeiro

Liquida manualmente um split, confirmando o repasse ao parceiro. Normalmente a liquidação ocorre automaticamente via webhook de pagamento confirmado. Use este endpoint para liquidações administrativas ou fallback.

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
splitIdrotauuid

Resposta · SplitResponse

CampoTipoDescrição
splitIduuid
cobrancaIduuid
parceiroIduuid
percentualRepassedecimal
valorBrutodecimal
taxaPlataformadecimal
valorLiquidoParceirodecimal
statusstring
dataLiquidacaodatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado
POST /api/payments/splits/{splitId}/bloquear Bloqueia um split, impedindo o repasse ao parceiro. Usado em casos de chargeback, suspeita de fraude ou disputa. O webhook de chargeback bloqueia automaticamente; use este endpoint para bloqueio manual. Financeiro

Bloqueia um split, impedindo o repasse ao parceiro. Usado em casos de chargeback, suspeita de fraude ou disputa. O webhook de chargeback bloqueia automaticamente; use este endpoint para bloqueio manual.

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
splitIdrotauuid

Resposta · SplitResponse

CampoTipoDescrição
splitIduuid
cobrancaIduuid
parceiroIduuid
percentualRepassedecimal
valorBrutodecimal
taxaPlataformadecimal
valorLiquidoParceirodecimal
statusstring
dataLiquidacaodatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado
GET /api/payments/parceiros/{parceiroId}/repasses Retorna o extrato paginado de repasses de um parceiro. Suporta filtro por status: Pendente, Liquidado, Bloqueado, Cancelado. Autenticado Dono

Retorna o extrato paginado de repasses de um parceiro. Suporta filtro por status: Pendente, Liquidado, Bloqueado, Cancelado.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
parceiroIdrotauuid
statusquerystring
pagequeryinteger
pageSizequeryinteger

Resposta · IReadOnlyList<SplitResponse>

CampoTipoDescrição
splitIduuid
cobrancaIduuid
parceiroIduuid
percentualRepassedecimal
valorBrutodecimal
taxaPlataformadecimal
valorLiquidoParceirodecimal
statusstring
dataLiquidacaodatetime

Status possíveis

  • 200 OK

Endpoints for managing balance withdrawals, transfer requests, and admin payout processing.

GET /api/transfers Lista todos os pedidos de saque da plataforma (Financeiro). Financeiro

Lista todos os pedidos de saque da plataforma (Financeiro).

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Resposta · IReadOnlyList<TransferResponse>

CampoTipoDescrição
iduuid
partnerIduuid
amountdecimal
pixKeystring
pixKeyTypestring
statusstring
adminNotestring
processedAtdatetime
createdAtdatetime

Status possíveis

  • 200 OK
GET /api/transfers/partner/{partnerId} Saldo e histórico de saques de um parceiro. Autenticado Dono

Saldo e histórico de saques de um parceiro.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Resposta · TransferBalanceResponse

CampoTipoDescrição
availabledecimal
totalEarneddecimal
transferreddecimal
transfersTransferResponse[]

Status possíveis

  • 200 OK
POST /api/transfers O parceiro pede o saque de um valor para a sua chave PIX. Parceiro Dono

O parceiro pede o saque de um valor para a sua chave PIX.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · RequestTransferRequest

CampoTipoObrigatórioDescrição
partnerIduuidsim
amountdecimalsim
pixKeystringsim
pixKeyTypestringnãoPadrão: "CPF".

Resposta · TransferResponse

CampoTipoDescrição
iduuid
partnerIduuid
amountdecimal
pixKeystring
pixKeyTypestring
statusstring
adminNotestring
processedAtdatetime
createdAtdatetime

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 409 Conflito de estado
PATCH /api/transfers/{transferId}/status O Financeiro atualiza o status do saque, com observação. Financeiro

O Financeiro atualiza o status do saque, com observação.

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Parâmetros

NomeOndeTipoDescrição
transferIdrotauuid

Corpo (JSON) · UpdateTransferStatusRequest

CampoTipoObrigatórioDescrição
statusstringsim
adminNotestringnão

Resposta · TransferResponse

CampoTipoDescrição
iduuid
partnerIduuid
amountdecimal
pixKeystring
pixKeyTypestring
statusstring
adminNotestring
processedAtdatetime
createdAtdatetime

Status possíveis

  • 200 OK
  • 404 Não encontrado

Endpoints for handling dispute resolution and refund workflows between clients, partners, and administrators.

GET /api/refunds Lista todas as solicitações de reembolso da plataforma (Financeiro). Financeiro

Lista todas as solicitações de reembolso da plataforma (Financeiro).

Permissão: Exige Admin ou Financeiro (ou escopo financial).

Resposta · IReadOnlyList<RefundResponse>

CampoTipoDescrição
iduuid
statusstring
amountdecimal
reasonstring
appointmentIduuid
clientIduuid
partnerIduuid
partnerNotestring
partnerDecidedAtdatetime
contestReasonstring
contestedAtdatetime
contestedBystring
adminNotestring
adminDecidedAtdatetime
createdAtdatetime

Status possíveis

  • 200 OK
GET /api/refunds/partner/{partnerId} Solicitações de reembolso que envolvem um parceiro. Autenticado Dono

Solicitações de reembolso que envolvem um parceiro.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Resposta · IReadOnlyList<RefundResponse>

CampoTipoDescrição
iduuid
statusstring
amountdecimal
reasonstring
appointmentIduuid
clientIduuid
partnerIduuid
partnerNotestring
partnerDecidedAtdatetime
contestReasonstring
contestedAtdatetime
contestedBystring
adminNotestring
adminDecidedAtdatetime
createdAtdatetime

Status possíveis

  • 200 OK
GET /api/refunds/client/{clientId} Solicitações de reembolso feitas por um cliente. Autenticado Dono

Solicitações de reembolso feitas por um cliente.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
clientIdrotauuid

Resposta · IReadOnlyList<RefundResponse>

CampoTipoDescrição
iduuid
statusstring
amountdecimal
reasonstring
appointmentIduuid
clientIduuid
partnerIduuid
partnerNotestring
partnerDecidedAtdatetime
contestReasonstring
contestedAtdatetime
contestedBystring
adminNotestring
adminDecidedAtdatetime
createdAtdatetime

Status possíveis

  • 200 OK
POST /api/refunds O cliente pede reembolso de um agendamento, com valor e motivo. Autenticado Dono

O cliente pede reembolso de um agendamento, com valor e motivo.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · CreateRefundRequest

CampoTipoObrigatórioDescrição
appointmentIduuidsim
clientIduuidsim
partnerIduuidsim
amountdecimalsim
reasonstringsim

Resposta · RefundResponse

CampoTipoDescrição
iduuid
statusstring
amountdecimal
reasonstring
appointmentIduuid
clientIduuid
partnerIduuid
partnerNotestring
partnerDecidedAtdatetime
contestReasonstring
contestedAtdatetime
contestedBystring
adminNotestring
adminDecidedAtdatetime
createdAtdatetime

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 409 Conflito de estado
PATCH /api/refunds/{refundId}/partner-decision O parceiro aprova ou rejeita o reembolso. Rejeitar exige uma justificativa. Parceiro Dono

O parceiro aprova ou rejeita o reembolso. Rejeitar exige uma justificativa.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
refundIdrotauuid

Corpo (JSON) · PartnerDecisionRequest

CampoTipoObrigatórioDescrição
decisionstringsim
partnerNotestringnão

Resposta · RefundResponse

CampoTipoDescrição
iduuid
statusstring
amountdecimal
reasonstring
appointmentIduuid
clientIduuid
partnerIduuid
partnerNotestring
partnerDecidedAtdatetime
contestReasonstring
contestedAtdatetime
contestedBystring
adminNotestring
adminDecidedAtdatetime
createdAtdatetime

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado
PATCH /api/refunds/{refundId}/admin-decision O Admin decide um reembolso contestado (mediação). Admin

O Admin decide um reembolso contestado (mediação).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
refundIdrotauuid

Corpo (JSON) · AdminDecisionRequest

CampoTipoObrigatórioDescrição
decisionstringsim
adminNotestringnão

Resposta · RefundResponse

CampoTipoDescrição
iduuid
statusstring
amountdecimal
reasonstring
appointmentIduuid
clientIduuid
partnerIduuid
partnerNotestring
partnerDecidedAtdatetime
contestReasonstring
contestedAtdatetime
contestedBystring
adminNotestring
adminDecidedAtdatetime
createdAtdatetime

Status possíveis

  • 200 OK
  • 404 Não encontrado
POST /api/refunds/{refundId}/contest O cliente contesta a rejeição do parceiro e leva o caso ao Admin. Autenticado Dono

O cliente contesta a rejeição do parceiro e leva o caso ao Admin.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
refundIdrotauuid

Corpo (JSON) · ContestRefundRequest

CampoTipoObrigatórioDescrição
contestReasonstringsim
contestedBystringsim

Resposta · RefundResponse

CampoTipoDescrição
iduuid
statusstring
amountdecimal
reasonstring
appointmentIduuid
clientIduuid
partnerIduuid
partnerNotestring
partnerDecidedAtdatetime
contestReasonstring
contestedAtdatetime
contestedBystring
adminNotestring
adminDecidedAtdatetime
createdAtdatetime

Status possíveis

  • 200 OK
  • 404 Não encontrado

Recebe webhooks de gateways de pagamento (Asaas, Mercado Pago, PagBank). Valida a assinatura HMAC antes de processar qualquer evento.

POST /api/webhooks/asaas Webhook do Asaas. Valida assinatura via header "asaas-access-token" (HMAC-SHA256 Hex). Público

Webhook do Asaas. Valida assinatura via header "asaas-access-token" (HMAC-SHA256 Hex).

Permissão: Não exige token.

Status possíveis

  • 200 OK
  • 401 Não autenticado
POST /api/webhooks/mercadopago Webhook do Mercado Pago. Valida assinatura via header "x-signature" (HMAC-SHA256 Hex). Público

Webhook do Mercado Pago. Valida assinatura via header "x-signature" (HMAC-SHA256 Hex).

Permissão: Não exige token.

Status possíveis

  • 200 OK
  • 401 Não autenticado
POST /api/webhooks/pagbank Webhook do PagBank (PagSeguro). Valida assinatura via header "x-pagbank-signature" (HMAC-SHA256 Base64). Payload: { charges: [{ id, status, amount: { value (centavos) } }] } Público

Webhook do PagBank (PagSeguro). Valida assinatura via header "x-pagbank-signature" (HMAC-SHA256 Base64). Payload: { charges: [{ id, status, amount: { value (centavos) } }] }

Permissão: Não exige token.

Status possíveis

  • 200 OK
  • 401 Não autenticado
Módulo

Parceiros e prestadores

Perfil profissional, dados bancários, serviços, galeria, espaços físicos e busca por proximidade.

Parceiros são os prestadores do seu marketplace: profissionais, lojas, estúdios. Qualquer usuário logado pode abrir um perfil de parceiro (onboarding) com especialidade, endereço, dados bancários e chave PIX para receber repasses. O parceiro cadastra os serviços que oferece, monta uma galeria de portfólio e registra os espaços físicos onde atende. O diretório permite buscar parceiros ativos, inclusive por distância.

Conceitos

Perfil do parceiro
Dados profissionais, endereço com latitude e longitude, banco e chave PIX.
Aceite automático
Quando ligado, novas reservas entram confirmadas sem o parceiro aprovar uma a uma.
Serviço
Item do cardápio do parceiro, com nome, preço e duração.
Galeria
Fotos e destaques do portfólio, com legenda e ordem.
Espaço
Local físico de atendimento (salão, sala), com endereço e fotos.

Fluxo típico

  1. O usuário cria o perfil com POST /api/partner/profile.
  2. Completa endereço e dados bancários com PUT /api/partner/profile/{id}.
  3. Um Admin ativa o parceiro (PATCH …/status) e concede o papel Parceiro.
  4. O parceiro cadastra serviços, galeria e espaços; o app mostra tudo no perfil público.
  5. Clientes encontram parceiros pelo diretório (GET /api/partner/profiles), com busca por proximidade.

Exemplo: Buscar parceiros num raio de 5 km

Requisição
GET /api/partner/profiles?lat=-23.5614&lon=-46.6559&radiusKm=5
Resposta
200 OK
{ "items": [ { "id": "…", "nome": "Ana Souza", "specialty": "Cabeleireira", "rating": 4.9,
    "reviewCount": 128, "autoAccept": true, "city": "São Paulo", "state": "SP", "isActive": true, "distanceKm": 1.2 } ],
  "page": 1, "pageSize": 20, "total": 7 }

Regras importantes

  • O diretório mostra só parceiros ativos e só campos públicos, a menos que um Admin peça os inativos.
  • Um serviço com agendamentos ativos não pode ser apagado (409).
  • Dados bancários e documentos só são visíveis ao próprio parceiro e ao Admin.

Referência de endpoints

Endpoints for partner professional profile management, including address, KYC documents, payout/banking settings, and automatic booking acceptance toggling.

POST /api/partner/profile Cria o perfil de parceiro do usuário logado (onboarding). Um Admin pode criar em nome de outro usuário. Autenticado Dono

Cria o perfil de parceiro do usuário logado (onboarding). Um Admin pode criar em nome de outro usuário.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · CreatePartnerRequest

CampoTipoObrigatórioDescrição
nomestringsim
specialtystringsim
professionalIduuidnão

Status possíveis

  • 400 Dados inválidos
  • 409 Conflito de estado
PATCH /api/partner/profile/{partnerId}/status Ativa ou desativa um parceiro (Admin). Admin

Ativa ou desativa um parceiro (Admin).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Corpo (JSON) · SetPartnerStatusRequest

CampoTipoObrigatórioDescrição
isActivebooleansim

Status possíveis

  • 404 Não encontrado
GET /api/partner/profile/{partnerId} Perfil completo do parceiro, com endereço e dados bancários. Autenticado Dono

Perfil completo do parceiro, com endereço e dados bancários.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Status possíveis

  • 404 Não encontrado
PUT /api/partner/profile/{partnerId} Atualiza dados pessoais, endereço e dados bancários e PIX do parceiro. Autenticado Dono

Atualiza dados pessoais, endereço e dados bancários e PIX do parceiro.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Corpo (JSON) · UpdatePartnerProfileRequest

CampoTipoObrigatórioDescrição
cpfstringnão
birthDatedatetimenão
phonestringnão
instagramUrlstringnão
biostringnão
workingHoursstringnão
zipCodestringnão
streetstringnão
numberstringnão
complementstringnão
neighborhoodstringnão
citystringnão
statestringnão
latnumbernão
lonnumbernão
bankNamestringnão
bankBranchstringnão
bankAccountstringnão
bankAccountTypestringnão
pixKeyTypestringnão
pixKeystringnão

Status possíveis

  • 400 Dados inválidos
  • 404 Não encontrado
PATCH /api/partner/profile/{partnerId}/auto-accept Liga ou desliga o aceite automático de novas reservas. Autenticado Dono

Liga ou desliga o aceite automático de novas reservas.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Corpo (JSON) · SetAutoAcceptRequest

CampoTipoObrigatórioDescrição
autoAcceptbooleansim

Status possíveis

  • 404 Não encontrado

Vitrine de parceiros: listagem pública (para usuários logados) só com campos não sensíveis.

GET /api/partner/profiles Lista parceiros. Mostra só ativos e campos públicos, a menos que um Admin peça includeInactive=true. Busca por proximidade com lat, lon e raio. Autenticado

Lista parceiros. Mostra só ativos e campos públicos, a menos que um Admin peça includeInactive=true. Busca por proximidade com lat, lon e raio.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
searchquerystring
specialtyquerystring
cityquerystring
statequerystring
latquerynumber
lonquerynumber
radiusKmquerynumber
includeInactivequeryboolean
pagequeryinteger
pageSizequeryinteger

Resposta · PartnerPageDto

CampoTipoDescrição
itemsPartnerSummaryDto[]
pageinteger
pageSizeinteger
totalinteger

Status possíveis

  • 200 OK
  • 400 Dados inválidos

Endpoints for managing customized services offered by partners.

GET /api/partner/services/{partnerId} Lista os serviços de um parceiro. Público. Público

Lista os serviços de um parceiro. Público.

Permissão: Não exige token.

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Resposta · IReadOnlyList<BriefApp.Partners.Queries.PartnerServiceDto>

Status possíveis

  • 200 OK
POST /api/partner/services Cadastra um serviço do parceiro com nome, descrição, preço e duração. Parceiro Dono

Cadastra um serviço do parceiro com nome, descrição, preço e duração.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · CreatePartnerServiceRequest

CampoTipoObrigatórioDescrição
partnerIduuidsim
nomestringsim
descriptionstringnão
pricedecimalsim
durationstringnãoPadrão: "60 min".

Status possíveis

  • 400 Dados inválidos
  • 409 Conflito de estado
PUT /api/partner/services/{serviceId} Atualiza nome, descrição, preço ou duração de um serviço. Parceiro Dono

Atualiza nome, descrição, preço ou duração de um serviço.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
serviceIdrotauuid

Corpo (JSON) · UpdatePartnerServiceRequest

CampoTipoObrigatórioDescrição
nomestringnão
descriptionstringnão
pricedecimalnão
durationstringnão

Status possíveis

  • 404 Não encontrado
DELETE /api/partner/services/{serviceId} Remove um serviço. Falha com 409 se houver agendamentos ativos para ele. Parceiro Dono

Remove um serviço. Falha com 409 se houver agendamentos ativos para ele.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
serviceIdrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 404 Não encontrado
  • 409 Conflito de estado

Endpoints for managing partner portfolio gallery media items (photos and showcases).

POST /api/partner/gallery Adiciona uma foto ou destaque à galeria do parceiro. Parceiro Dono

Adiciona uma foto ou destaque à galeria do parceiro.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · AddGalleryItemRequest

CampoTipoObrigatórioDescrição
partnerIduuidsim
urlstringsim
typestringnãoPadrão: "photo".
captionstringnão
orderintegernãoPadrão: 0.

Status possíveis

  • 400 Dados inválidos

Endpoints for managing provider workspaces and physical salon locations.

GET /api/spaces/partner/{partnerId} Lista os espaços físicos de um parceiro. Público. Público

Lista os espaços físicos de um parceiro. Público.

Permissão: Não exige token.

Parâmetros

NomeOndeTipoDescrição
partnerIdrotauuid

Resposta · IReadOnlyList<BriefApp.Partners.Queries.SpaceDto>

Status possíveis

  • 200 OK
POST /api/spaces Cadastra um espaço físico de atendimento, com endereço, descrição e fotos. Parceiro Dono

Cadastra um espaço físico de atendimento, com endereço, descrição e fotos.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · CreateSpaceRequest

CampoTipoObrigatórioDescrição
partnerIduuidsim
nomestringsim
addressstringsim
aboutstringnãoPadrão: "".
photosstring[]não
isActivebooleannãoPadrão: false.

Status possíveis

  • 400 Dados inválidos
PUT /api/spaces/{spaceId} Atualiza dados, endereço ou fotos de um espaço. Parceiro Dono

Atualiza dados, endereço ou fotos de um espaço.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
spaceIdrotauuid

Corpo (JSON) · UpdateSpaceRequest

CampoTipoObrigatórioDescrição
nomestringnão
addressstringnão
aboutstringnão
photosstring[]não
isActivebooleannão

Status possíveis

  • 404 Não encontrado
PATCH /api/spaces/{spaceId}/toggle-active Ativa ou desativa um espaço. Parceiro Dono

Ativa ou desativa um espaço.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
spaceIdrotauuid
isActivequeryboolean

Status possíveis

  • 404 Não encontrado
DELETE /api/spaces/{spaceId} Remove um espaço. Parceiro Dono

Remove um espaço.

Permissão: Exige Admin ou Parceiro (ou escopo partners). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
spaceIdrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 404 Não encontrado
Módulo

Mobilidade e entregas

Corridas e entregas: motoristas, preço por região, matching, despacho, rastreio e back-office.

O módulo de mobilidade opera dois produtos com o mesmo motor. Corridas: o cliente estima o preço, pede a corrida e acompanha o motorista; o motorista aceita, informa a chegada, inicia e conclui. Entregas: um pedido de outro sistema (restaurante, farmácia, loja, o seu catálogo) pede a logística, que fica ligada ao pedido de origem pelo par (tipo, id). Motoristas se cadastram com documentos e veículo e só operam depois da aprovação. O preço vem de categorias (tarifa base, preço por km e por minuto) e de regras por região.

Conceitos

Categoria
Tipo de serviço (ex.: Moto, Carro Econômico): veículo, tarifa base, preço por km e minuto, máximo de passageiros.
Regra de preço
Ajuste por região: distância mínima, tarifa mínima, preço por km, taxa da plataforma e imposto municipal.
Motorista
Perfil com CNH, veículo, documentos e chave PIX. Precisa ser aprovado e receber o papel Motorista.
Corrida
Viagem pedida por um cliente, com origem, destino, categoria e forma de pagamento.
Entrega
Logística de um pedido externo: coleta, destino, destinatário e frete. Idempotente pelo par (tipo, id).
Reclamação
Problema aberto pelo cliente sobre uma corrida, tratado pelo Admin.

Estados possíveis

Corrida
  1. ProcurandoMotorista
  2. Aceita
  3. MotoristaChegou
  4. EmAndamento
  5. Concluida
Entrega
  1. AguardandoEntregador
  2. Atribuida
  3. Coletada
  4. Entregue
Motorista
  1. PendenteAprovacao
  2. Ativo
  3. Suspenso
  4. Bloqueado

Fluxo típico

  1. O Admin cria categorias e regras de preço por região.
  2. O motorista se cadastra (POST /api/mobility/drivers/register); o Admin aprova e concede o papel Motorista.
  3. O motorista fica online (PUT …/drivers/me/availability) e envia a posição pelo hub /hubs/mobility.
  4. O cliente estima o preço (POST /api/mobility/pricing/estimate) e pede a corrida (POST /api/mobility/rides).
  5. O motorista aceita, informa a chegada, inicia e conclui; o cliente acompanha em tempo real.
  6. A cobrança do Payments é vinculada à corrida e, no fim, cliente e motorista se avaliam.

Exemplo: Pedir a entrega de um pedido do seu catálogo

Requisição
POST /api/mobility/delivery
{ "clienteId": "…", "referenciaTipo": "pedido-loja", "referenciaId": "…",
  "coleta": { "endereco": "Rua Augusta, 500", "latitude": -23.553, "longitude": -46.657 },
  "destino": { "endereco": "Av. Paulista, 1000", "latitude": -23.565, "longitude": -46.652 },
  "destinatarioNome": "Júlia", "tipoVeiculoExigido": "Moto", "valorFrete": 12.90 }
Resposta
201 Created
{ "id": "…", "status": "AguardandoEntregador", "referenciaTipo": "pedido-loja", "referenciaId": "…",
  "distanciaKm": 1.6, "valorFrete": 12.90, "entregadorId": null, "solicitadaEm": "2026-10-15T13:02:11Z", … }

Regras importantes

  • Sem motorista por perto, a corrida volta com status SemMotorista.
  • Corrida em andamento não pode ser cancelada; antes disso, cliente ou motorista podem cancelar.
  • Pedir a mesma entrega duas vezes (mesmo tipo e id) devolve a entrega existente.
  • Um Parceiro pode pedir entregas em nome de um cliente e fica registrado como emissor.
  • A posição do motorista a cada ~5 s deve ir pelo hub; o PATCH de localização é a alternativa.

Referência de endpoints

Consultas públicas (sem login) para a tela de pedir corrida: categorias e estimativa de preço.

GET /api/mobility/pricing/categories Categorias de corrida ativas. Público

Categorias de corrida ativas.

Permissão: Não exige token.

Resposta · IReadOnlyList<CategoriaDto>

CampoTipoDescrição
iduuid
nomestring
descricaostring
iconeUrlstring
tipoVeiculostring
tarifaBasedecimal
precoKmdecimal
precoMinutodecimal
maxPassageirosinteger
ordeminteger
ativaboolean

Status possíveis

  • 200 OK
POST /api/mobility/pricing/estimate Distância, tempo e tarifa estimada de cada categoria para o trajeto. Público

Distância, tempo e tarifa estimada de cada categoria para o trajeto.

Permissão: Não exige token.

Corpo (JSON) · EstimateRideRequest

CampoTipoObrigatórioDescrição
origemLatnumbersim
origemLngnumbersim
destinoLatnumbersim
destinoLngnumbersim
origemEnderecostringnão

Resposta · EstimativaViagemDto

CampoTipoDescrição
distanciaKmnumber
duracaoMinutosinteger
categoriasEstimativaCategoriaDto[]

Status possíveis

  • 200 OK

Corridas: o cliente pede e acompanha; o motorista aceita e conduz.

GET /api/mobility/rides/nearby-drivers Motoristas disponíveis por perto (só posição e distância — sem identificação). Autenticado

Motoristas disponíveis por perto (só posição e distância — sem identificação).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
latquerynumber
lngquerynumber
typequeryTipoVeiculo

Resposta · IReadOnlyList<MotoristaProximoDto>

CampoTipoDescrição
motoristaIduuid
latitudenumber
longitudenumber
distanciaKmnumber
veiculoTipostring
avaliacaoMediadecimal

Status possíveis

  • 200 OK
POST /api/mobility/rides Pede uma corrida. Sem motorista por perto, a corrida volta com status SemMotorista. Autenticado

Pede uma corrida. Sem motorista por perto, a corrida volta com status SemMotorista.

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · RequestRideRequest

CampoTipoObrigatórioDescrição
categoriaIduuidsim
origemLocalDtosim
destinoLocalDtosim
metodoPagamentostringnão
agendamentoIduuidnão
clienteTelefonestringnão

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 201 Criado
  • 409 Conflito de estado
GET /api/mobility/rides/{id} Detalhe de uma corrida (cliente, motorista ou equipe da plataforma). Autenticado

Detalhe de uma corrida (cliente, motorista ou equipe da plataforma).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 200 OK
GET /api/mobility/rides/active Corrida em curso do usuário (como cliente ou motorista). 204 quando não há. Autenticado

Corrida em curso do usuário (como cliente ou motorista). 204 quando não há.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 200 OK
  • 204 Sem conteúdo
GET /api/mobility/rides/history Histórico de corridas do usuário, paginado. Autenticado

Histórico de corridas do usuário, paginado.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
pagequeryinteger
pageSizequeryinteger

Resposta · ViagemPaginaDto

CampoTipoDescrição
itensViagemDto[]
paginainteger
tamanhointeger
totalinteger

Status possíveis

  • 200 OK
POST /api/mobility/rides/{id}/cancelar Cancela (cliente ou motorista da corrida). Corrida em andamento não pode ser cancelada. Autenticado

Cancela (cliente ou motorista da corrida). Corrida em andamento não pode ser cancelada.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · CancelRideRequest

CampoTipoObrigatórioDescrição
motivostringnão

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 200 OK
POST /api/mobility/rides/{id}/cobranca Vincula a cobrança (Payments) à corrida. Só o cliente da corrida (ou um administrador). Autenticado

Vincula a cobrança (Payments) à corrida. Só o cliente da corrida (ou um administrador).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · LinkChargeRequest

CampoTipoObrigatórioDescrição
cobrancaIduuidsim
metodoPagamentostringsim

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 200 OK
POST /api/mobility/rides/{id}/avaliar Avalia a corrida: o cliente avalia o motorista; o motorista avalia o cliente. Autenticado

Avalia a corrida: o cliente avalia o motorista; o motorista avalia o cliente.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · RateRequest

CampoTipoObrigatórioDescrição
notaintegersim
comentariostringnão

Status possíveis

  • 204 Sem conteúdo
GET /api/mobility/rides/{id}/messages Mensagens trocadas entre cliente e motorista na corrida. Autenticado

Mensagens trocadas entre cliente e motorista na corrida.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · IReadOnlyList<MensagemDto>

CampoTipoDescrição
iduuid
viagemIduuid
remetenteIduuid
conteudostring
enviadaEmdatetime

Status possíveis

  • 200 OK
POST /api/mobility/rides/{id}/messages Envia uma mensagem no chat da corrida. Autenticado

Envia uma mensagem no chat da corrida.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · SendMessageRequest

CampoTipoObrigatórioDescrição
conteudostringsim

Resposta · MensagemDto

CampoTipoDescrição
iduuid
viagemIduuid
remetenteIduuid
conteudostring
enviadaEmdatetime

Status possíveis

  • 200 OK
POST /api/mobility/rides/{id}/reclamacoes Abre uma reclamação sobre a corrida, com categoria e descrição. Autenticado

Abre uma reclamação sobre a corrida, com categoria e descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · OpenComplaintRequest

CampoTipoObrigatórioDescrição
categoriastringsim
descricaostringsim

Resposta · ReclamacaoDto

CampoTipoDescrição
iduuid
viagemIduuid
autorIduuid
categoriastring
descricaostring
statusstring
respostaAdminstring
criadaEmdatetime
resolvidaEmdatetime

Status possíveis

  • 200 OK
POST /api/mobility/rides/{id}/aceitar O motorista aceita a corrida. 409 se outro já aceitou ou se ele está em outra corrida. Motorista

O motorista aceita a corrida. 409 se outro já aceitou ou se ele está em outra corrida.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 200 OK
  • 409 Conflito de estado
POST /api/mobility/rides/{id}/recusar O motorista recusa a corrida oferecida. Motorista

O motorista recusa a corrida oferecida.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Status possíveis

  • 204 Sem conteúdo
POST /api/mobility/rides/{id}/chegou O motorista informa que chegou ao ponto de embarque. Motorista

O motorista informa que chegou ao ponto de embarque.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 200 OK
POST /api/mobility/rides/{id}/iniciar O motorista inicia a viagem com o passageiro a bordo. Motorista

O motorista inicia a viagem com o passageiro a bordo.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 200 OK
POST /api/mobility/rides/{id}/concluir O motorista conclui a corrida no destino. Motorista

O motorista conclui a corrida no destino.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · ViagemDto

CampoTipoDescrição
iduuid
statusstring
clienteIduuid
clienteNomestring
clienteTelefonestring
motoristaMotoristaResumoDto
categoriaIduuid
categoriaNomestring
origemLocalDto
destinoLocalDto
distanciaKmnumber
duracaoEstimadaMinutosinteger
polylinestring
tarifaEstimadadecimal
tarifaFinaldecimal
taxaPlataformadecimal
ganhoMotoristadecimal
metodoPagamentostring
cobrancaIduuid
agendamentoIduuid
solicitadaEmdatetime
aceitaEmdatetime
iniciadaEmdatetime
concluidaEmdatetime
canceladaEmdatetime
motivoCancelamentostring
notaDoClienteinteger
notaDoMotoristainteger

Status possíveis

  • 200 OK

Entregas de pedidos de outros sistemas (restaurante, farmácia, loja, catálogo). O pedido continua no sistema de origem; aqui vive só a logística, ligada por (tipo, id) do pedido.

POST /api/mobility/delivery Pede a entrega de um pedido. Idempotente por (referenciaTipo, referenciaId). O cliente pede para si; um Parceiro pede em nome de um cliente (fica como emissor); Admin/Financeiro/Suporte podem tudo. Autenticado Dono

Pede a entrega de um pedido. Idempotente por (referenciaTipo, referenciaId). O cliente pede para si; um Parceiro pede em nome de um cliente (fica como emissor); Admin/Financeiro/Suporte podem tudo.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Corpo (JSON) · RequestDeliveryRequest

CampoTipoObrigatórioDescrição
clienteIduuidsim
referenciaTipostringsim
referenciaIduuidsim
coletaLocalDtosim
destinoLocalDtosim
parceiroIduuidnão
descricaostringnão
destinatarioNomestringnão
destinatarioTelefonestringnão
tipoVeiculoExigidoTipoVeiculonão
valorFretedecimalnão

Resposta · EntregaDto

CampoTipoDescrição
iduuid
statusstring
referenciaTipostring
referenciaIduuid
parceiroIduuid
clienteIduuid
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
destinatarioNomestring
destinatarioTelefonestring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEntregadordecimal
taxaPlataformadecimal
entregadorIduuid
entregadorMotoristaResumoDto
solicitadaEmdatetime
atribuidaEmdatetime
coletadaEmdatetime
entregueEmdatetime
canceladaEmdatetime
comprovanteUrlstring
motivoFalhaOuCancelamentostring
notaDoClienteinteger

Status possíveis

  • 201 Criado
  • 403 Sem permissão
GET /api/mobility/delivery/{id} Detalhe de uma entrega (cliente, emissor, entregador ou Admin). Autenticado

Detalhe de uma entrega (cliente, emissor, entregador ou Admin).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · EntregaDto

CampoTipoDescrição
iduuid
statusstring
referenciaTipostring
referenciaIduuid
parceiroIduuid
clienteIduuid
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
destinatarioNomestring
destinatarioTelefonestring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEntregadordecimal
taxaPlataformadecimal
entregadorIduuid
entregadorMotoristaResumoDto
solicitadaEmdatetime
atribuidaEmdatetime
coletadaEmdatetime
entregueEmdatetime
canceladaEmdatetime
comprovanteUrlstring
motivoFalhaOuCancelamentostring
notaDoClienteinteger

Status possíveis

  • 200 OK
GET /api/mobility/delivery/by-reference/{tipo}/{referenciaId} Quem acompanha a logística do pedido: cliente, emissor, ou (sincronização entre sistemas) Admin/Financeiro/Suporte. Autenticado

Quem acompanha a logística do pedido: cliente, emissor, ou (sincronização entre sistemas) Admin/Financeiro/Suporte.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
tiporotastring
referenciaIdrotauuid

Resposta · EntregaDto

CampoTipoDescrição
iduuid
statusstring
referenciaTipostring
referenciaIduuid
parceiroIduuid
clienteIduuid
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
destinatarioNomestring
destinatarioTelefonestring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEntregadordecimal
taxaPlataformadecimal
entregadorIduuid
entregadorMotoristaResumoDto
solicitadaEmdatetime
atribuidaEmdatetime
coletadaEmdatetime
entregueEmdatetime
canceladaEmdatetime
comprovanteUrlstring
motivoFalhaOuCancelamentostring
notaDoClienteinteger

Status possíveis

  • 200 OK
GET /api/mobility/delivery/mine Entregas do usuário (como cliente ou parceiro emissor). Autenticado

Entregas do usuário (como cliente ou parceiro emissor).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
pagequeryinteger
pageSizequeryinteger

Resposta · EntregaPaginaDto

CampoTipoDescrição
itensEntregaDto[]
paginainteger
tamanhointeger
totalinteger

Status possíveis

  • 200 OK
POST /api/mobility/delivery/{id}/cancelar Cancela a entrega, com motivo opcional. Autenticado

Cancela a entrega, com motivo opcional.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · CancelRideRequest

CampoTipoObrigatórioDescrição
motivostringnão

Resposta · EntregaDto

CampoTipoDescrição
iduuid
statusstring
referenciaTipostring
referenciaIduuid
parceiroIduuid
clienteIduuid
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
destinatarioNomestring
destinatarioTelefonestring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEntregadordecimal
taxaPlataformadecimal
entregadorIduuid
entregadorMotoristaResumoDto
solicitadaEmdatetime
atribuidaEmdatetime
coletadaEmdatetime
entregueEmdatetime
canceladaEmdatetime
comprovanteUrlstring
motivoFalhaOuCancelamentostring
notaDoClienteinteger

Status possíveis

  • 200 OK
POST /api/mobility/delivery/{id}/avaliar Avalia a entrega com nota e comentário. Autenticado

Avalia a entrega com nota e comentário.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · RateRequest

CampoTipoObrigatórioDescrição
notaintegersim
comentariostringnão

Status possíveis

  • 204 Sem conteúdo
GET /api/mobility/delivery/available Entregas aguardando entregador, compatíveis com o veículo, das mais próximas às mais distantes. Motorista

Entregas aguardando entregador, compatíveis com o veículo, das mais próximas às mais distantes.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
latquerynumber
lngquerynumber

Resposta · IReadOnlyList<EntregaDisponivelDto>

CampoTipoDescrição
iduuid
referenciaTipostring
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEstimadodecimal
solicitadaEmdatetime

Status possíveis

  • 200 OK
POST /api/mobility/delivery/{id}/aceitar O entregador aceita a entrega. 409 se outro já aceitou ou se ele já está ocupado. Motorista

O entregador aceita a entrega. 409 se outro já aceitou ou se ele já está ocupado.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · EntregaDto

CampoTipoDescrição
iduuid
statusstring
referenciaTipostring
referenciaIduuid
parceiroIduuid
clienteIduuid
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
destinatarioNomestring
destinatarioTelefonestring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEntregadordecimal
taxaPlataformadecimal
entregadorIduuid
entregadorMotoristaResumoDto
solicitadaEmdatetime
atribuidaEmdatetime
coletadaEmdatetime
entregueEmdatetime
canceladaEmdatetime
comprovanteUrlstring
motivoFalhaOuCancelamentostring
notaDoClienteinteger

Status possíveis

  • 200 OK
  • 409 Conflito de estado
POST /api/mobility/delivery/{id}/coletar O entregador confirma a coleta no ponto de origem. Motorista

O entregador confirma a coleta no ponto de origem.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · EntregaDto

CampoTipoDescrição
iduuid
statusstring
referenciaTipostring
referenciaIduuid
parceiroIduuid
clienteIduuid
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
destinatarioNomestring
destinatarioTelefonestring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEntregadordecimal
taxaPlataformadecimal
entregadorIduuid
entregadorMotoristaResumoDto
solicitadaEmdatetime
atribuidaEmdatetime
coletadaEmdatetime
entregueEmdatetime
canceladaEmdatetime
comprovanteUrlstring
motivoFalhaOuCancelamentostring
notaDoClienteinteger

Status possíveis

  • 200 OK
POST /api/mobility/delivery/{id}/concluir O entregador conclui a entrega, com URL opcional do comprovante (foto ou assinatura). Motorista

O entregador conclui a entrega, com URL opcional do comprovante (foto ou assinatura).

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · CompleteDeliveryRequest

CampoTipoObrigatórioDescrição
comprovanteUrlstringnão

Resposta · EntregaDto

CampoTipoDescrição
iduuid
statusstring
referenciaTipostring
referenciaIduuid
parceiroIduuid
clienteIduuid
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
destinatarioNomestring
destinatarioTelefonestring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEntregadordecimal
taxaPlataformadecimal
entregadorIduuid
entregadorMotoristaResumoDto
solicitadaEmdatetime
atribuidaEmdatetime
coletadaEmdatetime
entregueEmdatetime
canceladaEmdatetime
comprovanteUrlstring
motivoFalhaOuCancelamentostring
notaDoClienteinteger

Status possíveis

  • 200 OK
POST /api/mobility/delivery/{id}/falha O entregador registra que não conseguiu entregar, com o motivo. Motorista

O entregador registra que não conseguiu entregar, com o motivo.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · FailDeliveryRequest

CampoTipoObrigatórioDescrição
motivostringsim

Resposta · EntregaDto

CampoTipoDescrição
iduuid
statusstring
referenciaTipostring
referenciaIduuid
parceiroIduuid
clienteIduuid
coletaLocalDto
destinoLocalDto
distanciaKmnumber
descricaostring
destinatarioNomestring
destinatarioTelefonestring
tipoVeiculoExigidostring
valorFretedecimal
ganhoEntregadordecimal
taxaPlataformadecimal
entregadorIduuid
entregadorMotoristaResumoDto
solicitadaEmdatetime
atribuidaEmdatetime
coletadaEmdatetime
entregueEmdatetime
canceladaEmdatetime
comprovanteUrlstring
motivoFalhaOuCancelamentostring
notaDoClienteinteger

Status possíveis

  • 200 OK

Perfil operacional do motorista/entregador. Qualquer usuário logado pode se cadastrar e acompanhar a análise; depois que um Admin aprova o cadastro, o Admin também concede o papel Motorista no Identity, que libera ficar online, enviar posição e ver ganhos.

POST /api/mobility/drivers/register Cadastra documentos e veículo. O motorista só opera depois que um admin aprova. Autenticado

Cadastra documentos e veículo. O motorista só opera depois que um admin aprova.

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · RegisterDriverRequest

CampoTipoObrigatórioDescrição
nomestringsim
cpfstringsim
cnhstringsim
categoriaCnhstringsim
veiculoVeiculoInputsim
telefonestringnão
validadeCnhdatenão
documentoCnhUrlstringnão
documentoVeiculoUrlstringnão
selfieUrlstringnão
chavePixstringnão
tipoChavePixstringnão
fotoUrlstringnão

Resposta · MotoristaDto

CampoTipoDescrição
iduuid
usuarioIduuid
nomestring
cpfstring
telefonestring
fotoUrlstring
cnhstring
categoriaCnhstring
validadeCnhdate
veiculoTipostring
veiculoMarcastring
veiculoModelostring
veiculoCorstring
veiculoAnointeger
placastring
documentoCnhUrlstring
documentoVeiculoUrlstring
selfieUrlstring
chavePixstring
tipoChavePixstring
statusstring
motivoStatusstring
avaliacaoMediadecimal
totalAvaliacoesinteger
totalViagensinteger
totalEntregasinteger
onlineboolean
ocupadoboolean
criadoEmdatetime
latitudenumber
longitudenumber
posicaoEmdatetime

Status possíveis

  • 201 Criado
  • 409 Conflito de estado
GET /api/mobility/drivers/me Perfil de motorista do usuário logado e a situação da análise. Autenticado

Perfil de motorista do usuário logado e a situação da análise.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · MotoristaDto

CampoTipoDescrição
iduuid
usuarioIduuid
nomestring
cpfstring
telefonestring
fotoUrlstring
cnhstring
categoriaCnhstring
validadeCnhdate
veiculoTipostring
veiculoMarcastring
veiculoModelostring
veiculoCorstring
veiculoAnointeger
placastring
documentoCnhUrlstring
documentoVeiculoUrlstring
selfieUrlstring
chavePixstring
tipoChavePixstring
statusstring
motivoStatusstring
avaliacaoMediadecimal
totalAvaliacoesinteger
totalViagensinteger
totalEntregasinteger
onlineboolean
ocupadoboolean
criadoEmdatetime
latitudenumber
longitudenumber
posicaoEmdatetime

Status possíveis

  • 200 OK
PUT /api/mobility/drivers/me Atualiza dados, CNH, veículo, documentos e chave PIX do motorista. Autenticado

Atualiza dados, CNH, veículo, documentos e chave PIX do motorista.

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · UpdateDriverRequest

CampoTipoObrigatórioDescrição
nomestringsim
cnhstringsim
categoriaCnhstringsim
veiculoVeiculoInputsim
telefonestringnão
validadeCnhdatenão
chavePixstringnão
tipoChavePixstringnão
fotoUrlstringnão
documentoCnhUrlstringnão
documentoVeiculoUrlstringnão
selfieUrlstringnão

Resposta · MotoristaDto

CampoTipoDescrição
iduuid
usuarioIduuid
nomestring
cpfstring
telefonestring
fotoUrlstring
cnhstring
categoriaCnhstring
validadeCnhdate
veiculoTipostring
veiculoMarcastring
veiculoModelostring
veiculoCorstring
veiculoAnointeger
placastring
documentoCnhUrlstring
documentoVeiculoUrlstring
selfieUrlstring
chavePixstring
tipoChavePixstring
statusstring
motivoStatusstring
avaliacaoMediadecimal
totalAvaliacoesinteger
totalViagensinteger
totalEntregasinteger
onlineboolean
ocupadoboolean
criadoEmdatetime
latitudenumber
longitudenumber
posicaoEmdatetime

Status possíveis

  • 200 OK
PUT /api/mobility/drivers/me/availability Fica online/offline. Ao ficar online sem posição gravada, informe latitude e longitude. Motorista

Fica online/offline. Ao ficar online sem posição gravada, informe latitude e longitude.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Corpo (JSON) · SetAvailabilityRequest

CampoTipoObrigatórioDescrição
onlinebooleansim
latitudenumbernão
longitudenumbernão

Resposta · MotoristaDto

CampoTipoDescrição
iduuid
usuarioIduuid
nomestring
cpfstring
telefonestring
fotoUrlstring
cnhstring
categoriaCnhstring
validadeCnhdate
veiculoTipostring
veiculoMarcastring
veiculoModelostring
veiculoCorstring
veiculoAnointeger
placastring
documentoCnhUrlstring
documentoVeiculoUrlstring
selfieUrlstring
chavePixstring
tipoChavePixstring
statusstring
motivoStatusstring
avaliacaoMediadecimal
totalAvaliacoesinteger
totalViagensinteger
totalEntregasinteger
onlineboolean
ocupadoboolean
criadoEmdatetime
latitudenumber
longitudenumber
posicaoEmdatetime

Status possíveis

  • 200 OK
PATCH /api/mobility/drivers/me/location Atualiza a posição (a cada ~5 s). Prefira o hub /hubs/mobility (AtualizarLocalizacao). Motorista

Atualiza a posição (a cada ~5 s). Prefira o hub /hubs/mobility (AtualizarLocalizacao).

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Corpo (JSON) · UpdateLocationRequest

CampoTipoObrigatórioDescrição
latitudenumbersim
longitudenumbersim

Status possíveis

  • 204 Sem conteúdo
GET /api/mobility/drivers/me/earnings Ganhos do motorista. Motorista

Ganhos do motorista.

Permissão: Exige Admin ou Motorista (ou escopo mobility).

Resposta · GanhosDto

CampoTipoDescrição
hojedecimal
semanadecimal
mesdecimal
totaldecimal
viagensHojeinteger
viagensMesinteger
entregasMesinteger
viagensSemanainteger
viagensTotalinteger

Status possíveis

  • 200 OK

Back-office do Mobility: aprovação de motoristas, tabela de preços, operação e reclamações.

GET /api/mobility/admin/drivers Lista motoristas com filtro por status e busca, paginado. Admin

Lista motoristas com filtro por status e busca, paginado.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
statusqueryStatusMotorista
searchquerystring
pagequeryinteger
pageSizequeryinteger

Resposta · MotoristaPaginaDto

CampoTipoDescrição
itensMotoristaDto[]
paginainteger
tamanhointeger
totalinteger

Status possíveis

  • 200 OK
GET /api/mobility/admin/drivers/{id} Detalhe completo de um motorista, com documentos e veículo. Admin

Detalhe completo de um motorista, com documentos e veículo.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · MotoristaDto

CampoTipoDescrição
iduuid
usuarioIduuid
nomestring
cpfstring
telefonestring
fotoUrlstring
cnhstring
categoriaCnhstring
validadeCnhdate
veiculoTipostring
veiculoMarcastring
veiculoModelostring
veiculoCorstring
veiculoAnointeger
placastring
documentoCnhUrlstring
documentoVeiculoUrlstring
selfieUrlstring
chavePixstring
tipoChavePixstring
statusstring
motivoStatusstring
avaliacaoMediadecimal
totalAvaliacoesinteger
totalViagensinteger
totalEntregasinteger
onlineboolean
ocupadoboolean
criadoEmdatetime
latitudenumber
longitudenumber
posicaoEmdatetime

Status possíveis

  • 200 OK
PATCH /api/mobility/admin/drivers/{id}/decision Aprova/rejeita cadastros pendentes e ativa/suspende/bloqueia quem já foi aprovado. Admin

Aprova/rejeita cadastros pendentes e ativa/suspende/bloqueia quem já foi aprovado.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · DriverDecisionRequest

CampoTipoObrigatórioDescrição
decisaoDecisaoMotoristasim
motivostringnão

Resposta · MotoristaDto

CampoTipoDescrição
iduuid
usuarioIduuid
nomestring
cpfstring
telefonestring
fotoUrlstring
cnhstring
categoriaCnhstring
validadeCnhdate
veiculoTipostring
veiculoMarcastring
veiculoModelostring
veiculoCorstring
veiculoAnointeger
placastring
documentoCnhUrlstring
documentoVeiculoUrlstring
selfieUrlstring
chavePixstring
tipoChavePixstring
statusstring
motivoStatusstring
avaliacaoMediadecimal
totalAvaliacoesinteger
totalViagensinteger
totalEntregasinteger
onlineboolean
ocupadoboolean
criadoEmdatetime
latitudenumber
longitudenumber
posicaoEmdatetime

Status possíveis

  • 200 OK
GET /api/mobility/admin/categories Lista todas as categorias de serviço, inclusive as inativas. Admin

Lista todas as categorias de serviço, inclusive as inativas.

Permissão: Exige o papel Admin (ou escopo admin).

Resposta · IReadOnlyList<CategoriaDto>

CampoTipoDescrição
iduuid
nomestring
descricaostring
iconeUrlstring
tipoVeiculostring
tarifaBasedecimal
precoKmdecimal
precoMinutodecimal
maxPassageirosinteger
ordeminteger
ativaboolean

Status possíveis

  • 200 OK
POST /api/mobility/admin/categories Cria uma categoria: veículo, tarifa base, preço por km e por minuto, máximo de passageiros. Admin

Cria uma categoria: veículo, tarifa base, preço por km e por minuto, máximo de passageiros.

Permissão: Exige o papel Admin (ou escopo admin).

Corpo (JSON) · SaveCategoryRequest

CampoTipoObrigatórioDescrição
nomestringsim
tipoVeiculoTipoVeiculosim
tarifaBasedecimalsim
precoKmdecimalsim
precoMinutodecimalsim
maxPassageirosintegersim
descricaostringnão
iconeUrlstringnão
ordemintegernãoPadrão: 0.
ativabooleannãoPadrão: true.

Resposta · CategoriaDto

CampoTipoDescrição
iduuid
nomestring
descricaostring
iconeUrlstring
tipoVeiculostring
tarifaBasedecimal
precoKmdecimal
precoMinutodecimal
maxPassageirosinteger
ordeminteger
ativaboolean

Status possíveis

  • 200 OK
PUT /api/mobility/admin/categories/{id} Atualiza uma categoria de serviço. Admin

Atualiza uma categoria de serviço.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · SaveCategoryRequest

CampoTipoObrigatórioDescrição
nomestringsim
tipoVeiculoTipoVeiculosim
tarifaBasedecimalsim
precoKmdecimalsim
precoMinutodecimalsim
maxPassageirosintegersim
descricaostringnão
iconeUrlstringnão
ordemintegernãoPadrão: 0.
ativabooleannãoPadrão: true.

Resposta · CategoriaDto

CampoTipoDescrição
iduuid
nomestring
descricaostring
iconeUrlstring
tipoVeiculostring
tarifaBasedecimal
precoKmdecimal
precoMinutodecimal
maxPassageirosinteger
ordeminteger
ativaboolean

Status possíveis

  • 200 OK
GET /api/mobility/admin/price-rules Lista as regras de preço por região, opcionalmente de uma categoria. Admin

Lista as regras de preço por região, opcionalmente de uma categoria.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
categoryIdqueryuuid

Resposta · IReadOnlyList<RegraPrecoDto>

CampoTipoDescrição
iduuid
categoriaIduuid
regiaostring
distanciaMinimaKmnumber
tarifaMinimadecimal
precoKmdecimal
percentualTaxaPlataformadecimal
percentualImpostoMunicipaldecimal
ativaboolean

Status possíveis

  • 200 OK
POST /api/mobility/admin/price-rules Cria uma regra de preço para uma região: distância e tarifa mínimas, preço por km, taxa da plataforma e imposto municipal. Admin

Cria uma regra de preço para uma região: distância e tarifa mínimas, preço por km, taxa da plataforma e imposto municipal.

Permissão: Exige o papel Admin (ou escopo admin).

Corpo (JSON) · SavePriceRuleRequest

CampoTipoObrigatórioDescrição
categoriaIduuidsim
regiaostringsim
distanciaMinimaKmnumbersim
tarifaMinimadecimalsim
precoKmdecimalsim
percentualTaxaPlataformadecimalsim
percentualImpostoMunicipaldecimalsim
ativabooleannãoPadrão: true.

Resposta · RegraPrecoDto

CampoTipoDescrição
iduuid
categoriaIduuid
regiaostring
distanciaMinimaKmnumber
tarifaMinimadecimal
precoKmdecimal
percentualTaxaPlataformadecimal
percentualImpostoMunicipaldecimal
ativaboolean

Status possíveis

  • 200 OK
PUT /api/mobility/admin/price-rules/{id} Atualiza uma regra de preço. Admin

Atualiza uma regra de preço.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · SavePriceRuleRequest

CampoTipoObrigatórioDescrição
categoriaIduuidsim
regiaostringsim
distanciaMinimaKmnumbersim
tarifaMinimadecimalsim
precoKmdecimalsim
percentualTaxaPlataformadecimalsim
percentualImpostoMunicipaldecimalsim
ativabooleannãoPadrão: true.

Resposta · RegraPrecoDto

CampoTipoDescrição
iduuid
categoriaIduuid
regiaostring
distanciaMinimaKmnumber
tarifaMinimadecimal
precoKmdecimal
percentualTaxaPlataformadecimal
percentualImpostoMunicipaldecimal
ativaboolean

Status possíveis

  • 200 OK
DELETE /api/mobility/admin/price-rules/{id} Remove uma regra de preço. Admin

Remove uma regra de preço.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Status possíveis

  • 204 Sem conteúdo
GET /api/mobility/admin/rides Lista corridas para a operação, com filtros por status, cliente e motorista. Admin

Lista corridas para a operação, com filtros por status, cliente e motorista.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
statusqueryStatusViagem
clientIdqueryuuid
driverIdqueryuuid
pagequeryinteger
pageSizequeryinteger

Resposta · ViagemPaginaDto

CampoTipoDescrição
itensViagemDto[]
paginainteger
tamanhointeger
totalinteger

Status possíveis

  • 200 OK
GET /api/mobility/admin/deliveries Lista entregas para a operação, com filtro por status. Admin

Lista entregas para a operação, com filtro por status.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
statusqueryStatusEntrega
pagequeryinteger
pageSizequeryinteger

Resposta · EntregaPaginaDto

CampoTipoDescrição
itensEntregaDto[]
paginainteger
tamanhointeger
totalinteger

Status possíveis

  • 200 OK
GET /api/mobility/admin/metrics Indicadores da operação de mobilidade. Admin

Indicadores da operação de mobilidade.

Permissão: Exige o papel Admin (ou escopo admin).

Resposta · MetricasDto

CampoTipoDescrição
motoristasOnlineinteger
viagensProcurandointeger
viagensEmAndamentointeger
viagensConcluidasHojeinteger
receitaHojedecimal
taxaPlataformaHojedecimal
viagensConcluidasMesinteger
receitaMesdecimal
taxaPlataformaMesdecimal

Status possíveis

  • 200 OK
GET /api/mobility/admin/complaints Lista reclamações, com filtro por status. Admin

Lista reclamações, com filtro por status.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
statusqueryStatusReclamacao
pagequeryinteger
pageSizequeryinteger

Resposta · IReadOnlyList<ReclamacaoDto>

CampoTipoDescrição
iduuid
viagemIduuid
autorIduuid
categoriastring
descricaostring
statusstring
respostaAdminstring
criadaEmdatetime
resolvidaEmdatetime

Status possíveis

  • 200 OK
PATCH /api/mobility/admin/complaints/{id} Trata uma reclamação: muda o status (EmAnalise, Resolvida, Descartada) e registra a resposta. Admin

Trata uma reclamação: muda o status (EmAnalise, Resolvida, Descartada) e registra a resposta.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · HandleComplaintRequest

CampoTipoObrigatórioDescrição
statusStatusReclamacaosim
respostastringnão

Resposta · ReclamacaoDto

CampoTipoDescrição
iduuid
viagemIduuid
autorIduuid
categoriastring
descricaostring
statusstring
respostaAdminstring
criadaEmdatetime
resolvidaEmdatetime

Status possíveis

  • 200 OK
Módulo

Notificações e e-mail

Notificações no app, e-mail transacional e acompanhamento de entrega dos e-mails.

As notificações avisam o usuário dentro do app (reserva confirmada, corrida aceita, pagamento aprovado) e podem ser marcadas como lidas. O e-mail transacional envia confirmações, lembretes e recibos com HTML e texto, e os eventos de entrega (entregue, aberto, devolvido) voltam por webhook assinado.

Conceitos

Notificação
Aviso para um usuário, com status de lida ou não lida.
E-mail transacional
Mensagem disparada por um evento do sistema, com HTML, texto, cópias e uma tag para rastreio.

Fluxo típico

  1. O app busca as notificações do usuário com GET /api/notifications/{userId}.
  2. Ao abrir uma notificação, marca como lida com PATCH …/{id}/read.
  3. O seu backend envia e-mails com POST /api/email/send usando uma conta de Suporte ou o escopo email.

Exemplo: Enviar um e-mail de confirmação

Requisição
POST /api/email/send
{ "to": ["julia@exemplo.com"], "subject": "Seu horário está confirmado",
  "htmlBody": "<p>Quinta, 15/10 às 11h com a Ana.</p>", "tag": "agendamento-confirmado" }
Resposta
200 OK
{ "success": true, "messageId": "…", "errorMessage": null, "provider": "Resend" }

Regras importantes

  • Enviar e-mail exige Admin, Suporte ou o escopo email: destinatários livres seriam um vetor de spam.
  • O webhook do provedor de e-mail valida a assinatura antes de processar qualquer evento.

Referência de endpoints

Endpoints for device registration and push notification token management.

GET /api/notifications/{userId} Lista as notificações de um usuário. Autenticado Dono

Lista as notificações de um usuário.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
userIdrotauuid
unreadOnlyqueryboolean

Resposta · IReadOnlyList<BriefApp.Partners.Queries.NotificationDto>

Status possíveis

  • 200 OK
PATCH /api/notifications/{notificationId}/read Marca uma notificação como lida. Autenticado Dono

Marca uma notificação como lida.

Permissão: Exige um token válido (usuário ou tenant). Também confere se quem chama é o dono do recurso (ou Admin).

Parâmetros

NomeOndeTipoDescrição
notificationIdrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 404 Não encontrado

Envio de e-mail transacional (consumido por BriefApp.Sdk.IEmailApi). Restrito a Admin/Suporte: enviar para destinatários arbitrários é vetor de spam/phishing.

POST /api/email/send Envia um e-mail transacional com HTML e/ou texto, cópias, remetente opcional e uma tag para rastreio. Envio de e-mail

Envia um e-mail transacional com HTML e/ou texto, cópias, remetente opcional e uma tag para rastreio.

Permissão: Exige Admin ou Suporte (ou escopo email).

Corpo (JSON) · SendEmailRequest

CampoTipoObrigatórioDescrição
tostring[]sim
subjectstringsim
htmlBodystringnão
textBodystringnão
fromstringnão
ccstring[]não
bccstring[]não
tagstringnão
providerstringnão

Resposta · SendEmailResponse

CampoTipoDescrição
successboolean
messageIdstring
errorMessagestring
providerstring

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 403 Sem permissão
  • 502 Falha no provedor

Recebe webhooks do Resend (eventos de entrega de e-mail). Valida a assinatura HMAC-SHA256 via Svix antes de processar qualquer evento. Endpoint: POST /api/webhooks/email/resend Headers Svix obrigatórios: svix-id, svix-timestamp, svix-signature

POST /api/webhooks/email/resend Webhook do Resend. Valida assinatura via headers Svix (svix-id, svix-timestamp, svix-signature). Ref: https://resend.com/docs/dashboard/webhooks/introduction Público

Webhook do Resend. Valida assinatura via headers Svix (svix-id, svix-timestamp, svix-signature). Ref: https://resend.com/docs/dashboard/webhooks/introduction

Permissão: Não exige token.

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 401 Não autenticado
Módulo

Arquivos e imagens

Upload seguro, metadados, download e exclusão de fotos e documentos.

O módulo de arquivos guarda avatares, fotos de galeria, documentos de motoristas e comprovantes de entrega. O upload vai para o armazenamento configurado na plataforma, e cada arquivo ganha um id e uma URL estável para usar no app.

Conceitos

Arquivo
Conteúdo enviado com metadados: nome, tipo, tamanho e provedor de origem.
Exclusão lógica
Ao apagar, o registro é marcado como removido e o arquivo sai do armazenamento.

Fluxo típico

  1. Envie o arquivo com POST /api/storage/upload (multipart/form-data, até 50 MB), opcionalmente ligando a uma entidade com entityType e entityId.
  2. Guarde o id e use a publicUrl devolvida nas telas.
  3. Remova com DELETE /api/storage/{id} quando não precisar mais.

Exemplo: Upload de uma foto

Requisição
POST /api/storage/upload
Content-Type: multipart/form-data

file=@corte.jpg
entityType=gallery
entityId=…
Resposta
201 Created
{ "id": "…", "originalName": "corte.jpg", "contentType": "image/jpeg", "sizeBytes": 284133,
  "storagePath": "…", "publicUrl": "https://…/corte.jpg", "createdAt": "2026-10-15T13:05:00Z" }

Regras importantes

  • O upload exige usuário autenticado; arquivos públicos podem ser lidos sem token.
  • Use a URL devolvida pela API em vez de montar caminhos à mão.

Referência de endpoints

Endpoints para upload seguro, consulta e streaming de arquivos/imagens (avatars, perfil, galeria). Integrado dinamicamente com HashiCorp Vault (S3, FileSystem, Firebase) via BriefApp.FileStorage.

POST /api/storage/upload Faz upload seguro de um arquivo (imagem, documento) para o storage configurado no Vault (S3, FileSystem ou Firebase). Autenticado

Faz upload seguro de um arquivo (imagem, documento) para o storage configurado no Vault (S3, FileSystem ou Firebase).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
fileformarquivo
entityTypeformstring
entityIdformuuid
providerformstring

Resposta · StoredFileResponse

CampoTipoDescrição
iduuid
originalNamestring
contentTypestring
sizeBytesinteger
storagePathstring
publicUrlstring
entityTypestring
entityIduuid
createdAtdatetime
providerstring

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 403 Sem permissão
GET /api/storage/{id} Retorna os metadados de um arquivo por ID. Público

Retorna os metadados de um arquivo por ID.

Permissão: Não exige token.

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · StoredFileResponse

CampoTipoDescrição
iduuid
originalNamestring
contentTypestring
sizeBytesinteger
storagePathstring
publicUrlstring
entityTypestring
entityIduuid
createdAtdatetime
providerstring

Status possíveis

  • 200 OK
  • 404 Não encontrado
GET /api/storage/files/{**storagePath} Streaming direto e seguro de arquivos públicos com cabeçalhos de cache. Resolve automaticamente o provedor de origem gravado no banco de dados. Público

Streaming direto e seguro de arquivos públicos com cabeçalhos de cache. Resolve automaticamente o provedor de origem gravado no banco de dados.

Permissão: Não exige token.

Parâmetros

NomeOndeTipoDescrição
storagePathquerystring

Status possíveis

  • 200 OK
  • 404 Não encontrado
GET /api/storage/{id}/download Streaming de arquivo por ID com resolução garantida do provedor original. Público

Streaming de arquivo por ID com resolução garantida do provedor original.

Permissão: Não exige token.

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Status possíveis

  • 200 OK
  • 404 Não encontrado
DELETE /api/storage/{id} Exclusão lógica (soft delete) e remoção do arquivo do storage de origem. Autenticado

Exclusão lógica (soft delete) e remoção do arquivo do storage de origem.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 404 Não encontrado
Módulo

Administração da plataforma

Tenants, chaves de API e provedores. Uso do time Brief App e do plano Enterprise.

Estes endpoints administram a própria plataforma: criar e suspender tenants, emitir, rotacionar e revogar chaves de API, e trocar o provedor de um componente (gateway de pagamento, armazenamento, KYC) sem deploy. No dia a dia quem usa é o time Brief App; clientes Enterprise podem receber acesso para gerir os próprios ambientes.

Conceitos

Tenant
Ambiente isolado de um cliente: slug, nome, plano, limites de requisição e origens permitidas.
Chave de API
Secret (sk_) ou Publishable (pk_), com escopos, validade e origens ou bundle IDs permitidos.
Rotação
Troca de chave com uma janela de sobreposição, para atualizar os sistemas sem queda.
Provedor
Implementação ativa de um componente. A troca passa por verificação prévia (preflight) obrigatória.

Estados possíveis

Tenant
  1. Active
  2. Suspended
  3. Canceled

Fluxo típico

  1. Crie o tenant com POST /api/admin/tenants.
  2. Gere as chaves com POST /api/admin/tenants/{id}/keys e entregue ao cliente.
  3. Rotacione periodicamente com …/keys/{keyId}/rotate, mantendo a chave antiga durante a janela.

Exemplo: Gerar uma chave secreta com escopos

Requisição
POST /api/admin/tenants/…/keys
{ "name": "backend-producao", "type": "Secret", "scopes": ["financial", "partners"] }
Resposta
201 Created
{ "keyId": "…", "tenantId": "…", "name": "backend-producao", "type": "Secret",
  "keyPrefix": "sk_live_8f3a", "plaintextKey": "sk_live_…", "scopes": ["financial", "partners"],
  "expiresAt": null, "createdAt": "2026-10-15T13:00:00Z" }

Regras importantes

  • Todos os endpoints exigem o papel Admin.
  • O valor completo da chave aparece uma única vez, na criação ou na rotação. Guarde em local seguro.

Referência de endpoints

POST /api/admin/tenants Cria um tenant com slug, nome, plano, limites de requisição e origens permitidas. Admin

Cria um tenant com slug, nome, plano, limites de requisição e origens permitidas.

Permissão: Exige o papel Admin (ou escopo admin).

Corpo (JSON) · CreateTenantRequest

CampoTipoObrigatórioDescrição
slugstringsim
namestringsim
planTenantPlannãoPadrão: TenantPlan.Standard.
rateLimitRpmintegernão
rateLimitBurstintegernão
allowedOriginsstring[]não
allowedBundleIdsstring[]não

Resposta · TenantDto

CampoTipoDescrição
iduuid
slugstring
namestring
statusTenantStatus
planTenantPlan
rateLimitRpminteger
rateLimitBurstinteger
allowedOriginsstring[]
allowedBundleIdsstring[]
createdAtdatetime
updatedAtdatetime

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 409 Conflito de estado
GET /api/admin/tenants Lista os tenants com paginação, opcionalmente filtrando por status. Admin

Lista os tenants com paginação, opcionalmente filtrando por status.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
pagequeryinteger
pageSizequeryinteger
statusqueryTenantStatus

Resposta · PagedResult<TenantDto>

CampoTipoDescrição
iduuid
slugstring
namestring
statusTenantStatus
planTenantPlan
rateLimitRpminteger
rateLimitBurstinteger
allowedOriginsstring[]
allowedBundleIdsstring[]
createdAtdatetime
updatedAtdatetime

Status possíveis

  • 200 OK
GET /api/admin/tenants/{id} Detalhe de um tenant. Admin

Detalhe de um tenant.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · TenantDto

CampoTipoDescrição
iduuid
slugstring
namestring
statusTenantStatus
planTenantPlan
rateLimitRpminteger
rateLimitBurstinteger
allowedOriginsstring[]
allowedBundleIdsstring[]
createdAtdatetime
updatedAtdatetime

Status possíveis

  • 200 OK
  • 404 Não encontrado
PUT /api/admin/tenants/{id}/suspend Suspende o tenant, informando o motivo. As chamadas dele passam a ser recusadas. Admin

Suspende o tenant, informando o motivo. As chamadas dele passam a ser recusadas.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · SuspendTenantRequest

CampoTipoObrigatórioDescrição
reasonstringsim

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
PUT /api/admin/tenants/{id}/activate Reativa um tenant suspenso. Admin

Reativa um tenant suspenso.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
PUT /api/admin/tenants/{id}/cancel Cancela o tenant definitivamente, informando o motivo. Admin

Cancela o tenant definitivamente, informando o motivo.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · SuspendTenantRequest

CampoTipoObrigatórioDescrição
reasonstringsim

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
POST /api/admin/tenants/{id}/keys Gera uma chave de API (Secret ou Publishable) com escopos, validade e origens permitidas. O valor completo só aparece nesta resposta. Admin

Gera uma chave de API (Secret ou Publishable) com escopos, validade e origens permitidas. O valor completo só aparece nesta resposta.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Corpo (JSON) · CreateApiKeyRequest

CampoTipoObrigatórioDescrição
namestringsim
typeApiKeyTypesim
scopesstring[]sim
expiresAtdatetimenão
allowedOriginsstring[]não
allowedBundleIdsstring[]não

Resposta · GeneratedApiKeyDto

CampoTipoDescrição
keyIduuid
tenantIduuid
namestring
typeApiKeyType
keyPrefixstring
plaintextKeystring
scopesstring[]
expiresAtdatetime
createdAtdatetime

Status possíveis

  • 201 Criado
  • 400 Dados inválidos
  • 404 Não encontrado
GET /api/admin/tenants/{id}/keys Lista as chaves do tenant (sem o valor secreto). Admin

Lista as chaves do tenant (sem o valor secreto).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid

Resposta · IReadOnlyList<TenantApiKeySummaryDto>

CampoTipoDescrição
iduuid
tenantIduuid
namestring
typeApiKeyType
keyPrefixstring
scopesstring[]
expiresAtdatetime
revokedAtdatetime
revocationReasonstring
lastUsedAtdatetime
createdAtdatetime
isActiveboolean

Status possíveis

  • 200 OK
DELETE /api/admin/tenants/{id}/keys/{keyId} Revoga uma chave, informando o motivo. Tokens novos deixam de ser emitidos com ela. Admin

Revoga uma chave, informando o motivo. Tokens novos deixam de ser emitidos com ela.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid
keyIdrotauuid

Corpo (JSON) · RevokeApiKeyRequest

CampoTipoObrigatórioDescrição
reasonstringsim

Status possíveis

  • 204 Sem conteúdo
  • 400 Dados inválidos
  • 404 Não encontrado
POST /api/admin/tenants/{id}/keys/{keyId}/rotate Gera uma chave substituta e mantém a antiga válida durante a janela de sobreposição. Admin

Gera uma chave substituta e mantém a antiga válida durante a janela de sobreposição.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
idrotauuid
keyIdrotauuid

Corpo (JSON) · RotateApiKeyRequest

CampoTipoObrigatórioDescrição
overlapWindowduraçãonão
newNamestringnão

Resposta · RotatedApiKeyResultDto

CampoTipoDescrição
newKeyGeneratedApiKeyDto
previousKeyExpiresAtdatetime
previousKeyIduuid

Status possíveis

  • 200 OK
  • 400 Dados inválidos
  • 404 Não encontrado

Endpoints administrativos para auditoria, visibilidade, validação prévia (preflight) e chaveamento dinâmico de provedores controlados via HashiCorp Vault.

GET /api/admin/providers Retorna o estado completo de provedores: efetivos (por tenant ou plataforma), catálogo de provedores suportados e divisão de origem (padrão vs override por tenant). Admin

Retorna o estado completo de provedores: efetivos (por tenant ou plataforma), catálogo de provedores suportados e divisão de origem (padrão vs override por tenant).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
tenantIdqueryuuid

Resposta · ProvidersOverviewResponse

CampoTipoDescrição
tenantIduuid
effectiveProvidersIReadOnlyDictionary<string, string>
platformProvidersIReadOnlyDictionary<string, string>
tenantOverridesIReadOnlyDictionary<string, string>
originBreakdownProviderOriginItem[]
supportedCatalogIReadOnlyDictionary<string, IReadOnlyList<string>>

Status possíveis

  • 200 OK
POST /api/admin/providers/preflight Executa verificação prévia (preflight) ativa antes de comutar um provedor. Valida chaves necessárias no Vault e executa health checks sem aplicar a troca. Admin

Executa verificação prévia (preflight) ativa antes de comutar um provedor. Valida chaves necessárias no Vault e executa health checks sem aplicar a troca.

Permissão: Exige o papel Admin (ou escopo admin).

Corpo (JSON) · AdminPreflightRequest

CampoTipoObrigatórioDescrição
componentstringsim
targetProviderstringsim
tenantIduuidnão

Resposta · PreflightValidationResult

CampoTipoDescrição
passedboolean
componentstring
targetProviderstring
tenantIduuid
isDryRunboolean
errorsstring[]
checkedCredentialsIReadOnlyDictionary<string, string>

Status possíveis

  • 200 OK
  • 400 Dados inválidos
POST /api/admin/providers/switch Comuta o provedor ativo de um componente (plataforma ou tenant específico) no Vault. Executa preflight obrigatório antes de salvar e invalida o cache do seletor. Suporta modo dry-run para teste operacional sem persistência. Admin

Comuta o provedor ativo de um componente (plataforma ou tenant específico) no Vault. Executa preflight obrigatório antes de salvar e invalida o cache do seletor. Suporta modo dry-run para teste operacional sem persistência.

Permissão: Exige o papel Admin (ou escopo admin).

Corpo (JSON) · AdminSwitchProviderRequest

CampoTipoObrigatórioDescrição
componentstringsim
targetProviderstringsim
tenantIduuidnão
dryRunbooleannãoPadrão: false.

Status possíveis

  • 200 OK
  • 400 Dados inválidos
Módulo

Kanban as a Service

Quadros, colunas (WIP, transições), cartões dinâmicos tipados jsonb, automações e webhooks.

O Kanban as a Service resolve a gestão operacional e o fluxo de trabalho de qualquer negócio. Cada quadro define seu schema de campos tipados (12 tipos: Moeda, Usuário, Data, Seleção, etc.), colunas com limite WIP e regras de transição. Cartões recebem valores validados e posições fracionárias para ordenação rápida. Automações assíncronas "quando → se → então" disparam ações em outros módulos (FileStorage, Email, Notifications, OCR, KYC, Payments) e webhooks assinados notificam sistemas externos.

Conceitos

Quadro
Dono do schema de campos tipados e das colunas. Identificado por chave única por tenant.
Campo
Definição tipada no schema do quadro: chave, rótulo, tipo, obrigatório, mínimo, máximo e regex.
Coluna
Etapa do fluxo: ordem, limiteWip (com wipEstrito), final, cor hex e lista de transições permitidas.
Cartão
Item de trabalho com título, descrição, valores em campos jsonb, posição ordinal e versão para concorrência otimista.
Vínculo
Associação de um cartão a qualquer entidade de negócio (cobrança, agendamento, usuário ou id externo).
Automação
Gatilho de evento + condições declarativas + ações integradas aos serviços da plataforma.
Webhook
Disparo de eventos kanban.* para URLs externas com assinatura HMAC e retry automático.

Estados possíveis

Cartão
  1. Ativo
  2. Arquivado
Entrega de Webhook
  1. Pendente
  2. Entregue
  3. Falhou

Fluxo típico

  1. Crie um quadro com POST /api/kanban/boards definindo colunas e campos tipados.
  2. Crie cartões na primeira coluna com POST /api/kanban/boards/{id}/cards.
  3. Mova cartões entre colunas com POST /api/kanban/cards/{id}/move, validando WIP e transições.
  4. Configure automações com POST /api/kanban/boards/{id}/automations para reagir a movimentos ou eventos externos.
  5. Inscreva webhooks de saída com POST /api/kanban/webhooks para integrar seu front-end.

Exemplo: Criar cartão com campos personalizados

Requisição
POST /api/kanban/boards/meu-quadro/cards
{ "titulo": "Aprovação de Fornecedor", "colunaId": "…",
  "campos": { "valor": 4500.00, "prioridade": "Alta", "responsavel": "…" } }
Resposta
201 Created
{ "id": "…", "titulo": "Aprovação de Fornecedor", "colunaId": "…",
  "posicao": 1000.0, "versao": 1, "campos": { "valor": 4500.00, "prioridade": "Alta" }, … }

Regras importantes

  • Todas as rotas exigem scope:kanban (token de API key) ou role Parceiro/Admin.
  • Com wipEstrito ativado, mover um cartão para uma coluna cheia devolve 409.
  • Toda mutação de cartão valida concorrência otimista via versao (ou header If-Match).

Referência de endpoints

Kanban as a service: quadros, schema de campos dos cartões, colunas, cartões de um quadro e automações. Tudo é isolado pelo tenant do token; exige o escopo kanban (ou role Parceiro/Admin).

GET /api/kanban/boards Quadros do tenant. Autenticado

Quadros do tenant.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
includeArchivedqueryboolean

Resposta · IReadOnlyList<QuadroResumoDto>

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/boards Cria um quadro, opcionalmente já com campos e colunas. Autenticado

Cria um quadro, opcionalmente já com campos e colunas.

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · CreateBoardRequest

CampoTipoObrigatórioDescrição
nomestringsim
chavestringnão
descricaostringnão
camposDefinicaoCampo[]não
colunasColunaInput[]não

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 201 Criado
  • 409 Conflito de estado
GET /api/kanban/boards/{boardId} Quadro com campos, colunas (em ordem) e a contagem de cartões ativos por coluna. Autenticado

Quadro com campos, colunas (em ordem) e a contagem de cartões ativos por coluna.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 200 OK
PUT /api/kanban/boards/{boardId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Corpo (JSON) · UpdateBoardRequest

CampoTipoObrigatórioDescrição
nomestringsim
descricaostringnão

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 200 OK
POST /api/kanban/boards/{boardId}/archive Arquiva o quadro: fica somente leitura e para de disparar automações. Autenticado

Arquiva o quadro: fica somente leitura e para de disparar automações.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Resposta · QuadroResumoDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/boards/{boardId}/restore Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Resposta · QuadroResumoDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
PUT /api/kanban/boards/{boardId}/policy Estreita, neste quadro, os eventos e ações de automação que a política do tenant permite (nunca amplia). Nulo remove a restrição; automações já salvas que saírem da regra deixam de executar. Autenticado

Estreita, neste quadro, os eventos e ações de automação que a política do tenant permite (nunca amplia). Nulo remove a restrição; automações já salvas que saírem da regra deixam de executar.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Corpo (JSON) · BoardRestrictionsRequest

CampoTipoObrigatórioDescrição
eventosPermitidosstring[]não
acoesPermitidasTipoAcao[]não

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 200 OK
GET /api/kanban/boards/{boardId}/fields Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Resposta · IReadOnlyList<DefinicaoCampo>

CampoTipoDescrição
chavestring
rotulostring
tipoTipoCampo
obrigatorioboolean
opcoesstring[]
minimodecimal
maximodecimal
padraostring
valorPadraoJsonElement
descricaostring

Status possíveis

  • 200 OK
PUT /api/kanban/boards/{boardId}/fields Substitui todos os campos. Campos removidos têm os valores apagados de todos os cartões. Autenticado

Substitui todos os campos. Campos removidos têm os valores apagados de todos os cartões.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Corpo (JSON) · IReadOnlyList<DefinicaoCampo>

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 200 OK
POST /api/kanban/boards/{boardId}/fields Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Corpo (JSON) · DefinicaoCampo

CampoTipoObrigatórioDescrição
chavestringsim
rotulostringsim
tipoTipoCamposim
obrigatoriobooleannãoPadrão: false.
opcoesstring[]não
minimodecimalnão
maximodecimalnão
padraostringnão
valorPadraoJsonElementnão
descricaostringnão

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 200 OK
PUT /api/kanban/boards/{boardId}/fields/{key} Atualiza um campo. O tipo não muda: para outro tipo, remova e crie com outra chave. Autenticado

Atualiza um campo. O tipo não muda: para outro tipo, remova e crie com outra chave.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
keyrotastring

Corpo (JSON) · DefinicaoCampo

CampoTipoObrigatórioDescrição
chavestringsim
rotulostringsim
tipoTipoCamposim
obrigatoriobooleannãoPadrão: false.
opcoesstring[]não
minimodecimalnão
maximodecimalnão
padraostringnão
valorPadraoJsonElementnão
descricaostringnão

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 200 OK
DELETE /api/kanban/boards/{boardId}/fields/{key} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
keyrotastring

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 200 OK
POST /api/kanban/boards/{boardId}/columns Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Corpo (JSON) · ColumnRequest

CampoTipoObrigatórioDescrição
nomestringsim
posicaointegernão
limiteWipintegernão
wipEstritobooleannãoPadrão: false.
finalbooleannãoPadrão: false.
corstringnão
transicoesuuid[]não

Resposta · ColunaDto

CampoTipoDescrição
iduuid
nomestring
ordeminteger
limiteWipinteger
wipEstritoboolean
finalboolean
corstring
transicoesPermitidasuuid[]
quantidadeCartoesinteger

Status possíveis

  • 200 OK
PUT /api/kanban/boards/{boardId}/columns/{columnId} Atualiza a coluna. transicoes: nulo mantém, lista vazia libera qualquer destino. Autenticado

Atualiza a coluna. transicoes: nulo mantém, lista vazia libera qualquer destino.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
columnIdrotauuid

Corpo (JSON) · ColumnRequest

CampoTipoObrigatórioDescrição
nomestringsim
posicaointegernão
limiteWipintegernão
wipEstritobooleannãoPadrão: false.
finalbooleannãoPadrão: false.
corstringnão
transicoesuuid[]não

Resposta · ColunaDto

CampoTipoDescrição
iduuid
nomestring
ordeminteger
limiteWipinteger
wipEstritoboolean
finalboolean
corstring
transicoesPermitidasuuid[]
quantidadeCartoesinteger

Status possíveis

  • 200 OK
DELETE /api/kanban/boards/{boardId}/columns/{columnId} Remove a coluna; se houver cartões, moveCardsTo indica para onde vão. Autenticado

Remove a coluna; se houver cartões, moveCardsTo indica para onde vão.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
columnIdrotauuid
moveCardsToqueryuuid

Status possíveis

  • 204 Sem conteúdo
  • 409 Conflito de estado
PUT /api/kanban/boards/{boardId}/columns/order Nova ordem das colunas (todas, cada uma uma vez). Autenticado

Nova ordem das colunas (todas, cada uma uma vez).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Corpo (JSON) · ReorderColumnsRequest

CampoTipoObrigatórioDescrição
colunasuuid[]sim

Resposta · QuadroDto

CampoTipoDescrição
iduuid
chavestring
nomestring
descricaostring
arquivadoboolean
versaoSchemainteger
versaointeger
camposDefinicaoCampo[]
colunasColunaDto[]
criadoEmdatetime
atualizadoEmdatetime
eventosPermitidosstring[]
acoesPermitidasstring[]

Status possíveis

  • 200 OK
GET /api/kanban/boards/{boardId}/cards Cartões paginados, ordenados por coluna e posição. Filtros por campo customizado como ?field.prioridade=Alta&amp;field.valor=150 (igualdade; em multisseleção, "contém"). archived: omitido = ativos, true = só arquivados, false = todos. Autenticado

Cartões paginados, ordenados por coluna e posição. Filtros por campo customizado como ?field.prioridade=Alta&amp;field.valor=150 (igualdade; em multisseleção, "contém"). archived: omitido = ativos, true = só arquivados, false = todos.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
columnIdqueryuuid
searchquerystring
archivedqueryboolean
pagequeryinteger
pageSizequeryinteger

Resposta · PaginaDto<CartaoDto>

CampoTipoDescrição
iduuid
quadroIduuid
colunaIduuid
titulostring
descricaostring
posicaostring
camposIReadOnlyDictionary<string, JsonElement>
arquivadoboolean
versaointeger
criadoPoruuid
atualizadoPoruuid
criadoEmdatetime
atualizadoEmdatetime
entrouNaColunaEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/boards/{boardId}/cards Cria um cartão. Sem coluna, entra na primeira; sem âncora, no fim. Campos validados pelo schema do quadro. Autenticado

Cria um cartão. Sem coluna, entra na primeira; sem âncora, no fim. Campos validados pelo schema do quadro.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Corpo (JSON) · CreateCardRequest

CampoTipoObrigatórioDescrição
titulostringsim
descricaostringnão
colunaIduuidnão
camposDictionary<string, JsonElement>não
aposCartaoIduuidnão
antesCartaoIduuidnão

Resposta · CartaoDto

CampoTipoDescrição
iduuid
quadroIduuid
colunaIduuid
titulostring
descricaostring
posicaostring
camposIReadOnlyDictionary<string, JsonElement>
arquivadoboolean
versaointeger
criadoPoruuid
atualizadoPoruuid
criadoEmdatetime
atualizadoEmdatetime
entrouNaColunaEmdatetime

Status possíveis

  • 201 Criado
GET /api/kanban/boards/{boardId}/automations Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Resposta · IReadOnlyList<AutomacaoDto>

CampoTipoDescrição
iduuid
quadroIduuid
nomestring
ativaboolean
gatilhoGatilhoAutomacao
condicoesCondicaoAutomacao[]
acoesAcaoAutomacao[]
execucoesinteger
falhasinteger
ultimaExecucaoEmdatetime
ultimoErrostring
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/boards/{boardId}/automations Cria uma regra "quando → se → então". Gatilho: evento do Kanban ("kanban.cartao.movido") ou de qualquer módulo ("payments.pagamento.confirmado", "scheduling.*"). Ações: mover, atualizar campos, comentar, arquivar, criar cartão, vincular entidade, e-mail, notificação, OCR, KYC, cobrança e webhook. Textos aceitam {{caminho}}. Autenticado

Cria uma regra "quando → se → então". Gatilho: evento do Kanban ("kanban.cartao.movido") ou de qualquer módulo ("payments.pagamento.confirmado", "scheduling.*"). Ações: mover, atualizar campos, comentar, arquivar, criar cartão, vincular entidade, e-mail, notificação, OCR, KYC, cobrança e webhook. Textos aceitam {{caminho}}.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid

Corpo (JSON) · AutomationRequest

CampoTipoObrigatórioDescrição
nomestringsim
gatilhoGatilhoAutomacaosim
acoesAcaoAutomacao[]sim
condicoesCondicaoAutomacao[]não
ativabooleannãoPadrão: true.

Resposta · AutomacaoDto

CampoTipoDescrição
iduuid
quadroIduuid
nomestring
ativaboolean
gatilhoGatilhoAutomacao
condicoesCondicaoAutomacao[]
acoesAcaoAutomacao[]
execucoesinteger
falhasinteger
ultimaExecucaoEmdatetime
ultimoErrostring
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 201 Criado
GET /api/kanban/boards/{boardId}/automations/{automationId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
automationIdrotauuid

Resposta · AutomacaoDto

CampoTipoDescrição
iduuid
quadroIduuid
nomestring
ativaboolean
gatilhoGatilhoAutomacao
condicoesCondicaoAutomacao[]
acoesAcaoAutomacao[]
execucoesinteger
falhasinteger
ultimaExecucaoEmdatetime
ultimoErrostring
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
PUT /api/kanban/boards/{boardId}/automations/{automationId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
automationIdrotauuid

Corpo (JSON) · AutomationRequest

CampoTipoObrigatórioDescrição
nomestringsim
gatilhoGatilhoAutomacaosim
acoesAcaoAutomacao[]sim
condicoesCondicaoAutomacao[]não
ativabooleannãoPadrão: true.

Resposta · AutomacaoDto

CampoTipoDescrição
iduuid
quadroIduuid
nomestring
ativaboolean
gatilhoGatilhoAutomacao
condicoesCondicaoAutomacao[]
acoesAcaoAutomacao[]
execucoesinteger
falhasinteger
ultimaExecucaoEmdatetime
ultimoErrostring
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/boards/{boardId}/automations/{automationId}/enable Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
automationIdrotauuid

Resposta · AutomacaoDto

CampoTipoDescrição
iduuid
quadroIduuid
nomestring
ativaboolean
gatilhoGatilhoAutomacao
condicoesCondicaoAutomacao[]
acoesAcaoAutomacao[]
execucoesinteger
falhasinteger
ultimaExecucaoEmdatetime
ultimoErrostring
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/boards/{boardId}/automations/{automationId}/disable Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
automationIdrotauuid

Resposta · AutomacaoDto

CampoTipoDescrição
iduuid
quadroIduuid
nomestring
ativaboolean
gatilhoGatilhoAutomacao
condicoesCondicaoAutomacao[]
acoesAcaoAutomacao[]
execucoesinteger
falhasinteger
ultimaExecucaoEmdatetime
ultimoErrostring
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
DELETE /api/kanban/boards/{boardId}/automations/{automationId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
automationIdrotauuid

Status possíveis

  • 204 Sem conteúdo
GET /api/kanban/boards/{boardId}/automations/{automationId}/executions Histórico de execuções (ações executadas, saídas e erros). Autenticado

Histórico de execuções (ações executadas, saídas e erros).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdrotauuid
automationIdrotauuid
successqueryboolean
pagequeryinteger
pageSizequeryinteger

Resposta · PaginaDto<ExecucaoAutomacaoDto>

CampoTipoDescrição
iduuid
automacaoIduuid
eventoIduuid
eventoTipostring
cartaoIduuid
sucessoboolean
errostring
resultadosJsonElement
duracaoMsinteger
ocorridaEmdatetime

Status possíveis

  • 200 OK

Cartões do Kanban: edição, movimento, histórico, comentários, anexos (FileStorage) e vínculos com entidades.

GET /api/kanban/cards/{cardId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Resposta · CartaoDto

CampoTipoDescrição
iduuid
quadroIduuid
colunaIduuid
titulostring
descricaostring
posicaostring
camposIReadOnlyDictionary<string, JsonElement>
arquivadoboolean
versaointeger
criadoPoruuid
atualizadoPoruuid
criadoEmdatetime
atualizadoEmdatetime
entrouNaColunaEmdatetime

Status possíveis

  • 200 OK
PATCH /api/kanban/cards/{cardId} Atualização parcial. Em campos só as chaves enviadas mudam e null apaga o valor. Concorrência otimista por versaoEsperada ou cabeçalho If-Match (409 se o cartão mudou). Autenticado

Atualização parcial. Em campos só as chaves enviadas mudam e null apaga o valor. Concorrência otimista por versaoEsperada ou cabeçalho If-Match (409 se o cartão mudou).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Corpo (JSON) · UpdateCardRequest

CampoTipoObrigatórioDescrição
titulostringnão
descricaostringnão
camposDictionary<string, JsonElement>não
versaoEsperadaintegernão

Resposta · CartaoDto

CampoTipoDescrição
iduuid
quadroIduuid
colunaIduuid
titulostring
descricaostring
posicaostring
camposIReadOnlyDictionary<string, JsonElement>
arquivadoboolean
versaointeger
criadoPoruuid
atualizadoPoruuid
criadoEmdatetime
atualizadoEmdatetime
entrouNaColunaEmdatetime

Status possíveis

  • 200 OK
  • 409 Conflito de estado
POST /api/kanban/cards/{cardId}/move Move para a coluna, depois de aposCartaoId e/ou antes de antesCartaoId (sem âncora: fim). Respeita WIP e transições. Autenticado

Move para a coluna, depois de aposCartaoId e/ou antes de antesCartaoId (sem âncora: fim). Respeita WIP e transições.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Corpo (JSON) · MoveCardRequest

CampoTipoObrigatórioDescrição
colunaIduuidsim
aposCartaoIduuidnão
antesCartaoIduuidnão
versaoEsperadaintegernão

Resposta · CartaoDto

CampoTipoDescrição
iduuid
quadroIduuid
colunaIduuid
titulostring
descricaostring
posicaostring
camposIReadOnlyDictionary<string, JsonElement>
arquivadoboolean
versaointeger
criadoPoruuid
atualizadoPoruuid
criadoEmdatetime
atualizadoEmdatetime
entrouNaColunaEmdatetime

Status possíveis

  • 200 OK
  • 409 Conflito de estado
POST /api/kanban/cards/{cardId}/archive Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Resposta · CartaoDto

CampoTipoDescrição
iduuid
quadroIduuid
colunaIduuid
titulostring
descricaostring
posicaostring
camposIReadOnlyDictionary<string, JsonElement>
arquivadoboolean
versaointeger
criadoPoruuid
atualizadoPoruuid
criadoEmdatetime
atualizadoEmdatetime
entrouNaColunaEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/cards/{cardId}/restore Restaura ao fim da coluna de origem ou de colunaId. Autenticado

Restaura ao fim da coluna de origem ou de colunaId.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Corpo (JSON) · RestoreCardRequest

CampoTipoObrigatórioDescrição
colunaIduuidnão

Resposta · CartaoDto

CampoTipoDescrição
iduuid
quadroIduuid
colunaIduuid
titulostring
descricaostring
posicaostring
camposIReadOnlyDictionary<string, JsonElement>
arquivadoboolean
versaointeger
criadoPoruuid
atualizadoPoruuid
criadoEmdatetime
atualizadoEmdatetime
entrouNaColunaEmdatetime

Status possíveis

  • 200 OK
DELETE /api/kanban/cards/{cardId} Exclui definitivamente o cartão e o seu histórico. Autenticado

Exclui definitivamente o cartão e o seu histórico.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Status possíveis

  • 204 Sem conteúdo
GET /api/kanban/cards/{cardId}/activity Histórico do cartão, mais recente primeiro. Autenticado

Histórico do cartão, mais recente primeiro.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid
pagequeryinteger
pageSizequeryinteger

Resposta · PaginaDto<AtividadeDto>

CampoTipoDescrição
iduuid
cartaoIduuid
tipostring
autorIduuid
automacaoIduuid
dadosJsonElement
ocorridaEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/cards/{cardId}/comments Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Corpo (JSON) · CommentRequest

CampoTipoObrigatórioDescrição
textostringsim

Resposta · AtividadeDto

CampoTipoDescrição
iduuid
cartaoIduuid
tipostring
autorIduuid
automacaoIduuid
dadosJsonElement
ocorridaEmdatetime

Status possíveis

  • 200 OK
GET /api/kanban/cards/{cardId}/attachments Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Resposta · IReadOnlyList<AnexoDto>

CampoTipoDescrição
iduuid
cartaoIduuid
nomeArquivostring
contentTypestring
tamanhointeger
provedorstring
urlPublicastring
enviadoPoruuid
criadoEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/cards/{cardId}/attachments Envia um arquivo (multipart, campo file) para o provedor de storage ativo do tenant. Autenticado

Envia um arquivo (multipart, campo file) para o provedor de storage ativo do tenant.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid
fileformarquivo

Resposta · AnexoDto

CampoTipoDescrição
iduuid
cartaoIduuid
nomeArquivostring
contentTypestring
tamanhointeger
provedorstring
urlPublicastring
enviadoPoruuid
criadoEmdatetime

Status possíveis

  • 200 OK
GET /api/kanban/cards/{cardId}/attachments/{attachmentId}/content Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid
attachmentIdrotauuid

Resposta · FileStreamResult

Status possíveis

  • 200 OK
DELETE /api/kanban/cards/{cardId}/attachments/{attachmentId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid
attachmentIdrotauuid

Status possíveis

  • 204 Sem conteúdo
POST /api/kanban/cards/{cardId}/links Vincula o cartão a uma entidade (ex.: {"entidade":"cobranca","entidadeId":"…"}). Tipos conhecidos (GET /api/kanban/entities) são conferidos no tenant; outros são aceitos como ids externos. Autenticado

Vincula o cartão a uma entidade (ex.: {"entidade":"cobranca","entidadeId":"…"}). Tipos conhecidos (GET /api/kanban/entities) são conferidos no tenant; outros são aceitos como ids externos.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
cardIdrotauuid

Corpo (JSON) · LinkRequest

CampoTipoObrigatórioDescrição
entidadestringsim
entidadeIdstringsim
rotulostringnão

Resposta · VinculoDto

CampoTipoDescrição
iduuid
cartaoIduuid
quadroIduuid
entidadestring
entidadeIdstring
rotulostring
criadoPoruuid
criadoEmdatetime

Status possíveis

  • 200 OK
  • 409 Conflito de estado

Webhooks de saída do Kanban (assinados com HMAC-SHA256: X-BriefApp-Signature: sha256=hex(HMAC(segredo, "{timestamp}.{corpo}"))), catálogo de eventos e consulta de cartões por entidade de negócio.

GET /api/kanban/events Tipos de evento do Kanban (webhooks e gatilhos) e tipos de entidade com checagem de existência. Autenticado

Tipos de evento do Kanban (webhooks e gatilhos) e tipos de entidade com checagem de existência.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · KanbanCatalogResponse

CampoTipoDescrição
eventosstring[]
entidadesstring[]

Status possíveis

  • 200 OK
GET /api/kanban/policy Política efetiva do tenant: eventos e ações permitidos nas automações e limites (definida pelo Admin). Autenticado

Política efetiva do tenant: eventos e ações permitidos nas automações e limites (definida pelo Admin).

Permissão: Exige um token válido (usuário ou tenant).

Resposta · PoliticaDto

CampoTipoDescrição
tenantIduuid
habilitadoboolean
eventosPermitidosstring[]
acoesPermitidasstring[]
maximoQuadrosinteger
maximoAutomacoesPorQuadrointeger
maximoWebhooksinteger
maximoAnexoBytesinteger
maximoAnexosPorCartaointeger
intervalosRetrySegundosinteger[]
limiteFalhasParaDesativarinteger
personalizadaboolean
personalizacaoPersonalizacaoPolitica
atualizadaEmdatetime
atualizadoPoruuid

Status possíveis

  • 200 OK
GET /api/kanban/entities Tipos de entidade conferidos ao vincular (os demais são aceitos como ids externos). Autenticado

Tipos de entidade conferidos ao vincular (os demais são aceitos como ids externos).

Permissão: Exige um token válido (usuário ou tenant).

Resposta · IReadOnlyList<string>

Status possíveis

  • 200 OK
GET /api/kanban/entities/{entity}/{entityId}/cards Cartões de todos os quadros vinculados à entidade (ex.: /entities/cobranca/{id}/cards). Autenticado

Cartões de todos os quadros vinculados à entidade (ex.: /entities/cobranca/{id}/cards).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
entityrotastring
entityIdrotastring
includeArchivedqueryboolean

Resposta · IReadOnlyList<CartaoDto>

CampoTipoDescrição
iduuid
quadroIduuid
colunaIduuid
titulostring
descricaostring
posicaostring
camposIReadOnlyDictionary<string, JsonElement>
arquivadoboolean
versaointeger
criadoPoruuid
atualizadoPoruuid
criadoEmdatetime
atualizadoEmdatetime
entrouNaColunaEmdatetime

Status possíveis

  • 200 OK
GET /api/kanban/webhooks Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
boardIdqueryuuid

Resposta · IReadOnlyList<WebhookDto>

CampoTipoDescrição
iduuid
quadroIduuid
urlstring
descricaostring
eventosstring[]
ativaboolean
falhasConsecutivasinteger
desativadaAutomaticamenteEmdatetime
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/webhooks Cria a assinatura. O segredo HMAC só aparece nesta resposta (e na rotação). Autenticado

Cria a assinatura. O segredo HMAC só aparece nesta resposta (e na rotação).

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · WebhookRequest

CampoTipoObrigatórioDescrição
urlstringsim
eventosstring[]não
quadroIduuidnão
descricaostringnão
ativabooleannãoPadrão: true.

Resposta · WebhookComSegredoDto

CampoTipoDescrição
webhookWebhookDto
segredostring

Status possíveis

  • 201 Criado
GET /api/kanban/webhooks/{webhookId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
webhookIdrotauuid

Resposta · WebhookDto

CampoTipoDescrição
iduuid
quadroIduuid
urlstring
descricaostring
eventosstring[]
ativaboolean
falhasConsecutivasinteger
desativadaAutomaticamenteEmdatetime
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
PUT /api/kanban/webhooks/{webhookId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
webhookIdrotauuid

Corpo (JSON) · WebhookRequest

CampoTipoObrigatórioDescrição
urlstringsim
eventosstring[]não
quadroIduuidnão
descricaostringnão
ativabooleannãoPadrão: true.

Resposta · WebhookDto

CampoTipoDescrição
iduuid
quadroIduuid
urlstring
descricaostring
eventosstring[]
ativaboolean
falhasConsecutivasinteger
desativadaAutomaticamenteEmdatetime
criadoEmdatetime
atualizadoEmdatetime

Status possíveis

  • 200 OK
DELETE /api/kanban/webhooks/{webhookId} Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
webhookIdrotauuid

Status possíveis

  • 204 Sem conteúdo
POST /api/kanban/webhooks/{webhookId}/rotate-secret Autenticado

Sem descrição.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
webhookIdrotauuid

Resposta · WebhookComSegredoDto

CampoTipoDescrição
webhookWebhookDto
segredostring

Status possíveis

  • 200 OK
POST /api/kanban/webhooks/{webhookId}/ping Enfileira um evento kanban.ping só para esta assinatura (teste de conectividade e assinatura). Autenticado

Enfileira um evento kanban.ping só para esta assinatura (teste de conectividade e assinatura).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
webhookIdrotauuid

Resposta · EntregaWebhookDto

CampoTipoDescrição
iduuid
assinaturaIduuid
eventoIduuid
tipostring
statusstring
tentativasinteger
proximaTentativaEmdatetime
ultimoStatusHttpinteger
ultimoErrostring
ultimaRespostastring
ultimaDuracaoMsinteger
criadaEmdatetime
entregueEmdatetime

Status possíveis

  • 200 OK
GET /api/kanban/webhooks/{webhookId}/deliveries Entregas da assinatura (status, tentativas, último HTTP/erro). Autenticado

Entregas da assinatura (status, tentativas, último HTTP/erro).

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
webhookIdrotauuid
statusqueryStatusEntregaWebhook
pagequeryinteger
pageSizequeryinteger

Resposta · PaginaDto<EntregaWebhookDto>

CampoTipoDescrição
iduuid
assinaturaIduuid
eventoIduuid
tipostring
statusstring
tentativasinteger
proximaTentativaEmdatetime
ultimoStatusHttpinteger
ultimoErrostring
ultimaRespostastring
ultimaDuracaoMsinteger
criadaEmdatetime
entregueEmdatetime

Status possíveis

  • 200 OK
POST /api/kanban/webhooks/deliveries/{deliveryId}/redeliver Reenfileira uma entrega já concluída ou falha. Autenticado

Reenfileira uma entrega já concluída ou falha.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
deliveryIdrotauuid

Resposta · EntregaWebhookDto

CampoTipoDescrição
iduuid
assinaturaIduuid
eventoIduuid
tipostring
statusstring
tentativasinteger
proximaTentativaEmdatetime
ultimoStatusHttpinteger
ultimoErrostring
ultimaRespostastring
ultimaDuracaoMsinteger
criadaEmdatetime
entregueEmdatetime

Status possíveis

  • 200 OK

Admin da plataforma: política do Kanban por tenant — habilitação, eventos e ações permitidos nas automações e limites. Campos omitidos (nulos) herdam o padrão global Kanban:Politica.

GET /api/admin/kanban/policies Tenants com política personalizada. Admin

Tenants com política personalizada.

Permissão: Exige o papel Admin (ou escopo admin).

Resposta · IReadOnlyList<PoliticaDto>

CampoTipoDescrição
tenantIduuid
habilitadoboolean
eventosPermitidosstring[]
acoesPermitidasstring[]
maximoQuadrosinteger
maximoAutomacoesPorQuadrointeger
maximoWebhooksinteger
maximoAnexoBytesinteger
maximoAnexosPorCartaointeger
intervalosRetrySegundosinteger[]
limiteFalhasParaDesativarinteger
personalizadaboolean
personalizacaoPersonalizacaoPolitica
atualizadaEmdatetime
atualizadoPoruuid

Status possíveis

  • 200 OK
GET /api/admin/kanban/tenants/{tenantId}/policy Política efetiva do tenant (personalização + padrão global). Admin

Política efetiva do tenant (personalização + padrão global).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
tenantIdrotauuid

Resposta · PoliticaDto

CampoTipoDescrição
tenantIduuid
habilitadoboolean
eventosPermitidosstring[]
acoesPermitidasstring[]
maximoQuadrosinteger
maximoAutomacoesPorQuadrointeger
maximoWebhooksinteger
maximoAnexoBytesinteger
maximoAnexosPorCartaointeger
intervalosRetrySegundosinteger[]
limiteFalhasParaDesativarinteger
personalizadaboolean
personalizacaoPersonalizacaoPolitica
atualizadaEmdatetime
atualizadoPoruuid

Status possíveis

  • 200 OK
PUT /api/admin/kanban/tenants/{tenantId}/policy Substitui a personalização do tenant. Vale em até 30 s em todas as réplicas (na hora nesta). Admin

Substitui a personalização do tenant. Vale em até 30 s em todas as réplicas (na hora nesta).

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
tenantIdrotauuid

Corpo (JSON) · PersonalizacaoPolitica

CampoTipoObrigatórioDescrição
habilitadobooleannão
eventosPermitidosstring[]não
acoesPermitidasTipoAcao[]não
maximoQuadrosintegernão
maximoAutomacoesPorQuadrointegernão
maximoWebhooksintegernão
maximoAnexoBytesintegernão
maximoAnexosPorCartaointegernão
intervalosRetrySegundosinteger[]não
limiteFalhasParaDesativarintegernão
observacaostringnão

Resposta · PoliticaDto

CampoTipoDescrição
tenantIduuid
habilitadoboolean
eventosPermitidosstring[]
acoesPermitidasstring[]
maximoQuadrosinteger
maximoAutomacoesPorQuadrointeger
maximoWebhooksinteger
maximoAnexoBytesinteger
maximoAnexosPorCartaointeger
intervalosRetrySegundosinteger[]
limiteFalhasParaDesativarinteger
personalizadaboolean
personalizacaoPersonalizacaoPolitica
atualizadaEmdatetime
atualizadoPoruuid

Status possíveis

  • 200 OK
DELETE /api/admin/kanban/tenants/{tenantId}/policy Remove a personalização: o tenant volta ao padrão global. Admin

Remove a personalização: o tenant volta ao padrão global.

Permissão: Exige o papel Admin (ou escopo admin).

Parâmetros

NomeOndeTipoDescrição
tenantIdrotauuid

Status possíveis

  • 204 Sem conteúdo
Módulo

OpenFinance e Gestão Bancária

Painel bancário consolidado, conciliação de transações, sessões de atendimento e metas financeiras.

O módulo OpenFinance conecta a plataforma a agregadores bancários (Pluggy) para consolidação em tempo real de contas correntes, poupanças e investimentos. Oferece conciliação bancária automática e manual, painel de fluxo de caixa, registro de sessões de suporte com especialistas e acompanhamento de metas financeiras do cliente.

Conceitos

Conta Bancária
Conta agregada via OpenFinance com saldo atualizado, tipo e instituição financeira.
Transação Bancária
Débito ou crédito sincronizado com descrição, categoria, valor e status de conciliação.
Conciliação
Vinculação de uma transação bancária a um lançamento financeiro interno com carimbo do operador.
Sessão de Voz
Atendimento de especialista financeiro com transcrições, resumo e itens de ação gerados por IA.
Meta Financeira
Objetivo financeiro de redução de despesas ou reserva com prazo e valor alvo.

Estados possíveis

Transação
  1. POSTED
  2. PENDING
Status de Conciliação
  1. Não Conciliado
  2. Conciliado
Meta Financeira
  1. in_progress
  2. completed
  3. canceled

Fluxo típico

  1. Gere o link de conexão bancária com GET /api/openfinance/connect-url.
  2. Sincronize as contas e extratos com POST /api/openfinance/sync.
  3. Consulte o painel consolidado com GET /api/openfinance/summary.
  4. Realize a conciliação de transações com POST /api/openfinance/transactions/{id}/conciliate.
  5. Acompanhe metas e sessões de suporte financeiro com /api/openfinance/goals e /sessions.

Exemplo: Conciliar uma transação bancária

Requisição
POST /api/openfinance/transactions/tx-123/conciliate
{ "conciliatedBy": "operador@bpo.com.br" }
Resposta
200 OK
{ "id": "tx-123", "isConciliated": true, "conciliatedAt": "2026-10-15T14:30:00Z", "conciliatedBy": "operador@bpo.com.br" }

Regras importantes

  • Todas as rotas operam sob isolamento multitenant estrito via TenantAwareDbContext.
  • Transações conciliadas registram autor e carimbo de tempo para auditoria contábil.

Referência de endpoints

Módulo de Open Finance, conciliação bancária multiconector (Pluggy) e BPO Financeiro com IA. Permite sincronizar extratos em tempo real, gerenciar contas bancárias, metas e histórico de atendimentos.

GET /api/openfinance/summary Retorna o saldo acumulado e extrato sincronizado de todas as contas no PostgreSQL. Autenticado

Retorna o saldo acumulado e extrato sincronizado de todas as contas no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · OpenFinanceSummaryDto

CampoTipoDescrição
totalBalancedecimal
accountsBankAccountDto[]
recentTransactionsBankTransactionDto[]
connectUrlstring
statusstring
toolkitUrlstring

Status possíveis

  • 200 OK
POST /api/openfinance/sync Executa a sincronização em tempo real das contas e transações via MCP e persiste no PostgreSQL. Autenticado

Executa a sincronização em tempo real das contas e transações via MCP e persiste no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · OpenFinanceSyncResultDto

CampoTipoDescrição
successboolean
statusstring
messagestring
syncedAccountsinteger
syncedTransactionsinteger
bankNamestring
checkoutUrlsIReadOnlyDictionary<string, string>
isBillingNoticeboolean

Status possíveis

  • 200 OK
GET /api/openfinance/accounts Lista as contas bancárias ativas persistidas no PostgreSQL. Autenticado

Lista as contas bancárias ativas persistidas no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · List<BankAccountDto>

CampoTipoDescrição
idstring
accountIdstring
bankNamestring
connectorNamestring
accountTypestring
accountNumberstring
balancedecimal
currencyCodestring
taxNumberstring
updatedAtdatetime

Status possíveis

  • 200 OK
GET /api/openfinance/transactions Lista transações bancárias com paginação e filtro por conta no PostgreSQL. Autenticado

Lista transações bancárias com paginação e filtro por conta no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
accountIdqueryuuidIdentificador da conta bancária para filtragem.
limitqueryintegerQuantidade máxima de transações a retornar (padrão 50).

Resposta · List<BankTransactionDto>

CampoTipoDescrição
idstring
accountIdstring
datestring
descriptionstring
amountdecimal
currencyCodestring
typestring
statusstring
categorystring
operationTypestring
receiverSenderstring
rawJsonstring
isConciliatedboolean
conciliatedAtdatetime
conciliatedBystring

Status possíveis

  • 200 OK
POST /api/openfinance/transactions/{id}/conciliate Marca uma transação bancária como conciliada no PostgreSQL. Autenticado

Marca uma transação bancária como conciliada no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
idrotastringIdentificador interno ou externo da transação.

Corpo (JSON) · ConciliateTransactionRequest

CampoTipoObrigatórioDescrição
conciliatedBystringnão
notesstringnão

Status possíveis

  • 200 OK
  • 404 Não encontrado
GET /api/openfinance/sessions Lista o histórico de chamadas e atendimentos de diagnóstico BPO com IA. Autenticado

Lista o histórico de chamadas e atendimentos de diagnóstico BPO com IA.

Permissão: Exige um token válido (usuário ou tenant).

Parâmetros

NomeOndeTipoDescrição
limitqueryintegerLimite de sessões a retornar (padrão 20).

Resposta · List<CallSessionDto>

CampoTipoDescrição
idstring
callSidstring
callerNamestring
callerPhonestring
statusstring
durationSecondsinteger
summarystring
actionItemsstring
sentimentstring
startedAtdatetime
transcriptionsCallTranscriptionDto[]

Status possíveis

  • 200 OK
POST /api/openfinance/sessions Persiste uma sessão de atendimento de voz e transcrições no PostgreSQL. Autenticado

Persiste uma sessão de atendimento de voz e transcrições no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · SaveCallSessionRequest

CampoTipoObrigatórioDescrição
callSidstringnão
callerNamestringsim
callerPhonestringnão
durationSecondsintegersim
summarystringnão
actionItemsstringnão
sentimentstringnão
transcriptionsCallTranscriptionDto[]não

Status possíveis

  • 201 Criado
GET /api/openfinance/goals Lista as metas financeiras e planejamento orçamentário do cliente no PostgreSQL. Autenticado

Lista as metas financeiras e planejamento orçamentário do cliente no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · List<CallGoalDto>

CampoTipoDescrição
idstring
titlestring
targetAmountdecimal
currentAmountdecimal
deadlinedatetime
statusstring
categorystring

Status possíveis

  • 200 OK
POST /api/openfinance/goals Cria ou atualiza uma meta financeira do cliente no PostgreSQL. Autenticado

Cria ou atualiza uma meta financeira do cliente no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · UpsertGoalRequest

CampoTipoObrigatórioDescrição
idstringnão
titlestringsim
targetAmountdecimalsim
currentAmountdecimalsim
deadlinedatetimenão
statusstringnão
categorystringnão

Resposta · CallGoalDto

CampoTipoDescrição
idstring
titlestring
targetAmountdecimal
currentAmountdecimal
deadlinedatetime
statusstring
categorystring

Status possíveis

  • 200 OK
GET /api/openfinance/missions Lista as missões de rotina financeira e tarefas pendentes no PostgreSQL. Autenticado

Lista as missões de rotina financeira e tarefas pendentes no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · List<CallMissionDto>

CampoTipoDescrição
idstring
titlestring
descriptionstring
statusstring
dueDatedatetime
assignedTostring

Status possíveis

  • 200 OK
POST /api/openfinance/missions Cria ou atualiza uma missão financeira de rotina no PostgreSQL. Autenticado

Cria ou atualiza uma missão financeira de rotina no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · UpsertMissionRequest

CampoTipoObrigatórioDescrição
idstringnão
titlestringsim
descriptionstringnão
statusstringnão
dueDatedatetimenão
assignedTostringnão

Resposta · CallMissionDto

CampoTipoDescrição
idstring
titlestring
descriptionstring
statusstring
dueDatedatetime
assignedTostring

Status possíveis

  • 200 OK
GET /api/openfinance/connect-url Retorna a URL de conexão do widget Pluggy Connect para autenticação de novas contas bancárias. Autenticado

Retorna a URL de conexão do widget Pluggy Connect para autenticação de novas contas bancárias.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · ConnectUrlResponse

CampoTipoDescrição
urlstring
hintstring

Status possíveis

  • 200 OK
GET /api/openfinance/config Obtém a configuração ativa e endpoints do toolkit MCP Open Finance. Autenticado

Obtém a configuração ativa e endpoints do toolkit MCP Open Finance.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · McpConfigDto

CampoTipoDescrição
toolkitUrlstring
connectUrlstring
authTokenstring
statusstring
isConfiguredboolean

Status possíveis

  • 200 OK
POST /api/openfinance/config Atualiza os endpoints e credenciais do MCP Open Finance no PostgreSQL. Autenticado

Atualiza os endpoints e credenciais do MCP Open Finance no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Corpo (JSON) · UpdateMcpConfigRequest

CampoTipoObrigatórioDescrição
toolkitUrlstringnão
connectUrlstringnão
authTokenstringnão

Resposta · McpConfigDto

CampoTipoDescrição
toolkitUrlstring
connectUrlstring
authTokenstring
statusstring
isConfiguredboolean

Status possíveis

  • 200 OK
POST /api/openfinance/test Testa a conectividade com o MCP Toolkit e serviços bancários. Autenticado

Testa a conectividade com o MCP Toolkit e serviços bancários.

Permissão: Exige um token válido (usuário ou tenant).

Resposta · OpenFinanceSyncResultDto

CampoTipoDescrição
successboolean
statusstring
messagestring
syncedAccountsinteger
syncedTransactionsinteger
bankNamestring
checkoutUrlsIReadOnlyDictionary<string, string>
isBillingNoticeboolean

Status possíveis

  • 200 OK
POST /api/openfinance/clear-mock Desativa dados de mock e ativa operação 100% real no PostgreSQL. Autenticado

Desativa dados de mock e ativa operação 100% real no PostgreSQL.

Permissão: Exige um token válido (usuário ou tenant).

Status possíveis

  • 200 OK