Termos de Autorização
Módulo de termos de autorização: o registro do consentimento de um titular para que a plataforma consulte ou compartilhe seus dados junto a um provedor. No consignado privado, o termo é o que autoriza as consultas de vínculos, dados do trabalhador e saldo FGTS na Dataprev, e carrega o token de autorização devolvido por ela.
O termo tem três partes:
| Parte | O que é |
|---|---|
| Termo | Titular dos dados (subject), tipo, provedor, vigência, status e o token do provedor. |
| Documento | O texto que o trabalhador lê e aceita (document), com hash para comprovar que não foi alterado. |
| Assinaturas | Cada aceite do trabalhador vira um envelope de assinatura eletrônica já concluído, com signatário, papel e evidências técnicas do aceite. Ver Assinatura Eletrônica. |
Duas rotas base participam desta jornada:
| Rota base | Papel nesta jornada |
|---|---|
v5/loan-private-payrolls | POST /terms cria o termo já configurado para o consignado privado (tipo, provedor, título fixos) e, se o aceite vier junto, o assina e o envia à Dataprev em segundo plano. |
v5/authorization-terms | Assinatura de um termo já criado (POST /{id}/sign) e leitura por id ou por key. |
Autenticação
Todos os endpoints exigem API Key (X-Api-Key). A criação exige permissão de criação de termos; a assinatura exige permissão de assinatura de termos; as leituras exigem permissão de leitura. Ver Autenticação.
Rotas implementadas
| Rota | Verbo | Resumo |
|---|---|---|
/v5/loan-private-payrolls/terms | POST | Cria o termo de consulta de dados do trabalhador com status Pendente. Com signatures, registra o aceite e dispara a autorização na Dataprev. |
/v5/authorization-terms/{id}/sign | POST | Registra o aceite (assinatura) de um termo já criado. Num termo Pendente da Dataprev, dispara a autorização. |
/v5/authorization-terms/{id} | GET | Obtém um termo pelo id. |
/v5/authorization-terms/key/{key} | GET | Obtém um termo pela key pública. |
Convenções gerais reutilizadas nesta página: Tratamento de erros, Objeto de domínio, Campo de status.
Ciclo de vida
aceite (signatures na criação, /sign ou jornada)
pending ───────────────────────────────────────────────► Dataprev em segundo plano ──► active
│ └──► rejected
└── trabalhador recusa a jornada ──► rejected
| Etapa | O que acontece |
|---|---|
| 1. Criação | A API monta o termo com type = private_payroll_data_inquiry, provider = dataprev, título fixo "Consulta dos Vínculos Empregatícios do Trabalhador." e status = pending. Se nenhum texto for enviado em document, o texto do termo é gerado pela plataforma (modelo da empresa ou texto padrão), com hash calculado. |
| 2. Aceite | O aceite do trabalhador pode chegar de três formas: em signatures na própria criação; depois, por POST /v5/authorization-terms/{id}/sign; ou pela jornada de aceite, um link enviado ao trabalhador para que ele mesmo leia e aceite o termo. Cada aceite é registrado como um envelope de assinatura concluído e listado em signatures. O termo continua pending até a Dataprev responder. |
| 3. Autorização na Dataprev | Com o aceite registrado, a API registra a autorização digital na Dataprev em segundo plano, com o CPF do subject e o nid do termo como chave identificadora. Quando a Dataprev autoriza, o termo passa a active, com token preenchido e expiresAt convertido do horário de Brasília para UTC, e o evento authorization_term.activated é publicado. Se a Dataprev recusar, o termo passa a rejected, com o motivo em status.note, e o evento authorization_term.rejected é publicado. Falhas temporárias do provedor são repetidas automaticamente. |
Um termo criado sem signatures fica pending indefinidamente: a autorização na Dataprev só é disparada quando o aceite é registrado. Envie o aceite na criação ou depois, por POST /v5/authorization-terms/{id}/sign.
Quando o aceite deve ser dado pelo próprio trabalhador, a operação gera uma jornada do tipo authorization_term_acceptance para o termo (POST /v5/journeys com sourceId = id do termo). O trabalhador recebe um link (e-mail ou SMS), lê o texto integral do termo e confirma. O aceite é registrado com IP, navegador e, quando permitida, a geolocalização do acesso, e o evento authorization_term.accepted é publicado — a partir daí o fluxo segue para a Dataprev como nas demais formas de aceite. Se o trabalhador recusar, o termo passa a rejected e o evento authorization_term.rejected é publicado.
Acompanhe a ativação por GET /v5/authorization-terms/{id} ou pelos eventos acima.
Campos da entidade
Todas as rotas desta página devolvem o termo no formato abaixo.
| Campo | Entrada | Tipo | Descrição |
|---|---|---|---|
id | — | string (uuid) | Identificador do termo. É o authorizationTermId das consultas Dataprev. |
nid | — | integer | Identificador numérico interno. Enviado à Dataprev como chave identificadora/NSU da autorização. |
code | — | integer | Código sequencial por empresa. |
key | — | string (uuid) | Chave pública. Permite GET /v5/authorization-terms/key/{key}. |
type | — (fixo private_payroll_data_inquiry) | object (code/key/name) | Tipo do termo. Ver AuthorizationTermType. |
title | — (fixo) | string | "Consulta dos Vínculos Empregatícios do Trabalhador." |
externalId, parentId | — | string | null | Não usados nesta jornada. |
subject | subject | object | Titular dos dados: personType (fixo natural_person), documentType (fixo cpf), documentNumber, name. |
document | document, templateId | object | Texto do termo: title, author (padrão: nome da empresa), contentType, documentKey (modelo e versão usados, quando o texto vem de um modelo), data (texto integral), url, hash, hashAlgorithm, createdAt. |
signatures | signatures | array | Aceites registrados, do mais recente para o mais antigo. Cada item é um envelope de assinatura eletrônica concluído — ver Formato de cada assinatura. |
startsAt | startsAt | string (date-time) | Início da vigência. Padrão: momento da criação. |
expiresAt | expiresAt | string (date-time) | null | Fim da vigência. Sobrescrito pela validade devolvida pela Dataprev. |
token | — | string | null | Token de autorização do provedor. Preenchido pela Dataprev; a API o usa internamente nas consultas. |
provider | — (fixo dataprev) | object (code/key/name) | Provedor. Ver AuthorizationTermProvider. |
status | — | object (Status) | Nasce pending; passa a active após a Dataprev autorizar ou a rejected se ela (ou o trabalhador, na jornada) recusar. Ver AuthorizationTermStatus. |
data | data | array de { key, value } | Dados adicionais livres. |
Formato de cada assinatura
Cada item de signatures é um envelope com provedor internal, já em completed, com um documento (o texto do termo), um signatário por aceite e um requisito ligando os dois. Os campos são os do envelope de assinatura; os mais úteis para o termo:
| Campo | Descrição |
|---|---|
id, code, key | Identificação do envelope. |
provider | Sempre internal: o aceite é registrado pela própria plataforma, sem provedor externo. |
status | completed, com completedAt no momento do aceite. |
documents[] | O texto aceito: feature = authorization_term, type = term, content (texto integral), contentType, hash, hashAlgorithm, url. |
signers[] | Quem aceitou: name, documentType, documentNumber, email, phone, authenticationType, status = signed e signedAt. |
requirements[] | O papel com que o signatário aceitou (role), status = fulfilled, fulfilledAt e a evidência técnica em authenticity (timestamp, ipAddress, sessionId, userAgent, deviceId, fingerprint, latitude, longitude, location, channel, data[]). |
Os valores enviados no aceite em signerRole, authenticationType e authenticity.channel usam os domínios do termo (ver Payload de assinatura) e aparecem no envelope já traduzidos para os domínios equivalentes da assinatura eletrônica — por exemplo, proxy vira attorney, sms_otp vira token_sms e branch vira presential. A tabela completa está em Domínios — Termos de Autorização.
Payload de assinatura
O mesmo objeto de aceite é usado em cada item de signatures na criação e no corpo de POST /v5/authorization-terms/{id}/sign.
Visualizar parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
signer.name | string | Não | Nome do signatário. |
signer.documentNumber | string | Sim | CPF do signatário, somente dígitos. Ausente → 4060017. |
signer.documentType | string | null | Não | Fixado em cpf na criação pelo consignado privado. Em /sign, key do tipo de documento; inválido → 1006009. |
signer.email | string | null | Não | E-mail. |
signer.phone | string | null | Não | Telefone em E.164. |
signerRole | string | null | Não | key de AuthorizationTermSignerRole. Padrão owner. Inválido → 4060010. |
authenticationType | string | null | Não | key de AuthorizationTermAuthenticationType: como o trabalhador confirmou o aceite. Inválido → 4060011. |
location | string | null | Não | Local declarado do aceite. |
signedAt | string (date-time) | null | Não | Momento do aceite. Padrão: authenticity.timestamp ou, na falta dele, o momento do registro. |
authenticity.timestamp | string (date-time) | null | Não | Momento capturado da evidência. Padrão: signedAt. |
authenticity.ipAddress | string | null | Não | IP de origem do aceite. |
authenticity.sessionId | string | null | Não | Sessão da aplicação em que o aceite ocorreu. |
authenticity.userAgent | string | null | Não | Navegador/aplicativo. |
authenticity.deviceId | string | null | Não | Identificador do dispositivo. |
authenticity.fingerprint | string | null | Não | Impressão digital do dispositivo/sessão. |
authenticity.channel | string | null | Não | key de AuthorizationTermChannel. Padrão web na criação pelo consignado privado. Inválido → 4060012. |
authenticity.data | array de { key, value } | null | Não | Evidências adicionais livres. Os itens latitude e longitude (ponto como separador decimal) são gravados como coordenadas da evidência. |
POST /v5/loan-private-payrolls/terms
Cria o termo de autorização para consulta de dados do trabalhador e responde com o termo em pending. Se signatures for enviado, o aceite é registrado na mesma chamada e a autorização na Dataprev é feita em segundo plano; só depois dela o termo fica active, com token e expiresAt preenchidos.
Autenticação: API Key (X-Api-Key). Exige permissão de criação de termos de autorização.
Payload de entrada
Campos enviados pela requisição Criar Termo de Autorização da collection. O mínimo é o titular: sem document, a API gera o texto do termo a partir do modelo padrão da empresa, e o aceite é registrado depois, em POST /v5/authorization-terms/{id}/sign.
Visualizar parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
subject.documentNumber | string | Sim | CPF do trabalhador, somente dígitos. É o CPF enviado à Dataprev. Ausente → 4060005. |
subject.name | string | Sim | Nome completo do titular. |
Outros campos aceitos (não usados na collection)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
document.data | string | null | Não | Texto integral do termo aceito (texto ou HTML). |
document.url | string | null | Não | Endereço do arquivo (PDF) do termo. |
document.contentType, document.hash, document.hashAlgorithm, document.author, document.documentKey, document.createdAt | string | null | Não | Metadados do texto. Sem hash, ele é calculado a partir de data. |
templateId | string | null | Não | id ou key de um modelo de termo de autorização da empresa. Quando informado, o texto do termo é gerado a partir dele e substitui document.data/document.url. Não encontrado → 1172001; de outro tipo → 1172016; inativo → 1172015. |
signatures | array | null | Não | Aceites do trabalhador, no formato do Payload de assinatura. Sem ele, o termo fica pending aguardando o aceite. |
startsAt | string (date-time) | null | Não | Início da vigência. Padrão: agora. |
expiresAt | string (date-time) | null | Não | Fim da vigência. Sobrescrito pela Dataprev. expiresAt anterior ou igual a startsAt → 4060015. |
data | array de { key, value } | null | Não | Dados adicionais livres. |
authorizationTermId | string (uuid) | null | Não | Ignorado nesta rota. Usado apenas por POST /v5/private-payroll-employment-relationships para reaproveitar um termo. |
status | string | null | Não | Mantenha o padrão pending: só termos pending são enviados à Dataprev. Inválido → 4060003. |
token | string | null | Não | Não envie: o token válido é sempre o devolvido pela Dataprev. |
userId | string | null | Não | Usuário responsável, quando diferente do autenticado. |
personType, documentType, type, provider, title e document.title são fixados pela API e não precisam ser enviados.
Texto do termo. Se nem document.data nem document.url forem enviados e não houver templateId, a API usa o modelo padrão de termo de autorização da empresa, se houver um configurado; senão, gera um texto padrão de autorização de consulta de vínculo, margem e saldo FGTS em nome do titular. Em todos os casos o texto final fica em document.data, com hash.
Exemplo de Requisição e Resposta
- Body
- cURL
- 201 - Created
- 400 - Erro
- 401 - Não autorizado
- 403 - Proibido
Visualizar Body
{
"subject": {
"documentNumber": "{{workerCpf}}",
"name": "{{workerName}}"
}
}
curl --request POST \
--url '{{baseUrl}}/v5/loan-private-payrolls/terms' \
--header 'X-Api-Key: {{x_api_key}}' \
--header 'Content-Type: application/json' \
--data '{
"subject": {
"documentNumber": "{{workerCpf}}",
"name": "{{workerName}}"
}
}'
Termo recém-criado a partir do body da collection: pending, ainda sem aceite (signatures vazio) e com token e expiresAt nulos. O texto do termo foi gerado pelo modelo padrão. O aceite é registrado em seguida, em POST /v5/authorization-terms/{id}/sign.Visualizar Response
Validação do termo (4060003, 4060004, 4060005, 4060015), do aceite (4060010, 4060011, 4060012, 4060017) ou do modelo (1172001, 1172015, 1172016); ou exceção não tratada (9999999). A recusa da Dataprev não volta nesta chamada: ela chega depois, com o termo em rejected.Visualizar Response
Token ausente, inválido ou expirado.Visualizar Response
Usuário autenticado sem permissão de criação de termos. Corpo vazio (ver Tratamento de erros).
POST /v5/authorization-terms/{id}/sign
Registra o aceite de um termo já criado — por exemplo, um termo criado sem signatures cujo aceite foi colhido depois. O aceite vira um novo envelope de assinatura concluído, inserido no início de signatures.
Num termo do consignado privado em pending, o aceite dispara a autorização na Dataprev em segundo plano, exatamente como na criação com signatures: a resposta ainda traz o termo pending, e a ativação chega depois. Um termo já active pode receber novos aceites, sem nova autorização na Dataprev.
Autenticação: API Key (X-Api-Key). Exige permissão de assinatura de termos de autorização.
Parâmetros de rota
Visualizar parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string (uuid) | Sim | Identificador do termo. |
Payload de entrada
Campos enviados pela requisição Assinar Termo da collection, na mesma ordem. É o mesmo objeto do Payload de assinatura.
Visualizar parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
signer.name | string | Não | Nome do signatário. |
signer.documentType | string | null | Não | Fixado em cpf na criação pelo consignado privado. Em /sign, key do tipo de documento; inválido → 1006009. |
signer.documentNumber | string | Sim | CPF do signatário, somente dígitos. Ausente → 4060017. |
signer.email | string | null | Não | E-mail. |
signer.phone | string | null | Não | Telefone em E.164. |
signerRole | string | null | Não | key de AuthorizationTermSignerRole. Padrão owner. Inválido → 4060010. |
authenticationType | string | null | Não | key de AuthorizationTermAuthenticationType: como o trabalhador confirmou o aceite. Inválido → 4060011. |
location | string | null | Não | Local declarado do aceite. |
signedAt | string (date-time) | null | Não | Momento do aceite. Padrão: authenticity.timestamp ou, na falta dele, o momento do registro. |
authenticity.timestamp | string (date-time) | null | Não | Momento capturado da evidência. Padrão: signedAt. |
authenticity.ipAddress | string | null | Não | IP de origem do aceite. |
authenticity.sessionId | string | null | Não | Sessão da aplicação em que o aceite ocorreu. |
authenticity.userAgent | string | null | Não | Navegador/aplicativo. |
authenticity.deviceId | string | null | Não | Identificador do dispositivo. |
authenticity.fingerprint | string | null | Não | Impressão digital do dispositivo/sessão. |
authenticity.channel | string | null | Não | key de AuthorizationTermChannel. Padrão web na criação pelo consignado privado. Inválido → 4060012. |
authenticity.data[].key | string | Não | Nome da evidência adicional. latitude e longitude (ponto como separador decimal) são gravados como coordenadas da evidência; os demais pares ficam como dados adicionais do aceite. |
authenticity.data[].value | string | Não | Valor da evidência adicional. |
Outros campos aceitos (não usados na collection)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
subject.documentNumber | string | Sim | CPF do trabalhador, somente dígitos. É o CPF enviado à Dataprev. Ausente → 4060005. |
subject.name | string | Sim | Nome completo do titular. |
document.data | string | null | Não | Texto integral do termo aceito (texto ou HTML). |
document.url | string | null | Não | Endereço do arquivo (PDF) do termo. |
document.contentType, document.hash, document.hashAlgorithm, document.author, document.documentKey, document.createdAt | string | null | Não | Metadados do texto. Sem hash, ele é calculado a partir de data. |
templateId | string | null | Não | id ou key de um modelo de termo de autorização da empresa. Quando informado, o texto do termo é gerado a partir dele e substitui document.data/document.url. Não encontrado → 1172001; de outro tipo → 1172016; inativo → 1172015. |
signatures | array | null | Não | Aceites do trabalhador, no formato do Payload de assinatura. Sem ele, o termo fica pending aguardando o aceite. |
startsAt | string (date-time) | null | Não | Início da vigência. Padrão: agora. |
expiresAt | string (date-time) | null | Não | Fim da vigência. Sobrescrito pela Dataprev. expiresAt anterior ou igual a startsAt → 4060015. |
data | array de { key, value } | null | Não | Dados adicionais livres. |
authorizationTermId | string (uuid) | null | Não | Ignorado nesta rota. Usado apenas por POST /v5/private-payroll-employment-relationships para reaproveitar um termo. |
status | string | null | Não | Mantenha o padrão pending: só termos pending são enviados à Dataprev. Inválido → 4060003. |
token | string | null | Não | Não envie: o token válido é sempre o devolvido pela Dataprev. |
userId | string | null | Não | Usuário responsável, quando diferente do autenticado. |
Regras
- O termo precisa estar
pendingouactivee dentro da vigência (expiresAtnão atingido); caso contrário →4060016. - Termo revogado →
4060014.
Exemplo de Requisição e Resposta
- Body
- cURL
- 201 - Created
- 400 - Erro
- 401 - Não autorizado
- 403 - Proibido
Visualizar Body
{
"signer": {
"name": "{{workerName}}",
"documentType": "cpf",
"documentNumber": "{{workerCpf}}",
"email": "trabalhador@exemplo.com",
"phone": "+5511900000000"
},
"signerRole": "owner",
"authenticationType": "opt_in",
"location": "São Paulo/SP",
"signedAt": "2026-10-19T12:05:00Z",
"authenticity": {
"timestamp": "2026-10-19T12:05:00Z",
"ipAddress": "203.0.113.10",
"sessionId": "sess-8f3a2c",
"userAgent": "Mozilla/5.0 (Linux; Android 14) Chrome/128",
"deviceId": "dev-a1b2c3",
"fingerprint": "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2",
"channel": "mobile",
"data": [
{
"key": "latitude",
"value": "-23.5505"
},
{
"key": "longitude",
"value": "-46.6333"
},
{
"key": "nsu",
"value": "123456988"
}
]
}
}
curl --request POST \
--url '{{baseUrl}}/v5/authorization-terms/{{termId}}/sign' \
--header 'X-Api-Key: {{x_api_key}}' \
--header 'Content-Type: application/json' \
--data '{
"signer": {
"name": "{{workerName}}",
"documentType": "cpf",
"documentNumber": "{{workerCpf}}",
"email": "trabalhador@exemplo.com",
"phone": "+5511900000000"
},
"signerRole": "owner",
"authenticationType": "opt_in",
"location": "São Paulo/SP",
"signedAt": "2026-10-19T12:05:00Z",
"authenticity": {
"timestamp": "2026-10-19T12:05:00Z",
"ipAddress": "203.0.113.10",
"sessionId": "sess-8f3a2c",
"userAgent": "Mozilla/5.0 (Linux; Android 14) Chrome/128",
"deviceId": "dev-a1b2c3",
"fingerprint": "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2",
"channel": "mobile",
"data": [
{
"key": "latitude",
"value": "-23.5505"
},
{
"key": "longitude",
"value": "-46.6333"
},
{
"key": "nsu",
"value": "123456988"
}
]
}
}'
O termo completo, no mesmo formato do 201 de POST /v5/loan-private-payrolls/terms. Resposta resumida:Visualizar Response
Termo não encontrado ou fora do nível de acesso (4060001); termo revogado (4060014); fora de status ou vigência para aceite (4060016); validação do aceite (4060010, 4060011, 4060012, 4060017, 1006009); ou exceção não tratada (9999999).Visualizar Response
Token ausente, inválido ou expirado.
Usuário autenticado sem permissão de assinatura de termos. Corpo vazio.
GET /v5/authorization-terms/{id}
Retorna um termo pelo id. Use para verificar status, validade e token antes de reaproveitar um termo em novas consultas.
Autenticação: API Key (X-Api-Key). Exige permissão de leitura de termos de autorização.
Parâmetros de rota
Visualizar parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string (uuid) | Sim | Identificador do termo devolvido na criação. |
Exemplo de Requisição e Resposta
- cURL
- 200 - Sucesso
- 400 - Erro
- 401 - Não autorizado
- 403 - Proibido
curl --request GET \
--url 'https://{base-url}/v5/authorization-terms/00000000-0000-7000-8000-000000000101' \
--header 'X-Api-Key: {api_key}'
Mesmo formato do 201 de POST /v5/loan-private-payrolls/terms. Resposta resumida de um termo já autorizado pela Dataprev:Visualizar Response
Termo não encontrado ou fora do nível de acesso (4060001); ou exceção não tratada (9999999).Visualizar Response
Token ausente, inválido ou expirado.
Usuário autenticado sem permissão de leitura de termos. Corpo vazio.
Interpretação do status
status.key | Significado | O que fazer |
|---|---|---|
pending sem signatures | Criado, aguardando o aceite do trabalhador. Nada foi enviado à Dataprev. | Registre o aceite por POST /v5/authorization-terms/{id}/sign ou pela jornada de aceite. |
pending com signatures | Aceite registrado, aguardando a autorização da Dataprev em segundo plano. token e expiresAt nulos. | Aguarde a ativação (consulte o termo ou assine authorization_term.activated). |
active | Autorização válida até expiresAt. | Pode ser usado nas consultas. |
expired | Vigência encerrada. | Crie um novo termo. |
revoked | Revogado pelo titular ou pela operação. | Crie um novo termo com novo aceite. |
rejected / canceled | Recusado pela Dataprev ou pelo trabalhador na jornada (motivo em status.note), ou cancelado. | Corrija o motivo, se houver, e crie um novo termo. |
GET /v5/authorization-terms/key/{key}
Retorna um termo pela sua key pública. Alternativa ao id quando a chave foi compartilhada com outro sistema (impressa no documento assinado, embutida em um link de confirmação).
Autenticação: API Key (X-Api-Key). Exige permissão de leitura de termos de autorização.
Parâmetros de rota
Visualizar parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
key | string (uuid) | Sim | Campo key do termo. |
Exemplo de Requisição e Resposta
- cURL
- 200 - Sucesso
- 400 - Erro
- 401 - Não autorizado
- 403 - Proibido
curl --request GET \
--url 'https://{base-url}/v5/authorization-terms/key/00000000-0000-7000-8000-000000000202' \
--header 'X-Api-Key: {api_key}'
O exemplo mostra um termo criado sem aceite (pending, sem signatures, sem token e sem expiresAt):Visualizar Response
Chave não encontrada ou fora do nível de acesso (4060001); ou exceção não tratada (9999999).
Token ausente, inválido ou expirado.
Usuário autenticado sem permissão de leitura de termos. Corpo vazio.