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