API de Campanhas
Os exemplos abaixo mostram o cabeçalho no formato de rede
Authorization: P2S-SIGN-V1 API_KEY:TIMESTAMP:SIGNATURE. Para calcular a assinatura no seu código, use o helper signedRequest em Autenticação.Uma campanha é configurada pela sua empresa: nome, vitrine, preços em pontos, categorias, regras de nível e até o nome da moeda. Esta API devolve o que estiver configurado — ela não conhece nenhuma campanha específica.
Como funciona
- Você recebe uma API Key com o escopo
campaigns:read(Admin > Integrações > API Keys) - Seu backend consulta o estado de um ou vários colaboradores (por CPF ou e-mail)
- O SalesOS responde com as campanhas vigentes — os dados da campanha uma vez, e o estado de cada colaborador em seguida
Os metadados da campanha saem uma vez no topo da resposta, não repetidos por pessoa. Num lote de 500 colaboradores isso é a diferença entre uma resposta enxuta e uma de megabytes.
Autenticação
Ambientes
- Produção
- Staging
URL base:
https://api.play2sell.comReferência do endpoint
action: campaign_status e campaign_catalog.
Cada colaborador é identificado por CPF (qualquer formato — os dígitos são normalizados) ou e-mail. Quando os dois vêm, o CPF prevalece.
Ação: campaign_status
As campanhas vigentes da sua empresa e o estado de cada colaborador nelas.Esquema da requisição
string
obrigatório
Deve ser
"campaign_status"array
obrigatório
Lista de referências de colaboradores (máximo 500)
string
CPF, em qualquer formato (
52998224725 ou 529.982.247-25). Deve conter exatamente 11 dígitos.string
E-mail — usado apenas quando o
cpf está ausentestring
Filtra uma campanha específica. Ausente = todas as vigentes.
string
Idioma dos textos configuráveis. Ausente = o padrão da campanha.
Exemplo
Campos da campanha
O nome da moeda é resolvido nesta ordem: o rótulo configurado na campanha, depois a moeda cadastrada para a sua empresa (com singular e ícone), depois
pontos. É o mesmo nome que a página da campanha mostra.Campos do colaborador
Ação: campaign_catalog
O mesmo conteúdo com o recorte de catálogo. Como a vitrine cresce por colaborador, o limite de lote cai para 100.Abrir a página da campanha
Toda campanha vem com um blocoaccess: onde a página dela mora no app do SalesOS e como levar o usuário até lá. É na página que o usuário vê a vitrine e resgata os prêmios, e ela exige usuário autenticado. Há dois caminhos:
Leia
access.url e access.login_url da resposta — não os fixe no seu código. A URL muda por ambiente (produção e staging têm apps diferentes).Entrar de novo pelo provedor da sua empresa
O guia completo desse login (os dois jeitos, o que enviar e as recusas) está em SSO (Single Sign-On). Quando a sua empresa autentica os usuários no próprio provedor de login (OAuth 2.0 / OpenID Connect) e a Play2sell liga esse provedor ao SalesOS, a resposta trazaccess.login_url. Use-o como o link padrão para a página da campanha. Ele resolve o caso em que o usuário precisa se autenticar de novo:
Leia
access.login_url da resposta — não monte a URL no seu código. Ela muda por ambiente e só vem preenchida quando a ligação com o seu provedor está ativa naquele ambiente. Com null, use um dos outros caminhos.Para ativar: a sua empresa cadastra a Play2sell como cliente OAuth 2.0 no seu provedor, um cliente por ambiente, com o endereço de retorno que passamos (
https://auth.play2sell.com/login/callback em produção). Precisamos dos endereços de autorização e de token, do client ID e do secret (por canal seguro) e do identificador estável de cada usuário: o id interno do seu provedor, o CPF ou CNPJ ou o e-mail. Com CPF ou CNPJ, o usuário continua sendo a mesma pessoa no SalesOS mesmo se trocar de e-mail.Modo self (token do usuário do SSO)
Com o token de um usuário que entrou pelo SSO, envieAuthorization: Bearer <jwt> e omita collaborators. A resposta cobre apenas o próprio usuário do token.
Tratamento de erros
400 — VALIDATION_ERROR
400 — VALIDATION_ERROR
Corpo inválido, lote acima do limite, CPF sem 11 dígitos, item sem
cpf e sem email, ou campaign_slug malformado. A lista details indica o index do item.400 — SELF_MODE_NO_COLLABORATORS
400 — SELF_MODE_NO_COLLABORATORS
Uma lista
collaborators foi enviada junto com um token de usuário.403 — FORBIDDEN
403 — FORBIDDEN
API Key válida, mas sem o escopo
campaigns:read.405 — METHOD_NOT_ALLOWED
405 — METHOD_NOT_ALLOWED
Apenas
POST é aceito.429 — RATE_LIMITED
429 — RATE_LIMITED
Requisições demais nesta hora. Aguarde
retry_after segundos.500 — SERVER_ERROR
500 — SERVER_ERROR
Erro interno. Tente de novo com espera progressiva (2s, 4s, 8s).
Limites de uso
Segurança
- Somente leitura: esta API nunca cria resgates, nem aceita termos, nem altera saldo
- Cada chave pertence a uma única empresa — um CPF de outra empresa responde
found: false, e campanhas de outras empresas nunca aparecem - As requisições são assinadas por HMAC (P2S-SIGN-V1) e registradas para auditoria; documentos nunca são gravados nos logs
Próximos passos
API de Missões
O progresso que gera os pontos gastos aqui
Autenticação
Como criar e gerenciar API Keys

