API REST segura para cadastrar e manter colaboradores e consultar o consumo registrado no PDV. Autenticação OAuth 2.0, respostas em JSON e limites claros para integrações em lote.
OAuth 2.0 client credentials, tokens RS256 de 15 minutos e escopos por rota.
Pronta para lote
Até 1000 colaboradores por requisição, com transação tudo ou nada.
Reenvio sem duplicar
Header Idempotency-Key em todas as operações de escrita.
Limites claros
120 req/min por cliente, paginação de até 100 itens.
Primeiros passos
Início rápido
Em três passos você faz a primeira chamada à API.
1
Receba suas credenciais
A equipe Turron envia um client_id e um client_secret exclusivos da sua empresa, com os escopos liberados para a sua integração. Guarde o secret em um cofre de segredos — ele não pode ser recuperado, apenas substituído.
2
Gere um access token
Troque as credenciais por um token válido por 15 minutos.
POST /oauth/token
curl -X POST "http://127.0.0.1:6334/oauth/token" \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d "grant_type=client_credentials"
A API usa o fluxo OAuth 2.0 Client Credentials (RFC 6749 §4.4), padrão de mercado para integração entre sistemas. O token é um JWT assinado com RS256 e deve ser enviado em todas as rotas /v1.
15 minValidade do token
BearerTipo do token
5 tentativasBloqueio após falhas (15 min)
Escopos
Cada credencial recebe apenas os escopos necessários. Chamar uma rota sem o escopo retorna 403.
Escopo
Permite
employees:read
Consultar colaboradores
employees:write
Cadastrar e atualizar colaboradores
orders:read
Consultar itens de pedidos
Ciclo de vida do token
Guarde o token em memória e reutilize-o até perto de expires_in.
Ao receber 401, gere um novo token e repita a requisição uma única vez.
Tokens podem ser revogados a qualquer momento pela Turron (troca de secret, desativação ou mudança de escopos).
O acesso pode ser restrito a IPs específicos. Informe à Turron os IPs de saída do seu servidor.
Nunca exponha o client_secret
Use as credenciais apenas no seu back-end. Não as coloque em aplicativos, páginas web, repositórios ou logs. Em caso de vazamento, solicite a rotação imediata.
Ferramentas
Coleção Postman
Baixe o pacote com todas as requisições prontas. O token é gerado e renovado automaticamente pela coleção — basta informar suas credenciais.
Importe o arquivo no Postman em File → Import (ou arraste o arquivo para a janela).
Abra a coleção "Turron · API de Integração" e vá até a aba Variables.
PreenchaclientId e clientSecret na coluna Current value e salve.
Envie qualquer requisição — o token é obtido e renovado sozinho antes de expirar.
Prefere outra ferramenta? A especificação completa está disponível em OpenAPI 3 (JSON) e pode ser importada no Insomnia, Bruno, Swagger Editor ou geradores de SDK.
Endpoints
Autenticação
Troque suas credenciais por um access token de curta duração.
POST/oauth/tokenHTTP Basic
Gera um access token (OAuth 2.0 client credentials)
Envie client_id e client_secret via HTTP Basic (recomendado) ou no corpo. Aceita application/x-www-form-urlencoded ou application/json. O token expira em `expires_in` segundos.
Envie as credenciais via HTTP Basic (recomendado) ou no corpo como client_id e client_secret.
Aceita application/x-www-form-urlencoded (padrão OAuth) ou application/json.
Reutilize o token até expirar (expires_in, em segundos). Não gere um token por requisição.
Corpo (form-urlencoded)
grant_typestringobrigatório
valores: client_credentials
scopestring
Opcional. Escopos separados por espaço para um token com menos permissões.
Requisição
curl -X POST "http://127.0.0.1:6334/oauth/token" \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d "grant_type=client_credentials"
Cadastro e manutenção dos colaboradores. A matrícula (registration) é a chave única do colaborador. Toda alteração é sincronizada automaticamente com os ambientes locais (PDV e catraca).
GET/v1/employeesemployees:read
Lista colaboradores (paginado)
Parâmetros de consulta
pageinteger
padrão: 1 · de 1 a 100000
limitinteger
Itens por página (máx. 100)
padrão: 50 · de 1 a 100
registrationstring
até 15 caracteres
badgestring
até 15 caracteres
namestring
Busca parcial
até 100 caracteres
statusstring
valores: active, inactive
updatedSincedate | date-time
Somente alterados a partir desta data
Requisição
curl -X GET "http://127.0.0.1:6334/v1/employees?page=1&limit=50&status=active" \
-H "Authorization: Bearer $ACCESS_TOKEN"
import requests
response = requests.get(
"http://127.0.0.1:6334/health",
)
data = response.json()
Resposta · 200
{
"status": "ok"
}
Referência
Paginação
Todas as listagens são paginadas. Use page (a partir de 1) e limit (padrão 50, máximo 100). A resposta traz o total e os links da próxima página e da anterior, preservando os filtros.
Para percorrer tudo, siga links.next até ele ser null.
Referência
Idempotência
Operações de escrita aceitam o header opcional Idempotency-Key (8 a 128 caracteres; recomendamos um UUID). Se a rede cair e você reenviar a mesma requisição com a mesma chave, a API devolve a resposta original sem processar de novo — e sinaliza com o header Idempotent-Replayed: true.
A chave vale por 24 horas e é exclusiva da sua credencial.
Reutilizar a chave com um corpo diferente retorna 422.
Se a requisição original falhar, a chave é liberada para uma nova tentativa.
Referência
Limites e rate limit
Recurso
Limite
Requisições por credencial
120 por minuto
Operações em lote (bulk)
10 por minuto
Geração de token (/oauth/token)
10 por minuto por IP
Itens por requisição em lote
1000
Itens por página
100
Período da consulta de pedidos
31 dias
Tamanho do corpo da requisição
2 MB
Toda resposta informa o consumo nos headers x-ratelimit-limit, x-ratelimit-remaining e x-ratelimit-reset. Ao exceder, a API retorna 429 com o header Retry-After (segundos).
Referência
Erros
Os erros seguem o padrão Problem Details (RFC 9457, application/problem+json). O campo errors detalha cada problema de validação, e o requestId identifica a requisição para o suporte (também enviado no header X-Request-Id).
Exemplo · 400
{
"type": "about:blank",
"title": "Requisição inválida",
"status": 400,
"detail": "Um ou mais campos são inválidos.",
"instance": "/v1/employees",
"requestId": "c1c4606b-c22d-4eb3-a56b-619576cc086a",
"errors": [
{
"location": "body",
"field": "registration",
"message": "must have required property 'registration'"
}
]
}
Status
Significado
200 / 201
Sucesso.
400
Requisição inválida: campo ausente, formato incorreto, campo desconhecido ou limite excedido.
401
Token ausente, inválido, expirado ou revogado. Gere um novo token.
403
O token não tem o escopo exigido pela rota, ou o IP de origem não está autorizado.
404
Recurso não encontrado (ex.: matrícula inexistente).
409
Conflito: registro já existe ou requisição com a mesma Idempotency-Key ainda em processamento.
413
Corpo da requisição maior que 2 MB.
422
Não processável: itens repetidos no envio ou Idempotency-Key reutilizada com outro conteúdo.
429
Limite de requisições atingido. Aguarde o tempo indicado no header Retry-After.
500
Erro interno. Informe o requestId ao suporte.
O endpoint /oauth/token segue o formato de erro do OAuth 2.0: {"error": "invalid_client", "error_description": "..."}.
Referência
Boas práticas
Envie apenas os campos documentados, em inglês e com os tipos corretos — campos desconhecidos são rejeitados.
Prefira as rotas /bulk para cargas grandes, em blocos de até 1000 itens.
Use Idempotency-Key em toda escrita para poder reenviar com segurança.
Em 429 ou 5xx, aguarde e tente novamente com backoff exponencial.
Registre o requestId das respostas com erro — ele agiliza o atendimento.
Todas as chamadas são auditadas (credencial, rota, IP e horário).