MeuPonto360 API Docs

Erros e Limites

A API usa códigos HTTP padrão e retorna erros em formato JSON consistente.

Formato do erro

Todos os erros retornam um objeto com statusCode, message e error:

Erro 401
{
  "statusCode": 401,
  "message": "Invalid or expired API key",
  "error": "Unauthorized"
}
Erro 403
{
  "statusCode": 403,
  "message": "Scope required: employees:write",
  "error": "Forbidden"
}
Erro 400 (validação)
{
  "statusCode": 400,
  "message": ["type must be one of the following values: ENTRY, EXIT"],
  "error": "Bad Request"
}

Códigos de status

StatusSignificadoAção recomendada
200OKSucesso. Processar a resposta.
201CreatedRecurso criado. O objeto criado está no body.
204No ContentOperação concluída sem corpo de resposta.
400Bad RequestDados inválidos. Verificar os campos obrigatórios e formatos.
401UnauthorizedAPI Key ausente, inválida, expirada ou revogada. Verifique o header x-api-key.
403ForbiddenChave válida mas sem o escopo necessário. Gere uma nova chave com o escopo correto.
404Not FoundRecurso não encontrado ou não pertence ao tenant.
429Too Many RequestsRate limit excedido. Aguarde e tente novamente. Veja o header Retry-After.
500Internal Server ErrorErro no servidor. Tente novamente. Se persistir, contate o suporte.

Rate Limiting

A API aceita até 60 requisições por minuto por chave de API. Quando o limite é excedido, a resposta tem status 429.

💡
Para operações em lote (ex: importar muitos colaboradores), implemente um retry com backoff exponencial ao receber 429.

Exemplo de retry com backoff

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status !== 429) {
      return response;
    }

    if (attempt === maxRetries) throw new Error('Rate limit excedido após retries');

    const wait = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s
    await new Promise(r => setTimeout(r, wait));
  }
}

Boas práticas

  • Timestamps com fuso: Sempre envie timestamps com offset de fuso horário (ex: 2026-03-16T08:00:00-03:00) para evitar erros de conversão.
  • Escopos mínimos: Crie chaves separadas para cada integração com apenas os escopos necessários.
  • Rotação de chaves: Defina expiração nas chaves e crie um processo de rotação periódica.
  • Paginação: Para tenants com muitos colaboradores, use sempre page e limit para evitar respostas muito grandes.
  • TLS: Use sempre HTTPS. Conexões HTTP não são aceitas em produção.