Progem API
Acesso interno Público
Menu

Produto · Auth do associado

Whitelabel · Acesso

Login, refresh, logout, registro, recuperação/troca de senha e sessões do UsuarioApp. Domínio do produto (planos, contratos, perfil) em Whitelabel.

Quando usar / quando não usar

  • Use para autenticar o associado no tenant whitelabel (X-Progem-ID + X-Device-ID).
  • Não use em Cobrador, Vendedor, CRM ou Agenda — esses apps compartilham Acesso Mobile (/api/v1/mobile/auth/*).
  • Não use OAuth2 M2M (/oauth2/token) — ver Integrações.
  • Admin de usuários (/app/admin/**) → Plataforma.
  • Após o token: domínio em Whitelabel.

Comparar: Acesso WL × Mobile × M2M

Acesso WL (esta página)Acesso MobileM2M
Apps Site/app associado Cobrador, Vendedor, CRM, Agenda Integrações externas
Base /api/v1/app/auth/* /api/v1/mobile/auth/* /oauth2/token
Tenant Sempre X-Progem-ID Claim após select-tenant X-Progem-ID + client
Senha forgot/reset /app/password/* Não existe —
Guia Esta página Acesso Mobile Integrações

Headers obrigatórios

HeaderQuandoNotas
X-Progem-IDSempreID da empresa/tenant
X-Device-IDlogin, register, refresh, logoutObrigatório; max ~120 chars. Fallback no body de refresh/logout se ausente
Authorization: Bearerlogout, change password, sessões, /meAccess token do associado
Content-Type: application/jsonPOSTs

Mapa

MétodoPathAuth
POST/api/v1/app/auth/loginTenant + device (sem Bearer)
POST/api/v1/app/auth/refreshRefresh token + device
POST/api/v1/app/auth/logoutBearer + device
POST/api/v1/app/auth/registerTenant + device
POST/api/v1/app/password/forgotBearer client (client_credentials) + tenant
POST/api/v1/app/password/resetBearer client (client_credentials) + tenant
POST/api/v1/app/password/changeBearer do usuário
GET/api/v1/app/sessoesBearer
DELETE/api/v1/app/sessoes/{deviceId}Bearer

Verify-email / verify-phone (/app/auth/verify-*) existem na API, mas o app whitelabel atual não os usa na jornada principal — fora do escopo deste guia.

POST /api/v1/app/auth/login

identificador aceita e-mail ou CPF. Sem Bearer. Exige X-Device-ID.

POST {{url_base}}/api/v1/app/auth/login
Content-Type: application/json
X-Progem-ID: {{tenant_id}}
X-Device-ID: {{device_id}}

{ "identificador": "maria@exemplo.com", "senha": "SenhaForte!2025" }

Response 200 — AppAuthResponse

Tokens saem em snake_case JSON: access_token, refresh_token.

{
  "access_token": "eyJ…",
  "refresh_token": "eyJ…",
  "userId": 1001,
  "nome": "Maria Silva",
  "email": "maria@exemplo.com",
  "cpf": "12345678901",
  "roles": ["ASSOCIADO"],
  "progemLink": { }
}

Status: 200 · 400 tenant/device · 401 credenciais.

POST /api/v1/app/auth/refresh

Resposta em camelCase: accessToken, refreshToken (diferente do login). Revoga tokens do device antes de emitir o novo par.

POST {{url_base}}/api/v1/app/auth/refresh
Content-Type: application/json
X-Device-ID: {{device_id}}

{ "refreshToken": "eyJ…", "deviceId": "{{device_id}}" }
{ "accessToken": "eyJ…", "refreshToken": "eyJ…" }

POST /api/v1/app/auth/logout

Revoga refresh do device. Resposta 204.

POST {{url_base}}/api/v1/app/auth/logout
Authorization: Bearer {{access_token}}
X-Progem-ID: {{tenant_id}}
X-Device-ID: {{device_id}}
Content-Type: application/json

{ "deviceId": "{{device_id}}" }

POST /api/v1/app/auth/register

Cria UsuarioApp no tenant. 201 com o mesmo formato de auth do login (scopes mínimos no token inicial).

POST {{url_base}}/api/v1/app/auth/register
Content-Type: application/json
X-Progem-ID: {{tenant_id}}
X-Device-ID: {{device_id}}

{
  "nome": "Maria Silva",
  "email": "maria@exemplo.com",
  "senha": "SenhaForte!2025",
  "cpf": "12345678901",
  "celular": "11999998888",
  "dataNascimento": "1990-05-12",
  "aceiteTermos": true,
  "aceitePrivacidade": true
}

Usuário logado — GET /api/v1/app/me

Perfil do associado após login. Avatar, devices e PUT /me no guia de domínio Whitelabel · Perfil.

GET {{url_base}}/api/v1/app/me
Authorization: Bearer {{access_token}}
X-Progem-ID: {{tenant_id}}
{
  "id": 1001,
  "nome": "Maria Silva",
  "email": "maria@exemplo.com",
  "cpf": "12345678901",
  "celular": "11999998888",
  "dataNascimento": "1990-05-12",
  "emailVerificado": true,
  "celularVerificado": false,
  "progemLink": { }
}

Atualização oficial: PUT /api/v1/app/me (204). Não confundir com GET /api/v1/mobile/me (Acesso Mobile).

Senha (forgot / reset / change)

Política de senha (reset, change, /me e admin): 8 a 72 caracteres, com pelo menos 1 letra maiúscula, 1 minúscula e 1 dígito. Violação: 400 com code: "PASSWORD_POLICY" e a regra em message.

Tenant: empresaId do token; X-Progem-ID só é usado quando o token não traz empresa. No whitelabel, o BFF chama forgot/reset com o token client (OAUTH_CLIENT_ID) — ele e o PROGEM_TENANT_ID precisam ser do mesmo tenant.

POST /api/v1/app/password/forgot

O código (6 dígitos, válido por 10 minutos) é enviado somente por e-mail, para o e-mail cadastrado do usuário. identifier aceita e-mail, CPF ou celular (com ou sem máscara). Resposta cega 200: a mesma resposta existindo ou não o usuário, sem e-mail real cadastrado ou acima do limite de 6 códigos por hora (nesse caso nenhum e-mail sai; não há 429). Pedir um novo código invalida o anterior.

POST {{url_base}}/api/v1/app/password/forgot
Authorization: Bearer {{client_token}}
Content-Type: application/json
X-Progem-ID: {{tenant_id}}

{ "identifier": "maria@exemplo.com" }

POST /api/v1/app/password/reset

Sucesso 200 e todos os refresh tokens do usuário são revogados (novo login em todos os devices). Usuário inexistente, código errado, expirado ou já usado: 400 code: "RESET_CODE_INVALID", message: "Código inválido ou expirado.". Após 5 tentativas erradas o código é invalidado e é preciso pedir outro.

POST {{url_base}}/api/v1/app/password/reset
Authorization: Bearer {{client_token}}
Content-Type: application/json
X-Progem-ID: {{tenant_id}}

{
  "identifier": "maria@exemplo.com",
  "codigo": "482913",
  "novaSenha": "NovaSenhaForte2025"
}
{
  "status": 400,
  "error": "Bad Request",
  "message": "Código inválido ou expirado.",
  "code": "RESET_CODE_INVALID"
}

POST /api/v1/app/password/change

Usuário autenticado (o usuário vem do token). email é opcional; se enviado precisa ser o do próprio usuário (403 caso contrário). Senha atual errada ou nova igual à atual: 400.

POST {{url_base}}/api/v1/app/password/change
Authorization: Bearer {{access_token}}
X-Progem-ID: {{tenant_id}}
Content-Type: application/json

{
  "senhaAtual": "SenhaForte2025",
  "novaSenha": "NovaSenhaForte2025"
}

Alternativas na API (não usadas pelo whitelabel atual, mesma política de senha): PATCH /app/me/password, PATCH /app/me/trocar/password.

Sessões

Endpoints existem na API (SessaoController). O web-progem-white-label não chama esses paths na jornada atual — inventário curto para quem for expor gestão de dispositivos.

GET /api/v1/app/sessoes

GET {{url_base}}/api/v1/app/sessoes
Authorization: Bearer {{access_token}}
X-Progem-ID: {{tenant_id}}
[
  {
    "id": 10,
    "deviceId": "web-abc",
    "userAgent": "Mozilla/…",
    "ip": "203.0.113.10",
    "expiraEm": "2026-10-01T12:00:00Z"
  }
]

DELETE /api/v1/app/sessoes/{deviceId}

Revoga sessões daquele device do próprio usuário. 204.

DELETE {{url_base}}/api/v1/app/sessoes/web-abc
Authorization: Bearer {{access_token}}
X-Progem-ID: {{tenant_id}}

Erros

StatusSituação
400Empresa ausente, device ausente/inválido, body inválido
401Senha errada, refresh inválido/expirado, não autenticado
204Logout / revogar sessão / (alguns updates)
201Register criado
200Login, refresh, forgot/reset/change (forgot é cego)

Checklist

  • Sempre enviar X-Progem-ID + X-Device-ID no login/register/refresh/logout.
  • Tratar diferença de casing: login access_token vs refresh accessToken.
  • Guardar refresh por device; após refresh, substituir o par completo.
  • Forgot é resposta cega — UX não deve depender de “usuário encontrado”.
  • Depois do token: seguir Whitelabel (domínio).
  • Cobrador / Vendedor / CRM / Agenda → Acesso Mobile.