openapi: 3.0.3
info:
title: 'BrotasPay — Referência da API'
description: 'API REST do BrotasPay: carteira digital de pagamento com Pix, TED, boleto, cartões, onboarding PF/PJ e integrações.'
version: 1.0.0
servers:
-
url: 'https://api.brotaspay.com.br'
tags:
-
name: 'Admin · 2FA'
description: "\nSetup e gerenciamento de 2FA (TOTP) para admins."
-
name: 'Admin · AML/PLD'
description: "\nAlertas e regras de prevenção à lavagem de dinheiro."
-
name: 'Admin · Audit Log'
description: "\nTrilha de auditoria de ações destrutivas/sensíveis do admin."
-
name: 'Admin · Billing & MRR'
description: "\nKPIs financeiros baseados em `account_plan_assignments` (sombra local que vai\nsendo populada conforme `changeUserPlan` é chamado)."
-
name: 'Admin · Boletos'
description: "\nGestão local de boletos (sombra). Inclui baixa manual e cancelamento com auditoria."
-
name: 'Admin · Exportações'
description: "\nStreaming de CSV para os principais recursos. Não carrega tudo em memória —\nusa cursor() do Laravel."
-
name: 'Admin · Growth & Retenção'
description: "\nMétricas de produto: funil de ativação, churn, coortes e NPS.\nTodos os endpoints exigem autenticação admin (Bearer token)."
-
name: 'Admin · Observabilidade'
description: "\nHealth do sistema: jobs, filas, webhooks recebidos/processados, falhas recentes."
-
name: 'Admin · Offboarding'
description: "\nEncerramentos de conta: visualiza evidências, registra fechamento legal final.\n\nFluxo:\n1) Conta é encerrada operacionalmente (closed_at gravado por AccountController::close)\n2) Time legal/compliance revisa as evidências e marca legally_closed_at"
-
name: 'Admin · Papéis & Permissões'
description: ''
-
name: 'Admin · Reconciliação'
description: "\nHistórico de reconciliações (consulta de webhooks falhados no core e\nreprocesso local) e disparo manual."
-
name: 'Admin · Search'
description: "\nBusca global (Cmd+K) — retorna resultados unificados de users, accounts,\ntransactions e cards."
-
name: 'Admin · Stats'
description: "\nEstatísticas agregadas para o dashboard administrativo."
-
name: Endpoints
description: ''
-
name: 'Portal · NPS'
description: "\nColeta de NPS dentro do app autenticado."
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'Obtenha seu token fazendo login em POST /api/v1/auth/login (portal) ou POST /api/v1/admin/auth/login (admin). Envie o token no header Authorization: Bearer <token>.'
security:
-
default: []
paths:
/api/v1/admin/2fa/status:
get:
summary: 'Status do 2FA do admin atual.'
operationId: statusDo2FADoAdminAtual
description: ''
parameters: []
responses: { }
tags:
- 'Admin · 2FA'
/api/v1/admin/2fa/setup:
post:
summary: 'Gera um novo secret e devolve o otpauth URL para o app autenticador.'
operationId: geraUmNovoSecretEDevolveOOtpauthURLParaOAppAutenticador
description: 'Não persiste como ativo enquanto enable() não validar um código.'
parameters: []
responses: { }
tags:
- 'Admin · 2FA'
/api/v1/admin/2fa/enable:
post:
summary: 'Ativa o 2FA validando um código TOTP gerado pelo app autenticador.'
operationId: ativaO2FAValidandoUmCdigoTOTPGeradoPeloAppAutenticador
description: ''
parameters: []
responses: { }
tags:
- 'Admin · 2FA'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must be 6 characters.'
example: bngzmi
required:
- code
/api/v1/admin/2fa/disable:
post:
summary: 'Desativa o 2FA exigindo senha + código TOTP atual.'
operationId: desativaO2FAExigindoSenha+CdigoTOTPAtual
description: ''
parameters: []
responses: { }
tags:
- 'Admin · 2FA'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
password:
type: string
description: ''
example: '|]|{+-'
code:
type: string
description: 'Must be 6 characters.'
example: vdljni
required:
- password
- code
/api/v1/admin/aml/alerts:
get:
summary: 'Lista paginada de alertas com filtros.'
operationId: listaPaginadaDeAlertasComFiltros
description: ''
parameters: []
responses: { }
tags:
- 'Admin · AML/PLD'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: ''
example: null
severity:
type: string
description: ''
example: null
rule_code:
type: string
description: 'Must not be greater than 60 characters.'
example: b
user_id:
type: integer
description: ''
example: 16
start_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
end_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
'/api/v1/admin/aml/alerts/{id}':
get:
summary: ''
operationId: getApiV1AdminAmlAlertsId
description: ''
parameters: []
responses: { }
tags:
- 'Admin · AML/PLD'
patch:
summary: 'Atualiza status do alerta (revisão pelo admin).'
operationId: atualizaStatusDoAlertarevisoPeloAdmin
description: ''
parameters: []
responses: { }
tags:
- 'Admin · AML/PLD'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: ''
example: architecto
review_notes:
type: string
description: 'Must not be greater than 2000 characters.'
example: 'n'
nullable: true
required:
- status
parameters:
-
in: path
name: id
description: 'The ID of the alert.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/aml/rules:
get:
summary: ''
operationId: getApiV1AdminAmlRules
description: ''
parameters: []
responses: { }
tags:
- 'Admin · AML/PLD'
'/api/v1/admin/aml/rules/{id}':
patch:
summary: ''
operationId: patchApiV1AdminAmlRulesId
description: ''
parameters: []
responses: { }
tags:
- 'Admin · AML/PLD'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
enabled:
type: boolean
description: ''
example: false
severity:
type: string
description: ''
example: null
params:
type: object
description: ''
example: null
properties: { }
parameters:
-
in: path
name: id
description: 'The ID of the rule.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/aml/scan:
post:
summary: 'Dispara um scan manual.'
operationId: disparaUmScanManual
description: ''
parameters: []
responses: { }
tags:
- 'Admin · AML/PLD'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
days:
type: integer
description: 'Must be at least 1. Must not be greater than 365.'
example: 1
/api/v1/admin/audit:
get:
summary: ''
operationId: getApiV1AdminAudit
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Audit Log'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
action:
type: string
description: 'Must not be greater than 60 characters.'
example: b
resource_type:
type: string
description: 'Must not be greater than 60 characters.'
example: 'n'
admin_user_id:
type: integer
description: ''
example: 16
start_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
end_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
q:
type: string
description: 'Must not be greater than 120 characters.'
example: z
/api/v1/admin/audit/actions:
get:
summary: ''
operationId: getApiV1AdminAuditActions
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Audit Log'
/api/v1/admin/billing/overview:
get:
summary: ''
operationId: getApiV1AdminBillingOverview
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Billing & MRR'
/api/v1/admin/billing/timeseries:
get:
summary: ''
operationId: getApiV1AdminBillingTimeseries
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Billing & MRR'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
days:
type: integer
description: 'Must be at least 7. Must not be greater than 365.'
example: 1
/api/v1/admin/billing/assignments:
get:
summary: 'Lista assignments (current + histórico) paginado.'
operationId: listaAssignmentscurrent+HistricoPaginado
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Billing & MRR'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
state:
type: string
description: ''
example: ended
enum:
- active
- ended
- all
plan_id:
type: string
description: 'Must not be greater than 36 characters.'
example: b
page:
type: integer
description: 'Must be at least 1.'
example: 22
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 7
/api/v1/admin/boletos:
get:
summary: ''
operationId: getApiV1AdminBoletos
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Boletos'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
account_number:
type: string
description: 'Must not be greater than 30 characters.'
example: b
status:
type: string
description: ''
example: null
type:
type: string
description: 'Must not be greater than 30 characters.'
example: 'n'
start_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
end_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
q:
type: string
description: 'Must not be greater than 120 characters.'
example: g
page:
type: integer
description: 'Must be at least 1.'
example: 66
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 17
'/api/v1/admin/boletos/{id}':
get:
summary: ''
operationId: getApiV1AdminBoletosId
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Boletos'
parameters:
-
in: path
name: id
description: 'The ID of the boleto.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/boletos/{id}/status':
patch:
summary: ''
operationId: patchApiV1AdminBoletosIdStatus
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Boletos'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: ''
example: architecto
reason:
type: string
description: 'Must not be greater than 500 characters.'
example: 'n'
required:
- status
- reason
parameters:
-
in: path
name: id
description: 'The ID of the boleto.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/export/manifest:
get:
summary: ''
operationId: getApiV1AdminExportManifest
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Exportações'
'/api/v1/admin/export/{resource}':
get:
summary: ''
operationId: getApiV1AdminExportResource
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Exportações'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
end_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
limit:
type: integer
description: 'Must be at least 1. Must not be greater than 100000.'
example: 1
parameters:
-
in: path
name: resource
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/admin/growth/overview:
get:
summary: 'Visão consolidada'
operationId: visoConsolidada
description: "Atalho que retorna funil + churn + NPS + coortes na mesma chamada\npara alimentar um dashboard único."
parameters: []
responses: { }
tags:
- 'Admin · Growth & Retenção'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
end_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.'
example: '2052-07-20'
survey_tag:
type: string
description: 'Must not be greater than 60 characters.'
example: 'n'
inactivity_days:
type: integer
description: 'Must be at least 7. Must not be greater than 180.'
example: 7
window_days:
type: integer
description: 'Must be at least 14. Must not be greater than 365.'
example: 16
months_back:
type: integer
description: 'Must be at least 1. Must not be greater than 24.'
example: 21
/api/v1/admin/growth/funnel:
get:
summary: 'Funil de ativação'
operationId: funilDeAtivao
description: "Retorna a contagem de usuários em cada etapa do funil\n(cadastro → KYC → conta ativa → primeiro depósito → primeira transação enviada)."
parameters:
-
in: query
name: start_date
description: 'date Data inicial (Y-m-d). Default: 30 dias atrás.'
example: architecto
required: false
schema:
type: string
description: 'date Data inicial (Y-m-d). Default: 30 dias atrás.'
example: architecto
-
in: query
name: end_date
description: 'date Data final (Y-m-d). Default: hoje.'
example: architecto
required: false
schema:
type: string
description: 'date Data final (Y-m-d). Default: hoje.'
example: architecto
responses: { }
tags:
- 'Admin · Growth & Retenção'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
end_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.'
example: '2052-07-20'
survey_tag:
type: string
description: 'Must not be greater than 60 characters.'
example: 'n'
inactivity_days:
type: integer
description: 'Must be at least 7. Must not be greater than 180.'
example: 7
window_days:
type: integer
description: 'Must be at least 14. Must not be greater than 365.'
example: 16
months_back:
type: integer
description: 'Must be at least 1. Must not be greater than 24.'
example: 21
/api/v1/admin/growth/churn:
get:
summary: 'Churn e retenção'
operationId: churnEReteno
description: "Compara usuários ativos (com transação) na janela atual vs. janela anterior\npara identificar perda e retenção de base ativa."
parameters:
-
in: query
name: inactivity_days
description: 'Dias de inatividade que definem churn. Default: 30.'
example: 16
required: false
schema:
type: integer
description: 'Dias de inatividade que definem churn. Default: 30.'
example: 16
-
in: query
name: window_days
description: 'Tamanho da janela de comparação. Default: 90.'
example: 16
required: false
schema:
type: integer
description: 'Tamanho da janela de comparação. Default: 90.'
example: 16
responses: { }
tags:
- 'Admin · Growth & Retenção'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
end_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.'
example: '2052-07-20'
survey_tag:
type: string
description: 'Must not be greater than 60 characters.'
example: 'n'
inactivity_days:
type: integer
description: 'Must be at least 7. Must not be greater than 180.'
example: 7
window_days:
type: integer
description: 'Must be at least 14. Must not be greater than 365.'
example: 16
months_back:
type: integer
description: 'Must be at least 1. Must not be greater than 24.'
example: 21
/api/v1/admin/growth/cohorts:
get:
summary: 'Coortes de retenção semanal'
operationId: coortesDeRetenoSemanal
description: "Agrupa usuários pelo mês de cadastro e mostra a retenção semana a semana\n(% que voltou a transacionar em cada uma das 8 semanas seguintes)."
parameters:
-
in: query
name: months_back
description: 'Quantos meses retroceder. Default: 6.'
example: 16
required: false
schema:
type: integer
description: 'Quantos meses retroceder. Default: 6.'
example: 16
responses: { }
tags:
- 'Admin · Growth & Retenção'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
end_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.'
example: '2052-07-20'
survey_tag:
type: string
description: 'Must not be greater than 60 characters.'
example: 'n'
inactivity_days:
type: integer
description: 'Must be at least 7. Must not be greater than 180.'
example: 7
window_days:
type: integer
description: 'Must be at least 14. Must not be greater than 365.'
example: 16
months_back:
type: integer
description: 'Must be at least 1. Must not be greater than 24.'
example: 21
/api/v1/admin/growth/nps:
get:
summary: 'NPS — Net Promoter Score'
operationId: nPSNetPromoterScore
description: 'Score = %promotores (9-10) − %detratores (0-6). Lista também os 10 comentários mais recentes.'
parameters:
-
in: query
name: start_date
description: 'date Y-m-d.'
example: architecto
required: false
schema:
type: string
description: 'date Y-m-d.'
example: architecto
-
in: query
name: end_date
description: 'date Y-m-d.'
example: architecto
required: false
schema:
type: string
description: 'date Y-m-d.'
example: architecto
-
in: query
name: survey_tag
description: 'Filtra por tag da pesquisa (ex: post_onboarding).'
example: architecto
required: false
schema:
type: string
description: 'Filtra por tag da pesquisa (ex: post_onboarding).'
example: architecto
responses: { }
tags:
- 'Admin · Growth & Retenção'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
end_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.'
example: '2052-07-20'
survey_tag:
type: string
description: 'Must not be greater than 60 characters.'
example: 'n'
inactivity_days:
type: integer
description: 'Must be at least 7. Must not be greater than 180.'
example: 7
window_days:
type: integer
description: 'Must be at least 14. Must not be greater than 365.'
example: 16
months_back:
type: integer
description: 'Must be at least 1. Must not be greater than 24.'
example: 21
/api/v1/admin/growth/nps/responses:
get:
summary: 'Lista de respostas NPS'
operationId: listaDeRespostasNPS
description: 'Lista paginada de respostas NPS individuais para análise qualitativa.'
parameters: []
responses: { }
tags:
- 'Admin · Growth & Retenção'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
end_date:
type: string
description: 'Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.'
example: '2052-07-20'
survey_tag:
type: string
description: 'Must not be greater than 60 characters.'
example: 'n'
inactivity_days:
type: integer
description: 'Must be at least 7. Must not be greater than 180.'
example: 7
window_days:
type: integer
description: 'Must be at least 14. Must not be greater than 365.'
example: 16
months_back:
type: integer
description: 'Must be at least 1. Must not be greater than 24.'
example: 21
/api/v1/admin/observability/overview:
get:
summary: ''
operationId: getApiV1AdminObservabilityOverview
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Observabilidade'
/api/v1/admin/observability/jobs/failed:
get:
summary: ''
operationId: getApiV1AdminObservabilityJobsFailed
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Observabilidade'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
queue:
type: string
description: 'Must not be greater than 60 characters.'
example: b
page:
type: integer
description: 'Must be at least 1.'
example: 22
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 7
/api/v1/admin/observability/jobs/failed/retry-all:
post:
summary: ''
operationId: postApiV1AdminObservabilityJobsFailedRetryAll
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Observabilidade'
'/api/v1/admin/observability/jobs/failed/{uuid}/retry':
post:
summary: ''
operationId: postApiV1AdminObservabilityJobsFailedUuidRetry
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Observabilidade'
parameters:
-
in: path
name: uuid
description: ''
example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed
required: true
schema:
type: string
'/api/v1/admin/observability/jobs/failed/{uuid}':
delete:
summary: ''
operationId: deleteApiV1AdminObservabilityJobsFailedUuid
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Observabilidade'
parameters:
-
in: path
name: uuid
description: ''
example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed
required: true
schema:
type: string
/api/v1/admin/observability/webhooks/timeseries:
get:
summary: 'Série temporal diária (N dias) de webhooks: received vs forwarded vs failed deliveries.'
operationId: srieTemporalDiriaNDiasDeWebhooksReceivedVsForwardedVsFailedDeliveries
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Observabilidade'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
days:
type: integer
description: 'Must be at least 1. Must not be greater than 90.'
example: 1
/api/v1/admin/offboarding:
get:
summary: ''
operationId: getApiV1AdminOffboarding
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Offboarding'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
state:
type: string
description: ''
example: all
enum:
- pending_legal
- fully_closed
- all
q:
type: string
description: 'Must not be greater than 120 characters.'
example: b
start_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
end_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:23'
page:
type: integer
description: 'Must be at least 1.'
example: 22
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 7
'/api/v1/admin/offboarding/{id}':
get:
summary: ''
operationId: getApiV1AdminOffboardingId
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Offboarding'
parameters:
-
in: path
name: id
description: 'The ID of the offboarding.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/offboarding/{id}/close-legally':
post:
summary: ''
operationId: postApiV1AdminOffboardingIdCloseLegally
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Offboarding'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
legal_notes:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
nullable: true
force:
type: boolean
description: ''
example: true
parameters:
-
in: path
name: id
description: 'The ID of the offboarding.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/offboarding/{id}/notes':
post:
summary: ''
operationId: postApiV1AdminOffboardingIdNotes
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Offboarding'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
note:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
required:
- note
parameters:
-
in: path
name: id
description: 'The ID of the offboarding.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/roles:
get:
summary: ''
operationId: getApiV1AdminRoles
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Papéis & Permissões'
post:
summary: ''
operationId: postApiV1AdminRoles
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Papéis & Permissões'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must match the regex /^[a-z0-9_]+$/. Must not be greater than 60 characters.'
example: b
name:
type: string
description: 'Must not be greater than 120 characters.'
example: 'n'
description:
type: string
description: 'Must not be greater than 500 characters.'
example: 'Animi quos velit et fugiat.'
nullable: true
permissions:
type: array
description: ''
example: null
items:
type: string
required:
- code
- name
'/api/v1/admin/roles/{id}':
patch:
summary: ''
operationId: patchApiV1AdminRolesId
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Papéis & Permissões'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 120 characters.'
example: b
description:
type: string
description: 'Must not be greater than 500 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
permissions:
type: array
description: ''
example: null
items:
type: string
delete:
summary: ''
operationId: deleteApiV1AdminRolesId
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Papéis & Permissões'
parameters:
-
in: path
name: id
description: 'The ID of the role.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/users/{userId}/roles':
put:
summary: 'Sincroniza papéis de um admin (substitui o set).'
operationId: sincronizaPapisDeUmAdminsubstituiOSet
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Papéis & Permissões'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
role_ids:
type: array
description: 'The id of an existing record in the admin_roles table.'
example:
- 16
items:
type: integer
parameters:
-
in: path
name: userId
description: ''
example: 1
required: true
schema:
type: integer
/api/v1/admin/reconcile:
get:
summary: ''
operationId: getApiV1AdminReconcile
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Reconciliação'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: ''
example: running
enum:
- running
- success
- failed
- partial
page:
type: integer
description: 'Must be at least 1.'
example: 16
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
'/api/v1/admin/reconcile/{id}':
get:
summary: ''
operationId: getApiV1AdminReconcileId
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Reconciliação'
parameters:
-
in: path
name: id
description: 'The ID of the reconcile.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/reconcile/run:
post:
summary: 'Dispara `php artisan webhooks:reconcile --days=N [--dry-run]`.'
operationId: disparaphpArtisanWebhooksreconcileDaysNDryRun
description: 'Síncrono — fica rodando até terminar.'
parameters: []
responses: { }
tags:
- 'Admin · Reconciliação'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
days:
type: integer
description: 'Must be at least 1. Must not be greater than 90.'
example: 1
dry_run:
type: boolean
description: ''
example: false
/api/v1/admin/search:
get:
summary: ''
operationId: getApiV1AdminSearch
description: ''
parameters: []
responses: { }
tags:
- 'Admin · Search'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: 'Must be at least 2 characters. Must not be greater than 120 characters.'
example: b
required:
- q
/api/v1/admin/stats/timeseries:
get:
summary: 'Série temporal diária (transações + cadastros) nos últimos N dias.'
operationId: srieTemporalDiriatransaes+CadastrosNosltimosNDias
description: ''
parameters:
-
in: query
name: days
description: 'Janela em dias (1-365). Default: 30.'
example: 16
required: false
schema:
type: integer
description: 'Janela em dias (1-365). Default: 30.'
example: 16
responses: { }
tags:
- 'Admin · Stats'
/api/v1/admin/stats/distribution:
get:
summary: 'Distribuições por categoria.'
operationId: distribuiesPorCategoria
description: "Retorna contagens agregadas para uso em gráficos de barra/pizza:\n- Transações por event_name (top 10)\n- Contas por status\n- Usuários por type_account"
parameters: []
responses: { }
tags:
- 'Admin · Stats'
/api/v1/user:
get:
summary: ''
operationId: getApiV1User
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/auth/register:
post:
summary: ''
operationId: postApiV1AuthRegister
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 120 characters.'
example: b
email:
type: string
description: 'Must be a valid email address.'
example: zbailey@example.net
document:
type: string
description: 'Must be at least 11 characters. Must not be greater than 18 characters.'
example: iyvdljnikhwaykcm
phone:
type: string
description: 'Must not be greater than 20 characters.'
example: yuwpwlvqwrsitcps
nullable: true
password:
type: string
description: 'Must be at least 8 characters.'
example: "a:x&S$hSn7L'"
commercial_name:
type: string
description: 'Dados da subconta (opcionais; se completos, provisiona já). Must not be greater than 120 characters.'
example: v
nullable: true
responsible_name:
type: string
description: 'Must not be greater than 120 characters.'
example: l
nullable: true
responsible_document:
type: string
description: 'Must be at least 11 characters. Must not be greater than 14 characters.'
example: xjklqppwqbewtn
nullable: true
responsible_birth_date:
type: string
description: 'Must be a valid date in the format d/m/Y.'
example: 27/06/2026
nullable: true
responsible_phone:
type: string
description: 'Must not be greater than 20 characters.'
example: noqitpxntltcvipo
nullable: true
bank:
type: object
description: ''
example: null
properties:
code:
type: string
description: 'This field is required when bank is present. Must not be greater than 5 characters.'
example: j
account_type:
type: string
description: 'This field is required when bank is present.'
example: PP
enum:
- CC
- PP
agency:
type: string
description: 'This field is required when bank is present. Must not be greater than 10 characters.'
example: sausgi
agency_digit:
type: string
description: 'Must not be greater than 2 characters.'
example: og
nullable: true
account:
type: string
description: 'This field is required when bank is present. Must not be greater than 20 characters.'
example: lrbchgsrzyhcttwb
account_digit:
type: string
description: 'Must not be greater than 2 characters.'
example: km
nullable: true
nullable: true
address:
type: object
description: ''
example: null
properties:
zip_code:
type: string
description: 'This field is required when address is present. Must not be greater than 9 characters.'
example: kftmgos
street:
type: string
description: 'This field is required when address is present. Must not be greater than 120 characters.'
example: g
number:
type: string
description: 'Must not be greater than 20 characters.'
example: tvnbobmzezcrcval
nullable: true
district:
type: string
description: 'This field is required when address is present. Must not be greater than 80 characters.'
example: e
city:
type: string
description: 'This field is required when address is present. Must not be greater than 80 characters.'
example: x
state:
type: string
description: 'This field is required when address is present. Must be 2 characters.'
example: qz
nullable: true
required:
- name
- email
- document
- password
/api/v1/auth/local-login:
post:
summary: ''
operationId: postApiV1AuthLocalLogin
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
login:
type: string
description: ''
example: architecto
password:
type: string
description: ''
example: '|]|{+-'
required:
- login
- password
/api/v1/auth/login:
post:
summary: ''
operationId: postApiV1AuthLogin
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
document:
type: string
description: ''
example: architecto
password:
type: string
description: ''
example: '|]|{+-'
account_number:
type: string
description: ''
example: architecto
nullable: true
required:
- document
- password
/api/v1/auth/verify-2fa:
post:
summary: ''
operationId: postApiV1AuthVerify2fa
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
two_factor_token:
type: string
description: ''
example: architecto
code:
type: string
description: 'Must be 6 characters.'
example: ngzmiy
required:
- two_factor_token
- code
/api/v1/auth/forgot-password:
post:
summary: ''
operationId: postApiV1AuthForgotPassword
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
cpf:
type: string
description: ''
example: architecto
login:
type: string
description: ''
example: architecto
/api/v1/auth/reset-password:
post:
summary: ''
operationId: postApiV1AuthResetPassword
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
cpf:
type: string
description: ''
example: architecto
login:
type: string
description: ''
example: architecto
token:
type: string
description: ''
example: architecto
new_password:
type: string
description: 'Must be at least 8 characters.'
example: ngzmiyvdljnikhwaykcmyuwpwl
required:
- token
- new_password
/api/v1/auth/logout:
post:
summary: ''
operationId: postApiV1AuthLogout
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/auth/2fa/enable:
post:
summary: ''
operationId: postApiV1Auth2faEnable
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: gbailey@example.net
password:
type: string
description: ''
example: '|]|{+-'
required:
- email
- password
/api/v1/auth/2fa/confirm:
post:
summary: ''
operationId: postApiV1Auth2faConfirm
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
verification_token:
type: string
description: ''
example: architecto
code:
type: string
description: 'Must be 6 characters.'
example: ngzmiy
required:
- verification_token
- code
/api/v1/auth/2fa/disable:
post:
summary: ''
operationId: postApiV1Auth2faDisable
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
password:
type: string
description: ''
example: '|]|{+-'
required:
- password
/api/v1/auth/2fa/status:
get:
summary: ''
operationId: getApiV1Auth2faStatus
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/auth/login-history:
get:
summary: ''
operationId: getApiV1AuthLoginHistory
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/portal/safe2pay/me:
get:
summary: 'Status da conta de recebimento + dados bancários.'
operationId: statusDaContaDeRecebimento+DadosBancrios
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/portal/safe2pay/balance:
get:
summary: 'Saldo da carteira da subconta (disponível/em trânsito).'
operationId: saldoDaCarteiraDaSubcontadisponvelemTrnsito
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/portal/safe2pay/statement:
get:
summary: 'Extrato/repasses da subconta.'
operationId: extratorepassesDaSubconta
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/portal/safe2pay/charges/pix:
post:
summary: 'Cria uma cobrança PIX (recebimento) na subconta do cliente.'
operationId: criaUmaCobranaPIXrecebimentoNaSubcontaDoCliente
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount:
type: number
description: 'Must be at least 0.01.'
example: 27
description:
type: string
description: 'Must not be greater than 140 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
reference:
type: string
description: 'Must not be greater than 140 characters.'
example: d
nullable: true
expiration:
type: integer
description: 'Must be at least 60.'
example: 89
nullable: true
customer:
type: object
description: ''
example: []
properties:
name:
type: string
description: 'Must not be greater than 120 characters.'
example: j
document:
type: string
description: 'Must be at least 11 characters. Must not be greater than 18 characters.'
example: nikhwaykcmyuwpwl
email:
type: string
description: 'Must be a valid email address.'
example: wleuschke@example.net
nullable: true
required:
- name
- document
required:
- amount
/api/v1/portal/safe2pay/charges/boleto:
post:
summary: 'Cria um boleto na subconta do cliente.'
operationId: criaUmBoletoNaSubcontaDoCliente
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount:
type: number
description: 'Must be at least 0.01.'
example: 27
due_date:
type: string
description: 'Must be a valid date in the format d/m/Y.'
example: 27/06/2026
description:
type: string
description: 'Must not be greater than 140 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
reference:
type: string
description: 'Must not be greater than 140 characters.'
example: d
nullable: true
customer:
type: object
description: ''
example: []
properties:
name:
type: string
description: 'Must not be greater than 120 characters.'
example: l
document:
type: string
description: 'Must be at least 11 characters. Must not be greater than 18 characters.'
example: jnikhwaykcmyuwpw
email:
type: string
description: 'Must be a valid email address.'
example: emelie.baumbach@example.net
nullable: true
address:
type: object
description: ''
example: null
properties: { }
nullable: true
required:
- name
- document
required:
- amount
- due_date
/api/v1/pix/qrcode/static:
post:
summary: ''
operationId: postApiV1PixQrcodeStatic
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount:
type: number
description: 'Must be at least 0.'
example: 27
conciliation_id:
type: string
description: 'Must not be greater than 25 characters.'
example: 'n'
recipient_name:
type: string
description: ''
example: architecto
nullable: true
addressing_key:
type: object
description: ''
example: []
properties:
type:
type: string
description: ''
example: architecto
value:
type: string
description: ''
example: architecto
required:
- type
- value
location:
type: object
description: ''
example: []
properties:
city:
type: string
description: ''
example: architecto
zip_code:
type: string
description: ''
example: architecto
required:
- city
- zip_code
required:
- amount
- conciliation_id
/api/v1/pix/qrcode/dynamic:
post:
summary: ''
operationId: postApiV1PixQrcodeDynamic
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
addressing_key:
type: object
description: ''
example: []
properties:
type:
type: string
description: ''
example: architecto
value:
type: string
description: ''
example: architecto
required:
- type
- value
conciliation_id:
type: string
description: 'Must be at least 26 characters. Must not be greater than 35 characters.'
example: 'n'
single_payment:
type: boolean
description: ''
example: true
amount:
type: number
description: 'Must be at least 0.01.'
example: 84
change_amount_type:
type: string
description: ''
example: NOT_ALLOWED
enum:
- ALLOWED
- NOT_ALLOWED
recipient_name:
type: string
description: ''
example: architecto
nullable: true
expires_at:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:22'
nullable: true
payer:
type: object
description: ''
example: []
properties:
name:
type: string
description: ''
example: architecto
document_number:
type: string
description: ''
example: architecto
type:
type: string
description: ''
example: CUSTOMER
enum:
- CUSTOMER
- BUSINESS
address:
type: object
description: ''
example: []
properties:
city:
type: string
description: ''
example: architecto
state:
type: string
description: ''
example: architecto
zip_code:
type: string
description: ''
example: architecto
address_line:
type: string
description: ''
example: architecto
neighborhood:
type: string
description: ''
example: architecto
required:
- city
- state
- zip_code
- address_line
- neighborhood
required:
- name
- document_number
- type
required:
- conciliation_id
- single_payment
- amount
- change_amount_type
/api/v1/plan:
get:
summary: ''
operationId: getApiV1Plan
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/notifications:
get:
summary: ''
operationId: getApiV1Notifications
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/notifications/unread-count:
get:
summary: ''
operationId: getApiV1NotificationsUnreadCount
description: ''
parameters: []
responses: { }
tags:
- Endpoints
'/api/v1/notifications/{id}/read':
patch:
summary: ''
operationId: patchApiV1NotificationsIdRead
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: id
description: 'The ID of the notification.'
example: architecto
required: true
schema:
type: string
/api/v1/notifications/read-all:
post:
summary: ''
operationId: postApiV1NotificationsReadAll
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/referral:
get:
summary: "Retorna o código de indicação do usuário atual (gera se ainda não tem)\n+ estatísticas (total convidados, convertidos)."
operationId: retornaOCdigoDeIndicaoDoUsurioAtualgeraSeAindaNoTem+EstatsticastotalConvidadosConvertidos
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/referral/apply:
post:
summary: 'Aplica um código de indicação ao usuário atual.'
operationId: aplicaUmCdigoDeIndicaoAoUsurioAtual
description: 'Só funciona se ainda não foi indicado e o código não é o dele mesmo.'
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 16 characters.'
example: bngzmiyvdljnikhw
required:
- code
/api/v1/integration:
get:
summary: ''
operationId: getApiV1Integration
description: ''
parameters: []
responses: { }
tags:
- Endpoints
patch:
summary: ''
operationId: patchApiV1Integration
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
webhook_url:
type: string
description: 'Must be a valid URL. Must not be greater than 500 characters.'
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
required:
- webhook_url
delete:
summary: ''
operationId: deleteApiV1Integration
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/integration/activate:
post:
summary: ''
operationId: postApiV1IntegrationActivate
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
password:
type: string
description: ''
example: '|]|{+-'
required:
- password
/api/v1/integration/password:
patch:
summary: ''
operationId: patchApiV1IntegrationPassword
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
password:
type: string
description: ''
example: '|]|{+-'
required:
- password
/api/v1/integration/rotate-key:
post:
summary: ''
operationId: postApiV1IntegrationRotateKey
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/integration/webhooks:
get:
summary: ''
operationId: getApiV1IntegrationWebhooks
description: ''
parameters: []
responses: { }
tags:
- Endpoints
'/api/v1/integration/webhooks/{id}/retry':
post:
summary: ''
operationId: postApiV1IntegrationWebhooksIdRetry
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: id
description: 'The ID of the webhook.'
example: architecto
required: true
schema:
type: string
/api/v1/payments/card:
post:
summary: ''
operationId: postApiV1PaymentsCard
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount:
type: number
description: 'Must be at least 0.01.'
example: 27
reference:
type: string
description: 'Must not be greater than 200 characters.'
example: 'n'
description:
type: string
description: 'Must not be greater than 200 characters.'
example: 'Animi quos velit et fugiat.'
nullable: true
installments:
type: integer
description: 'Must be at least 1. Must not be greater than 12.'
example: 8
nullable: true
card_token:
type: string
description: 'cartão cru OU token do cofre. This field is required when card.number is not present.'
example: architecto
nullable: true
card:
type: object
description: ''
example: []
properties:
holder:
type: string
description: 'This field is required when card_token is not present.'
example: architecto
nullable: true
number:
type: string
description: 'This field is required when card_token is not present.'
example: architecto
nullable: true
expiration:
type: string
description: 'This field is required when card_token is not present.'
example: architecto
nullable: true
cvv:
type: string
description: MM/AAAA.
example: architecto
nullable: true
customer:
type: object
description: ''
example: []
properties:
name:
type: string
description: cliente.
example: architecto
document:
type: string
description: ''
example: architecto
email:
type: string
description: 'Must be a valid email address.'
example: zbailey@example.net
nullable: true
phone:
type: string
description: ''
example: architecto
nullable: true
address:
type: object
description: ''
example: null
properties: { }
nullable: true
required:
- name
- document
required:
- amount
- reference
/api/v1/payments/card/tokenize:
post:
summary: ''
operationId: postApiV1PaymentsCardTokenize
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
card:
type: object
description: ''
example: []
properties:
holder:
type: string
description: ''
example: architecto
number:
type: string
description: ''
example: architecto
expiration:
type: string
description: ''
example: architecto
cvv:
type: string
description: ''
example: architecto
nullable: true
required:
- holder
- number
- expiration
/api/v1/banks:
get:
summary: ''
operationId: getApiV1Banks
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
product:
type: string
description: ''
example: accountPortability
enum:
- TED
- PIX
- accountPortability
nullable: true
/api/v1/boletos:
post:
summary: ''
operationId: postApiV1Boletos
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
alias:
type: string
description: 'Must not be greater than 255 characters.'
example: b
nullable: true
account_number:
type: string
description: ''
example: architecto
account_branch:
type: string
description: ''
example: architecto
document_number:
type: string
description: 'Must be at least 11 characters. Must not be greater than 14 characters.'
example: ngzmiyvdljnikh
amount:
type: number
description: 'Must be at least 0.01.'
example: 87
due_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
close_payment:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
type:
type: string
description: ''
example: Deposit
enum:
- Levy
- Deposit
payer:
type: object
description: ''
example: []
properties:
document:
type: string
description: 'This field is required when type is Levy. Must be at least 11 characters. Must not be greater than 14 characters.'
example: aykcmyuwpwlvqw
nullable: true
name:
type: string
description: 'This field is required when type is Levy. Must not be greater than 100 characters.'
example: r
nullable: true
trade_name:
type: string
description: 'Must not be greater than 100 characters.'
example: s
nullable: true
address:
type: object
description: ''
example: []
properties:
zip_code:
type: string
description: 'This field is required when type is Levy. Must be 8 characters.'
example: itcpscql
nullable: true
address_line:
type: string
description: 'This field is required when type is Levy. Must not be greater than 60 characters.'
example: d
nullable: true
number:
type: string
description: 'Must not be greater than 20 characters.'
example: zsnrwtujwvlxjklq
nullable: true
neighborhood:
type: string
description: 'This field is required when type is Levy. Must not be greater than 40 characters.'
example: p
nullable: true
city:
type: string
description: 'This field is required when type is Levy. Must not be greater than 40 characters.'
example: p
nullable: true
state:
type: string
description: 'This field is required when type is Levy. Must be 2 characters.'
example: wq
nullable: true
interest:
type: object
description: ''
example: []
properties:
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
value:
type: number
description: 'Must not be greater than 100.'
example: 4
nullable: true
type:
type: string
description: ''
example: FixedAmount
enum:
- FixedAmount
- Percent
nullable: true
fine:
type: object
description: ''
example: []
properties:
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
value:
type: number
description: 'Must not be greater than 100.'
example: 25
nullable: true
type:
type: string
description: ''
example: FixedAmount
enum:
- FixedAmount
- Percent
nullable: true
discount:
type: object
description: ''
example: []
properties:
limit_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
value:
type: number
description: 'Must not be greater than 100.'
example: 9
nullable: true
type:
type: string
description: ''
example: FixedPercentUntilLimitDate
enum:
- FixedAmountUntilLimitDate
- FixedPercentUntilLimitDate
nullable: true
required:
- account_number
- account_branch
- document_number
- amount
- due_date
- close_payment
- type
get:
summary: ''
operationId: getApiV1Boletos
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
end_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
page:
type: integer
description: 'Must be at least 1.'
example: 16
nullable: true
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
nullable: true
order_column:
type: string
description: ''
example: createdAt
enum:
- createdAt
- status
nullable: true
order_direction:
type: string
description: ''
example: ASC
enum:
- ASC
- DESC
nullable: true
payer_name:
type: string
description: 'Must not be greater than 255 characters.'
example: g
nullable: true
delete:
summary: ''
operationId: deleteApiV1Boletos
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
authentication_code:
type: string
description: ''
example: architecto
account_number:
type: string
description: ''
example: architecto
account_branch:
type: string
description: ''
example: architecto
required:
- authentication_code
- account_number
- account_branch
'/api/v1/boletos/{authCode}':
get:
summary: ''
operationId: getApiV1BoletosAuthCode
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
account_branch:
type: string
description: ''
example: architecto
account_number:
type: string
description: ''
example: architecto
required:
- account_branch
- account_number
parameters:
-
in: path
name: authCode
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/boletos/{authCode}/print':
get:
summary: ''
operationId: getApiV1BoletosAuthCodePrint
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
account_branch:
type: string
description: ''
example: architecto
account_number:
type: string
description: ''
example: architecto
required:
- account_branch
- account_number
parameters:
-
in: path
name: authCode
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/webhooks/safe2pay/{integration}/{sig}':
post:
summary: ''
operationId: postApiV1WebhooksSafe2payIntegrationSig
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: integration
description: ''
example: '564'
required: true
schema:
type: string
-
in: path
name: sig
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/external/me:
get:
summary: ''
operationId: getApiV1ExternalMe
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/external/plan:
get:
summary: ''
operationId: getApiV1ExternalPlan
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/external/safe2pay/me:
get:
summary: 'Status da subconta + dados bancários do recebedor.'
operationId: statusDaSubconta+DadosBancriosDoRecebedor
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/external/safe2pay/balance:
get:
summary: 'Saldo da carteira da subconta (disponível/em trânsito/previsto).'
operationId: saldoDaCarteiraDaSubcontadisponvelemTrnsitoprevisto
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/external/safe2pay/statement:
get:
summary: 'Extrato/repasses da subconta (mês/ano opcionais).'
operationId: extratorepassesDaSubcontamsanoOpcionais
description: ''
parameters: []
responses: { }
tags:
- Endpoints
'/api/v1/external/safe2pay/transactions/{id}':
get:
summary: 'Consulta uma transação por id (conciliação/sync).'
operationId: consultaUmaTransaoPorIdconciliaosync
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: id
description: 'The ID of the transaction.'
example: architecto
required: true
schema:
type: string
'/api/v1/external/safe2pay/by-reference/{reference}':
get:
summary: 'Consulta uma transação pelo Reference (conciliation_id do consumidor).'
operationId: consultaUmaTransaoPeloReferenceconciliationIdDoConsumidor
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: reference
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/external/pix/qrcode/static:
post:
summary: ''
operationId: postApiV1ExternalPixQrcodeStatic
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount:
type: number
description: 'Must be at least 0.'
example: 27
conciliation_id:
type: string
description: 'Must not be greater than 25 characters.'
example: 'n'
recipient_name:
type: string
description: ''
example: architecto
nullable: true
addressing_key:
type: object
description: ''
example: []
properties:
type:
type: string
description: ''
example: architecto
value:
type: string
description: ''
example: architecto
required:
- type
- value
location:
type: object
description: ''
example: []
properties:
city:
type: string
description: ''
example: architecto
zip_code:
type: string
description: ''
example: architecto
required:
- city
- zip_code
required:
- amount
- conciliation_id
/api/v1/external/pix/qrcode/dynamic:
post:
summary: ''
operationId: postApiV1ExternalPixQrcodeDynamic
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
addressing_key:
type: object
description: ''
example: []
properties:
type:
type: string
description: ''
example: architecto
value:
type: string
description: ''
example: architecto
required:
- type
- value
conciliation_id:
type: string
description: 'Must be at least 26 characters. Must not be greater than 35 characters.'
example: 'n'
single_payment:
type: boolean
description: ''
example: false
amount:
type: number
description: 'Must be at least 0.01.'
example: 84
change_amount_type:
type: string
description: ''
example: ALLOWED
enum:
- ALLOWED
- NOT_ALLOWED
recipient_name:
type: string
description: ''
example: architecto
nullable: true
expires_at:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:22'
nullable: true
payer:
type: object
description: ''
example: []
properties:
name:
type: string
description: ''
example: architecto
document_number:
type: string
description: ''
example: architecto
type:
type: string
description: ''
example: CUSTOMER
enum:
- CUSTOMER
- BUSINESS
address:
type: object
description: ''
example: []
properties:
city:
type: string
description: ''
example: architecto
state:
type: string
description: ''
example: architecto
zip_code:
type: string
description: ''
example: architecto
address_line:
type: string
description: ''
example: architecto
neighborhood:
type: string
description: ''
example: architecto
required:
- city
- state
- zip_code
- address_line
- neighborhood
required:
- name
- document_number
- type
required:
- conciliation_id
- single_payment
- amount
- change_amount_type
/api/v1/external/banks:
get:
summary: ''
operationId: getApiV1ExternalBanks
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
product:
type: string
description: ''
example: TED
enum:
- TED
- PIX
- accountPortability
nullable: true
/api/v1/external/boletos:
post:
summary: ''
operationId: postApiV1ExternalBoletos
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
alias:
type: string
description: 'Must not be greater than 255 characters.'
example: b
nullable: true
account_number:
type: string
description: ''
example: architecto
account_branch:
type: string
description: ''
example: architecto
document_number:
type: string
description: 'Must be at least 11 characters. Must not be greater than 14 characters.'
example: ngzmiyvdljnikh
amount:
type: number
description: 'Must be at least 0.01.'
example: 87
due_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
close_payment:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
type:
type: string
description: ''
example: Levy
enum:
- Levy
- Deposit
payer:
type: object
description: ''
example: []
properties:
document:
type: string
description: 'This field is required when type is Levy. Must be at least 11 characters. Must not be greater than 14 characters.'
example: aykcmyuwpwlvqw
nullable: true
name:
type: string
description: 'This field is required when type is Levy. Must not be greater than 100 characters.'
example: r
nullable: true
trade_name:
type: string
description: 'Must not be greater than 100 characters.'
example: s
nullable: true
address:
type: object
description: ''
example: []
properties:
zip_code:
type: string
description: 'This field is required when type is Levy. Must be 8 characters.'
example: itcpscql
nullable: true
address_line:
type: string
description: 'This field is required when type is Levy. Must not be greater than 60 characters.'
example: d
nullable: true
number:
type: string
description: 'Must not be greater than 20 characters.'
example: zsnrwtujwvlxjklq
nullable: true
neighborhood:
type: string
description: 'This field is required when type is Levy. Must not be greater than 40 characters.'
example: p
nullable: true
city:
type: string
description: 'This field is required when type is Levy. Must not be greater than 40 characters.'
example: p
nullable: true
state:
type: string
description: 'This field is required when type is Levy. Must be 2 characters.'
example: wq
nullable: true
interest:
type: object
description: ''
example: []
properties:
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
value:
type: number
description: 'Must not be greater than 100.'
example: 4
nullable: true
type:
type: string
description: ''
example: Percent
enum:
- FixedAmount
- Percent
nullable: true
fine:
type: object
description: ''
example: []
properties:
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
value:
type: number
description: 'Must not be greater than 100.'
example: 25
nullable: true
type:
type: string
description: ''
example: Percent
enum:
- FixedAmount
- Percent
nullable: true
discount:
type: object
description: ''
example: []
properties:
limit_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
value:
type: number
description: 'Must not be greater than 100.'
example: 9
nullable: true
type:
type: string
description: ''
example: FixedAmountUntilLimitDate
enum:
- FixedAmountUntilLimitDate
- FixedPercentUntilLimitDate
nullable: true
required:
- account_number
- account_branch
- document_number
- amount
- due_date
- close_payment
- type
get:
summary: ''
operationId: getApiV1ExternalBoletos
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
end_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
page:
type: integer
description: 'Must be at least 1.'
example: 16
nullable: true
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
nullable: true
order_column:
type: string
description: ''
example: status
enum:
- createdAt
- status
nullable: true
order_direction:
type: string
description: ''
example: ASC
enum:
- ASC
- DESC
nullable: true
payer_name:
type: string
description: 'Must not be greater than 255 characters.'
example: g
nullable: true
delete:
summary: ''
operationId: deleteApiV1ExternalBoletos
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
authentication_code:
type: string
description: ''
example: architecto
account_number:
type: string
description: ''
example: architecto
account_branch:
type: string
description: ''
example: architecto
required:
- authentication_code
- account_number
- account_branch
'/api/v1/external/boletos/{authCode}':
get:
summary: ''
operationId: getApiV1ExternalBoletosAuthCode
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
account_branch:
type: string
description: ''
example: architecto
account_number:
type: string
description: ''
example: architecto
required:
- account_branch
- account_number
parameters:
-
in: path
name: authCode
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/external/boletos/{authCode}/print':
get:
summary: ''
operationId: getApiV1ExternalBoletosAuthCodePrint
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
account_branch:
type: string
description: ''
example: architecto
account_number:
type: string
description: ''
example: architecto
required:
- account_branch
- account_number
parameters:
-
in: path
name: authCode
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/external/payments/card:
post:
summary: ''
operationId: postApiV1ExternalPaymentsCard
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount:
type: number
description: 'Must be at least 0.01.'
example: 27
reference:
type: string
description: 'Must not be greater than 200 characters.'
example: 'n'
description:
type: string
description: 'Must not be greater than 200 characters.'
example: 'Animi quos velit et fugiat.'
nullable: true
installments:
type: integer
description: 'Must be at least 1. Must not be greater than 12.'
example: 8
nullable: true
card_token:
type: string
description: 'cartão cru OU token do cofre. This field is required when card.number is not present.'
example: architecto
nullable: true
card:
type: object
description: ''
example: []
properties:
holder:
type: string
description: 'This field is required when card_token is not present.'
example: architecto
nullable: true
number:
type: string
description: 'This field is required when card_token is not present.'
example: architecto
nullable: true
expiration:
type: string
description: 'This field is required when card_token is not present.'
example: architecto
nullable: true
cvv:
type: string
description: MM/AAAA.
example: architecto
nullable: true
customer:
type: object
description: ''
example: []
properties:
name:
type: string
description: cliente.
example: architecto
document:
type: string
description: ''
example: architecto
email:
type: string
description: 'Must be a valid email address.'
example: zbailey@example.net
nullable: true
phone:
type: string
description: ''
example: architecto
nullable: true
address:
type: object
description: ''
example: null
properties: { }
nullable: true
required:
- name
- document
required:
- amount
- reference
/api/v1/external/payments/card/tokenize:
post:
summary: ''
operationId: postApiV1ExternalPaymentsCardTokenize
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
card:
type: object
description: ''
example: []
properties:
holder:
type: string
description: ''
example: architecto
number:
type: string
description: ''
example: architecto
expiration:
type: string
description: ''
example: architecto
cvv:
type: string
description: ''
example: architecto
nullable: true
required:
- holder
- number
- expiration
/api/v1/payouts/transfer:
post:
summary: "Cash-out por TRANSFERÊNCIA BANCÁRIA — única forma de saque da Safe2Pay\n(não há saque por chave PIX). Mesma idempotência do pix()."
operationId: cashOutPorTRANSFERNCIABANCRIAnicaFormaDeSaqueDaSafe2PaynoHSaquePorChavePIXMesmaIdempotnciaDoPix
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
receiver_name:
type: string
description: 'Must not be greater than 140 characters.'
example: b
receiver_document:
type: string
description: 'Must be at least 11 characters. Must not be greater than 18 characters.'
example: ngzmiyvdljnikhwa
amount:
type: number
description: 'Must be at least 0.01.'
example: 50
description:
type: string
description: 'Must not be greater than 140 characters.'
example: 'Quo omnis nostrum aut adipisci.'
nullable: true
reference:
type: string
description: 'Must not be greater than 140 characters.'
example: p
nullable: true
compensation_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
nullable: true
bank:
type: object
description: ''
example: []
properties:
code:
type: string
description: 'Must not be greater than 5 characters.'
example: w
account_type:
type: string
description: ''
example: PP
enum:
- CC
- PP
agency:
type: string
description: 'Must not be greater than 10 characters.'
example: lvqwrs
agency_digit:
type: string
description: 'Must not be greater than 2 characters.'
example: it
nullable: true
account:
type: string
description: 'Must not be greater than 20 characters.'
example: cpscqldzsnrwtujw
account_digit:
type: string
description: 'Must not be greater than 2 characters.'
example: vl
nullable: true
required:
- code
- account_type
- agency
- account
required:
- receiver_name
- receiver_document
- amount
'/api/v1/payouts/transfer/{reference}':
get:
summary: 'Consulta de um payout pela referência/idempotency-key do consumidor.'
operationId: consultaDeUmPayoutPelaRefernciaidempotencyKeyDoConsumidor
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: reference
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/payouts/pix:
post:
summary: ''
operationId: postApiV1PayoutsPix
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
pix_key:
type: string
description: 'Must not be greater than 140 characters.'
example: b
amount:
type: number
description: 'Must be at least 0.01.'
example: 39
description:
type: string
description: 'Must not be greater than 140 characters.'
example: 'Animi quos velit et fugiat.'
nullable: true
reference:
type: string
description: 'Must not be greater than 140 characters.'
example: d
nullable: true
pix_key_type:
type: string
description: ''
example: cpf
enum:
- cpf
- cnpj
- email
- phone
- evp
- random
nullable: true
required:
- pix_key
- amount
'/api/v1/payouts/pix/{reference}':
get:
summary: 'Consulta de um payout pela referência/idempotency-key do consumidor.'
operationId: consultaDeUmPayoutPelaRefernciaidempotencyKeyDoConsumidor
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: reference
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/admin/login:
post:
summary: ''
operationId: postApiV1AdminLogin
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'Must be a valid email address.'
example: gbailey@example.net
password:
type: string
description: ''
example: '|]|{+-'
totp_code:
type: string
description: 'Must be 6 characters.'
example: vdljni
nullable: true
required:
- email
- password
/api/v1/admin/logout:
post:
summary: ''
operationId: postApiV1AdminLogout
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/admin/me:
get:
summary: ''
operationId: getApiV1AdminMe
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/admin/transactions:
get:
summary: ''
operationId: getApiV1AdminTransactions
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date.'
example: '2026-06-27T15:12:22'
end_date:
type: string
description: 'Must be a valid date. Must be a date after or equal to start_date.'
example: '2052-07-20'
page:
type: integer
description: 'Must be at least 1.'
example: 22
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 7
search:
type: string
description: 'Must not be greater than 255 characters.'
example: z
direction:
type: string
description: ''
example: OUT
enum:
- IN
- OUT
transaction_type_code:
type: string
description: ''
example: p2p
enum:
- pix
- ted
- p2p
- payment
- slc
status:
type: string
description: ''
example: RETURN
enum:
- CREATED
- DONE
- UNDONE
- PENDING
- CANCELED
- RETURN
- REFUND
- IN_PROCESS
- APPROVED
- REPROVED
- CONFIRMED
- COMPLETED
- RECEIVED
- FAILED
- REFUSED
- TRANSACTION_HOLD_WAS_REPROVED
- TRANSACTION_HOLD_WAS_APPROVED
- TRANSACTION_WAS_REVERSED
- TRANSACTION_HOLD_WAS_EXPIRED
- TRANSACTION_WAS_CONFIRMED
- TRANSACTION_WAS_REVERSED_IN_SECOND_INSTANCE
- TRANSACTION_VOUCHER_WAS_CREATED
order_column:
type: string
description: ''
example: createdAt
enum:
- createdAt
order_direction:
type: string
description: ''
example: DESC
enum:
- ASC
- DESC
/api/v1/admin/environments:
get:
summary: ''
operationId: getApiV1AdminEnvironments
description: ''
parameters: []
responses: { }
tags:
- Endpoints
post:
summary: ''
operationId: postApiV1AdminEnvironments
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/admin/environments/consumers:
get:
summary: 'Lista consumidores (integrações) e o ambiente em que estão.'
operationId: listaConsumidoresintegraesEOAmbienteEmQueEsto
description: ''
parameters: []
responses: { }
tags:
- Endpoints
'/api/v1/admin/environments/{environment_id}/balance':
get:
summary: 'Saldo + próximos repasses (extrato) da carteira Safe2Pay do ambiente.'
operationId: saldo+PrximosRepassesextratoDaCarteiraSafe2PayDoAmbiente
description: 'Só Safe2Pay tem carteira; HiperBanco devolve "unsupported".'
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: environment_id
description: 'The ID of the environment.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/environments/{environment_id}':
patch:
summary: ''
operationId: patchApiV1AdminEnvironmentsEnvironment_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: environment_id
description: 'The ID of the environment.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/environments/{environment_id}/default':
post:
summary: 'Define o ambiente como padrão (usado por consumidores sem atribuição).'
operationId: defineOAmbienteComoPadrousadoPorConsumidoresSemAtribuio
description: 'Garante exclusividade do flag is_default.'
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: environment_id
description: 'The ID of the environment.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/environments/{environment_id}/test':
post:
summary: 'Testa a conexão com o provedor usando as credenciais salvas.'
operationId: testaAConexoComOProvedorUsandoAsCredenciaisSalvas
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: environment_id
description: 'The ID of the environment.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/integrations/{integration_id}/environment':
post:
summary: 'Atribui um consumidor a um ambiente (migração gradual por sistema).'
operationId: atribuiUmConsumidorAUmAmbientemigraoGradualPorSistema
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
payment_environment_id:
type: integer
description: 'The id of an existing record in the payment_environments table.'
example: 16
nullable: true
parameters:
-
in: path
name: integration_id
description: 'The ID of the integration.'
example: 3
required: true
schema:
type: integer
/api/v1/admin/clients:
get:
summary: 'Lista clientes com subconta Safe2Pay + plano de comissão atual.'
operationId: listaClientesComSubcontaSafe2Pay+PlanoDeComissoAtual
description: ''
parameters: []
responses: { }
tags:
- Endpoints
'/api/v1/admin/clients/{user_id}/subaccount':
get:
summary: 'Status da subconta + saldo (se ativa).'
operationId: statusDaSubconta+SaldoseAtiva
description: ''
parameters: []
responses: { }
tags:
- Endpoints
post:
summary: 'Cria/Reprovisiona a subconta do cliente.'
operationId: criaReprovisionaASubcontaDoCliente
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 120 characters.'
example: b
commercial_name:
type: string
description: 'Must not be greater than 120 characters.'
example: 'n'
document:
type: string
description: 'Must be at least 11 characters. Must not be greater than 18 characters.'
example: gzmiyvdljnikhway
responsible_name:
type: string
description: 'Must not be greater than 120 characters.'
example: k
responsible_document:
type: string
description: 'Must be at least 11 characters. Must not be greater than 14 characters.'
example: cmyuwpwlvqwrsi
responsible_birth_date:
type: string
description: 'Must be a valid date in the format d/m/Y.'
example: 27/06/2026
responsible_phone:
type: string
description: 'exigido pela Safe2Pay. Must not be greater than 20 characters.'
example: tcpscqldzsnrwtuj
email:
type: string
description: 'Must be a valid email address.'
example: schultz.audrey@example.org
bank:
type: object
description: ''
example: []
properties:
code:
type: string
description: 'Must not be greater than 5 characters.'
example: k
account_type:
type: string
description: ''
example: PP
enum:
- CC
- PP
agency:
type: string
description: 'Must not be greater than 10 characters.'
example: lqppwq
agency_digit:
type: string
description: 'Must not be greater than 2 characters.'
example: be
nullable: true
account:
type: string
description: 'Must not be greater than 20 characters.'
example: wtnnoqitpxntltcv
account_digit:
type: string
description: 'Must not be greater than 2 characters.'
example: ip
nullable: true
required:
- code
- account_type
- agency
- account
address:
type: object
description: ''
example: []
properties:
zip_code:
type: string
description: 'Must not be greater than 9 characters.'
example: ojsausg
street:
type: string
description: 'Must not be greater than 120 characters.'
example: i
number:
type: string
description: 'Must not be greater than 20 characters.'
example: oglrbchgsrzyhctt
nullable: true
complement:
type: string
description: 'Must not be greater than 80 characters.'
example: w
nullable: true
district:
type: string
description: 'Must not be greater than 80 characters.'
example: b
city:
type: string
description: 'Must not be greater than 80 characters.'
example: k
state:
type: string
description: 'Must be 2 characters.'
example: mk
required:
- zip_code
- street
- district
- city
- state
split:
type: object
description: 'Comissão opcional por chamada (senão usa config).'
example: null
properties: { }
required:
- responsible_name
- responsible_document
- responsible_birth_date
- responsible_phone
- email
parameters:
-
in: path
name: user_id
description: 'The ID of the user.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/clients/{user_id}/subaccount/sync':
post:
summary: 'Propaga o plano de comissão atual para a subconta (Marketplace/Update).'
operationId: propagaOPlanoDeComissoAtualParaASubcontaMarketplaceUpdate
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: user_id
description: 'The ID of the user.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/commission-plans:
get:
summary: ''
operationId: getApiV1AdminCommissionPlans
description: ''
parameters: []
responses: { }
tags:
- Endpoints
post:
summary: ''
operationId: postApiV1AdminCommissionPlans
description: ''
parameters: []
responses: { }
tags:
- Endpoints
'/api/v1/admin/commission-plans/{commissionPlan_id}':
patch:
summary: ''
operationId: patchApiV1AdminCommissionPlansCommissionPlan_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
delete:
summary: ''
operationId: deleteApiV1AdminCommissionPlansCommissionPlan_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: commissionPlan_id
description: 'The ID of the commissionPlan.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/commission-plans/{commissionPlan_id}/default':
post:
summary: 'Define como padrão (exclusivo).'
operationId: defineComoPadroexclusivo
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: commissionPlan_id
description: 'The ID of the commissionPlan.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/clients/{user_id}/commission-plan':
post:
summary: 'Atribui um plano de comissão a um cliente (null = volta ao padrão).'
operationId: atribuiUmPlanoDeComissoAUmClientenullVoltaAoPadro
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
commission_plan_id:
type: integer
description: 'The id of an existing record in the commission_plans table.'
example: 16
nullable: true
parameters:
-
in: path
name: user_id
description: 'The ID of the user.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/webhooks/event-names:
get:
summary: ''
operationId: getApiV1AdminWebhooksEventNames
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/admin/webhooks/messages:
get:
summary: ''
operationId: getApiV1AdminWebhooksMessages
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
start_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
end_date:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-06-27'
state:
type: string
description: ''
example: Failed
enum:
- Success
- Failed
nullable: true
event_name:
type: string
description: ''
example: architecto
nullable: true
context:
type: string
description: ''
example: architecto
nullable: true
page:
type: integer
description: 'Must be at least 1.'
example: 22
nullable: true
page_size:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 7
nullable: true
required:
- start_date
- end_date
'/api/v1/admin/webhooks/messages/{id}/reprocess':
post:
summary: ''
operationId: postApiV1AdminWebhooksMessagesIdReprocess
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: id
description: 'The ID of the message.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/webhooks/reconcile-logs:
get:
summary: ''
operationId: getApiV1AdminWebhooksReconcileLogs
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/admin/webhooks:
get:
summary: ''
operationId: getApiV1AdminWebhooks
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: ''
example: Disabled
enum:
- Enabled
- Disabled
page:
type: integer
description: 'Must be at least 1.'
example: 16
page_size:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
post:
summary: ''
operationId: postApiV1AdminWebhooks
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
context:
type: string
description: ''
example: Customer
enum:
- Boleto
- Pix
- Ted
- Payment
- Account
- Authorization
- Card
- Customer
- Business
- Document
- Dict
- SLC
- Openfinance
uri:
type: string
description: 'Must be a valid URL.'
example: 'http://bailey.com/'
event_name:
type: string
description: ''
example: architecto
required:
- name
- context
- uri
- event_name
/api/v1/admin/webhooks/bulk-update:
patch:
summary: ''
operationId: patchApiV1AdminWebhooksBulkUpdate
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ids:
type: array
description: ''
example:
- architecto
items:
type: string
uri:
type: string
description: 'Must be a valid URL. Must not be greater than 500 characters.'
example: 'n'
required:
- ids
- uri
'/api/v1/admin/webhooks/{id}':
patch:
summary: ''
operationId: patchApiV1AdminWebhooksId
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
uri:
type: string
description: 'Must be a valid URL.'
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
required:
- uri
delete:
summary: ''
operationId: deleteApiV1AdminWebhooksId
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: id
description: 'The ID of the webhook.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/plans:
get:
summary: ''
operationId: getApiV1AdminPlans
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
page:
type: integer
description: 'Must be at least 1.'
example: 16
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
search:
type: string
description: 'Must not be greater than 255 characters.'
example: g
order_column:
type: string
description: ''
example: availability
enum:
- name
- price
- type_account
- availability
order_direction:
type: string
description: ''
example: ASC
enum:
- ASC
- DESC
post:
summary: ''
operationId: postApiV1AdminPlans
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
benefits:
type: string
description: ''
example: architecto
contract:
type: string
format: binary
description: 'Must be a file. Must not be greater than 51200 kilobytes.'
plan_default:
type: boolean
description: ''
example: true
availability:
type: string
description: ''
example: architecto
visibility:
type: string
description: ''
example: architecto
type_account:
type: string
description: ''
example: PJ
enum:
- PF
- PJ
days_until_first_payment:
type: integer
description: 'Must be at least 0.'
example: 39
price:
type: number
description: 'Must be at least 0.'
example: 84
required:
- name
- contract
- plan_default
- availability
- visibility
- type_account
- days_until_first_payment
- price
'/api/v1/admin/plans/{id}':
get:
summary: ''
operationId: getApiV1AdminPlansId
description: ''
parameters: []
responses: { }
tags:
- Endpoints
patch:
summary: ''
operationId: patchApiV1AdminPlansId
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
description:
type: string
description: 'Must not be greater than 255 characters.'
example: 'Et animi quos velit et fugiat.'
benefits:
type: string
description: 'Must not be greater than 255 characters.'
example: d
contract:
type: string
format: binary
description: 'Must be a file. Must not be greater than 51200 kilobytes.'
plan_default:
type: boolean
description: ''
example: false
availability:
type: boolean
description: ''
example: false
visibility:
type: boolean
description: ''
example: true
type_account:
type: string
description: ''
example: PJ
enum:
- PF
- PJ
days_until_first_payment:
type: integer
description: 'Must be at least 0.'
example: 37
price:
type: number
description: 'Must be at least 0.'
example: 9
price_pix:
type: number
description: 'Must be at least 0.'
example: 52
price_ted:
type: number
description: 'Must be at least 0.'
example: 8
price_billet:
type: number
description: 'Must be at least 0.'
example: 75
price_p2p:
type: number
description: 'Must be at least 0.'
example: 7
price_generate_dynamic_qr_code_pix:
type: number
description: 'Must be at least 0.'
example: 87
price_generate_static_qr_code_pix:
type: number
description: 'Must be at least 0.'
example: 39
price_receive_dynamic_qr_code_pix:
type: number
description: 'Must be at least 0.'
example: 50
price_receive_static_qr_code_pix:
type: number
description: 'Must be at least 0.'
example: 62
bill_settlement_price:
type: number
description: 'Must be at least 0.'
example: 54
price_withdraw:
type: number
description: 'Must be at least 0.'
example: 38
quantity_generate_dynamic_qr_code_pix:
type: integer
description: 'Must be at least 0.'
example: 50
quantity_generate_static_qr_code_pix:
type: integer
description: 'Must be at least 0.'
example: 72
quantity_receive_dynamic_qr_code_pix:
type: integer
description: 'Must be at least 0.'
example: 61
quantity_receive_static_qr_code_pix:
type: integer
description: 'Must be at least 0.'
example: 67
quantity_pix:
type: integer
description: 'Must be at least 0.'
example: 61
quantity_ted:
type: integer
description: 'Must be at least 0.'
example: 89
quantity_billet:
type: integer
description: 'Must be at least 0.'
example: 34
quantity_periodo:
type: integer
description: 'Must be at least 0.'
example: 3
quantity_p2p:
type: integer
description: 'Must be at least 0.'
example: 22
quantity_bill_settlement:
type: integer
description: 'Must be at least 0.'
example: 4
required:
- name
- description
- benefits
- contract
- plan_default
- availability
- visibility
- type_account
- days_until_first_payment
- price
- price_pix
- price_ted
- price_billet
- price_p2p
- price_generate_dynamic_qr_code_pix
- price_generate_static_qr_code_pix
- price_receive_dynamic_qr_code_pix
- price_receive_static_qr_code_pix
- bill_settlement_price
- price_withdraw
- quantity_generate_dynamic_qr_code_pix
- quantity_generate_static_qr_code_pix
- quantity_receive_dynamic_qr_code_pix
- quantity_receive_static_qr_code_pix
- quantity_pix
- quantity_ted
- quantity_billet
- quantity_periodo
- quantity_p2p
- quantity_bill_settlement
delete:
summary: ''
operationId: deleteApiV1AdminPlansId
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: id
description: 'The ID of the plan.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/plans/{id}/accounts':
get:
summary: ''
operationId: getApiV1AdminPlansIdAccounts
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
page:
type: integer
description: 'Must be at least 1.'
example: 16
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
search:
type: string
description: 'Must not be greater than 255 characters.'
example: g
parameters:
-
in: path
name: id
description: 'The ID of the plan.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/plans/{accountId}/billing-history':
get:
summary: ''
operationId: getApiV1AdminPlansAccountIdBillingHistory
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
page:
type: integer
description: 'Must be at least 1.'
example: 16
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
parameters:
-
in: path
name: accountId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/plans/{accountId}/assign':
put:
summary: ''
operationId: putApiV1AdminPlansAccountIdAssign
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
new_plan_id:
type: string
description: ''
example: architecto
required:
- new_plan_id
parameters:
-
in: path
name: accountId
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/admin/users:
get:
summary: ''
operationId: getApiV1AdminUsers
description: ''
parameters: []
responses: { }
tags:
- Endpoints
post:
summary: ''
operationId: postApiV1AdminUsers
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
email:
type: string
description: 'Must be a valid email address.'
example: zbailey@example.net
password:
type: string
description: ''
example: '|]|{+-'
required:
- name
- email
- password
'/api/v1/admin/users/{id}':
delete:
summary: ''
operationId: deleteApiV1AdminUsersId
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: id
description: 'The ID of the user.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/profile:
get:
summary: ''
operationId: getApiV1AdminProfile
description: ''
parameters: []
responses: { }
tags:
- Endpoints
patch:
summary: ''
operationId: patchApiV1AdminProfile
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
email:
type: string
description: 'Must be a valid email address.'
example: zbailey@example.net
required:
- name
- email
/api/v1/admin/profile/password:
patch:
summary: ''
operationId: patchApiV1AdminProfilePassword
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
current_password:
type: string
description: ''
example: architecto
new_password:
type: string
description: ''
example: architecto
required:
- current_password
- new_password
/api/v1/admin/email-test/templates:
get:
summary: ''
operationId: getApiV1AdminEmailTestTemplates
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/admin/email-test/send:
post:
summary: ''
operationId: postApiV1AdminEmailTestSend
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
template:
type: string
description: ''
example: architecto
to:
type: string
description: 'Must be a valid email address.'
example: zbailey@example.net
required:
- template
- to
/api/v1/nps/eligibility:
get:
summary: 'Verificar elegibilidade da pesquisa'
operationId: verificarElegibilidadeDaPesquisa
description: "Retorna se o usuário deve ver o prompt de NPS (ainda não respondeu nesta tag\nnos últimos 90 dias)."
parameters:
-
in: query
name: survey_tag
description: 'Tag da pesquisa para checar.'
example: post_onboarding
required: false
schema:
type: string
description: 'Tag da pesquisa para checar.'
example: post_onboarding
responses: { }
tags:
- 'Portal · NPS'
/api/v1/nps:
post:
summary: 'Enviar resposta NPS'
operationId: enviarRespostaNPS
description: "Registra uma resposta de NPS do usuário autenticado. A categoria\n(promoter/passive/detractor) é derivada do score."
parameters: []
responses: { }
tags:
- 'Portal · NPS'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
score:
type: integer
description: 'Nota de 0 a 10.'
example: 9
comment:
type: string
description: 'Comentário opcional (max 2000).'
example: 'Atendimento rápido.'
nullable: true
survey_tag:
type: string
description: 'Tag da pesquisa.'
example: post_onboarding
nullable: true
source:
type: string
description: 'Origem (app|email|web).'
example: app
nullable: true
required:
- score