Skip to main content

Autenticação

Teste requisições assinadas no navegador no Sandbox da API — cole sua API key e secret, e o playground assina as requisições automaticamente.
A API de Integração SalesOS usa o esquema de requisições assinadas P2S-SIGN-V1 no header Authorization. As API Keys têm escopo em um único tenant, são hasheadas com bcrypt e suportam rate limiting e listas de IPs permitidos.

Ambientes

URL Base: https://api.play2sell.comDashboard: https://dashboard.play2sell.comApp: https://app.play2sell.com

Início Rápido

1. Crie uma API Key

Acesse Integracoes > API Keys no Dashboard SalesOS:
  1. Clique em Criar API Key
  2. Nomeie sua chave (ex.: “Sincronização CRM Noturna”, “Integração Formulário Website”)
  3. Selecione o escopo: default:sync
  4. Clique em Criar
  5. Copie os dois valores imediatamente — só são exibidos uma vez:
    • API Key — identificador público, ex. sk_live_a1b2c3d4...
    • API Key Secret — usado para assinar requisições, nunca é enviado pela rede

2. Assine e Envie uma Requisição

Para chamadas server-to-server, monte o header Authorization como P2S-SIGN-V1 API_KEY:TIMESTAMP:SIGNATURE. A SIGNATURE é o HMAC-SHA256 hex de uma cadeia de chaves derivada em 5 passos:
  1. k1 = HMAC_SHA256(key=API_KEY_SECRET, msg=API_KEY)
  2. k2 = HMAC_SHA256(key=k1, msg=TIMESTAMP)
  3. k3 = HMAC_SHA256(key=k2, msg=METHOD)
  4. k4 = HMAC_SHA256(key=k3, msg=PATH)
  5. SIG = HMAC_SHA256_HEX(key=k4, msg=PAYLOAD_SHA256_HEX)
TIMESTAMP é Unix epoch em segundos, válido por 30 segundos. PAYLOAD_SHA256_HEX é o SHA-256 hex em minúsculas do corpo bruto da requisição (use o digest da string vazia e3b0c4...b855 quando não houver body).
Não quer escrever o código de assinatura ainda? O Sandbox da API assina as requisições para você no navegador — cole sua API key e secret, depois clique em Try it out.

3. Verifique a Resposta

Sucesso (200):
Assinatura inválida ou timestamp expirado (401):

Propriedades da API Key


Formatos de Chave

O SalesOS usa dois prefixos de chave para distinguir ambientes:
Use chaves sk_test_ durante o desenvolvimento e testes de integração. Mude para sk_live_ quando for para produção.

Erros de Autenticação

Exemplo: Header Authorization ausente

Exemplo: Assinatura inválida

Uma assinatura que não bate com o que o servidor recalcula — geralmente causada por mudança no body após assinar, divergência na canonicalização do path, ou chave desatualizada:

Exemplo: Timestamp fora da janela de 30s

Exemplo: Chave sem o escopo necessário

Se sua chave possui apenas leads:read mas o endpoint requer default:sync:

Exemplo: Rate limit excedido

O campo retry_after indica quantos segundos aguardar. A janela de rate limit é reiniciada a cada hora.

Rate Limits

Cada API key possui um contador de rate limit independente que é reiniciado a cada hora: Como funciona:
  1. Cada requisição bem-sucedida incrementa o contador
  2. Quando o contador atinge o limite, requisições seguintes retornam 429
  3. O contador é reiniciado para 0 uma hora após a primeira requisição na janela
Tratando rate limits no código:

Boas Práticas de Segurança

Nunca exponha API keys em código client-side. JavaScript no navegador, aplicativos mobile e repositórios públicos podem vazar sua chave. Sempre chame a API SalesOS a partir do seu servidor backend.
  • Use variáveis de ambiente — Armazene SALESOS_API_KEY em variáveis de ambiente ou em um gerenciador de segredos, nunca no código-fonte
  • Rotacione as chaves periodicamente — Crie uma nova chave, atualize sua integração e depois revogue a antiga
  • Use listas de IPs permitidos — Se sua integração roda a partir de IPs fixos, restrinja a chave apenas a esses IPs
  • Monitore o uso — Verifique os logs de uso da API no Dashboard para padrões inesperados
  • Use sk_test_ para desenvolvimento — Chaves de teste isolam seu ambiente de desenvolvimento da produção
  • Revogue chaves comprometidas imediatamente — Acesse Dashboard > Admin > API Keys > Revogar

Exemplo de rotação de chaves


Proximos Passos

Integracao Padrao

Comece a enviar atividades para o SalesOS

API Keys

Gerencie chaves programaticamente