Campaigns API
Examples below show the wire-format
Authorization: P2S-SIGN-V1 API_KEY:TIMESTAMP:SIGNATURE header. To compute the signature in your code, use the signedRequest helper in Authentication.A campaign is configured by your company: name, catalog, prices in points, categories, level rules and even the currency name. This API returns whatever is configured — it knows no specific campaign.
How It Works
- You get an API Key with the
campaigns:readscope (Admin > Integrations > API Keys) - Your backend asks for the state of one or many collaborators (by CPF or email)
- SalesOS answers with the running campaigns — campaign data once, then each collaborator’s state
Campaign metadata comes back once at the top, not repeated per person. On a 500-collaborator batch that is the difference between a lean response and a multi-megabyte one.
Authentication
Environments
- Production
- Staging
Base URL:
https://api.play2sell.comEndpoint Reference
action field: campaign_status and campaign_catalog.
Each collaborator is identified by CPF (any format — digits are normalized) or email. When both are sent, CPF wins.
Action: campaign_status
Your company’s running campaigns and each collaborator’s state in them.Request Schema
string
required
Must be
"campaign_status"array
required
Array of collaborator references (max 500)
string
CPF, any format (
52998224725 or 529.982.247-25). Must contain exactly 11 digits.string
Email — used only when
cpf is absentstring
Filter to a single campaign. Absent = every running campaign.
string
Language for the configurable texts. Absent = the campaign’s default.
Example
Campaign fields
Collaborator fields
Action: campaign_catalog
The same content with the catalog cut. Because the catalog grows per collaborator, the batch limit drops to 100.Self mode (federated session)
With a federated user token, sendAuthorization: Bearer <jwt> and omit collaborators. The answer covers only the token’s own user.
Error Handling
400 — VALIDATION_ERROR
400 — VALIDATION_ERROR
Invalid body, batch over the limit, CPF without 11 digits, an item with neither
cpf nor email, or a malformed campaign_slug. The details array points to the item index.400 — SELF_MODE_NO_COLLABORATORS
400 — SELF_MODE_NO_COLLABORATORS
A
collaborators list was sent together with a user token.403 — FORBIDDEN
403 — FORBIDDEN
API key is valid but lacks the
campaigns:read scope.405 — METHOD_NOT_ALLOWED
405 — METHOD_NOT_ALLOWED
Only
POST is accepted.429 — RATE_LIMITED
429 — RATE_LIMITED
Too many requests this hour. Wait
retry_after seconds.500 — SERVER_ERROR
500 — SERVER_ERROR
Internal server error. Retry with exponential backoff (2s, 4s, 8s).
Rate Limits
Security
- Read-only: this API never creates redemptions, accepts terms, or changes balances
- Each key is scoped to a single company — a CPF from another company answers
found: false, and other companies’ campaigns never appear - Requests are HMAC-signed (P2S-SIGN-V1) and logged for audit; documents are never written to logs
Next Steps
Missions API
The progress that generates the points spent here
Authentication
How to create and manage API Keys

