Pular para o conteúdo principal

API HTTP — AMPLIA

Última atualização: 16/09/2026.

Não há front controller: cada arquivo em backend/api/ é um endpoint. Catálogo completo: endpoints.md. Máquina: openapi.yaml.

Base

Prefixo{APP_URL}/backend/api/
FormatoJSON UTF-8 (Content-Type: application/json)
Sessãocookie PHP (httponly, SameSite=Lax)
CSRFheader X-CSRF-Token (ou campo csrf_token) em mutações
Auth alternativatoken em financeiro_api_tokens (só API externa de comissões)
WebhookX-Autentique-Signature

Obter CSRF (sessão já aberta ou login): GET /backend/api/auth/csrf-token.php. O JS (frontend/assets/js/core/csrf.js) injeta o header em fetch/jQuery.

Envelope

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{"status":"success","message":"…","data":{}}

Erro:

{"status":"error","message":"…","code":"db_connection_limit"}

O campo de payload não é 100% uniforme: módulos novos usam data; alguns legado usam dados ou chaves soltas (permissoes, csrf_token). O OpenAPI documenta o mais comum; o arquivo PHP é a fonte da verdade.

Status HTTP

CódigoQuando
200sucesso (mesmo em alguns erros legado que ainda devolvem 200 + status=error)
400validação
401sem sessão / token / HMAC
403sem permissão, módulo desligado, CSRF
405método fora da lista (backend_require_method)
503health/banco

Nem todo arquivo chama backend_require_method. Nesses casos o PHP executa GET ou POST conforme o caller. A coluna “Método” em endpoints.md usa o verbo intencional (pelo nome e pelo código); “enforced” diz se o servidor rejeita os outros.

Autorização

  1. Bootstrap com session => true (salvo exceções).
  2. backend_permission_require / assert_can / helpers de módulo (backend_leads_*, backend_tasks_*, backend_users_require_auth).
  3. Super-admin bypass em backend_permission_user_can().
  4. Recorte de linhas por white_label_id / hierarquia.

Matriz flag × endpoint: permissoes-matriz-endpoints.md.

Público (sem sessão de operador)

MétodoPathAuth
GET/backend/api/health.phpnenhuma (não vaza senha; só has_db_password)
POST/backend/api/auth/login.phpcredencial + rate limit
POST/backend/api/auth/forgot-password.phpe-mail
POST/backend/api/auth/reset-password.phptoken
POST/backend/api/assinaturas/webhook.phpHMAC Autentique
GET/backend/api/financeiro/external/comissoes.phptoken de API + user_id

Convenção de nomes

/backend/api/{modulo}/{recurso?}/{acao}.php

Exemplos: estabelecimentos/listar-locais.php, propostas/simulador/calcular.php.

Módulo novo (Tarefas/Comercial): endpoint fino, CSRF em POST, ensure_schema, assert_module_enabled.

Eventos / AsyncAPI

Não há broker. O único “evento inbound” documentável é o webhook Autentique. Polling: transacoes/polling.php e rotinas de credenciamento no serviço (não há pasta api/estabelecimentos/credenciamento/ neste snapshot).

Como atualizar este contrato

  1. Criar o PHP em backend/api.
  2. Linha em api/endpoints.md e na matriz de permissões.
  3. Regenerar ou editar api/openapi.yaml.
  4. Se a decisão for estrutural (novo tipo de auth), abra um ADR.