Prosper202 ClickServer has two HTTP APIs. The v3 REST API is the current one. It covers campaigns, clicks, conversions, reports, attribution and the rest of the app, and it is the API the p202 CLI uses. The original v1 reports endpoint is still there for older integrations.
Creating an API key
Both APIs use the same keys. Log in to Prosper202, open My Account > Personal Settings and go to the API keys section. Click Generate an API key (once you have a key, the button reads Generate key). Each key can be revealed, copied or revoked from the same section.
One key per integration
Create a separate key for every app, script or agent that calls the API. When you no longer need one, revoke its key. Anything still using that key is refused from the next request, and your other keys keep working.
A key made on the Personal Settings page has no scope limit and acts as its user. To give a script or an AI agent less, create a scoped key with p202 user apikey create --scope or POST /api/v3/users/{id}/api-keys. A scope such as read or reports:read narrows what the key can do. Scoped keys work only with the v3 API; the v1 endpoint refuses them.
Treat keys like passwords. Anyone holding one can read your data, and a full-access key can change it.
REST API v3
The base URL is your tracking domain followed by /api/v3/:
https://your-domain.com/api/v3/
Requests and responses are JSON. Money and counts come back as JSON numbers. A body field the endpoint doesn’t take, or a value that doesn’t fit its field, is refused with a 422 that names it, never skipped. On reports, clicks, conversions, LTV and attribution reads, time_from and time_to take unix seconds, a date such as 2026-10-01 (in the account’s time zone), or a time with its offset, such as 2026-10-01T09:30:00Z.
Authentication
Send your key as a bearer token in the Authorization header of every request:
Authorization: Bearer YOUR_API_KEY
A missing or unknown key gets 401. A scoped key that doesn't cover the route gets 403, with a message naming the scope it needs. For a role that can’t see campaign data, reports, clicks and conversions answer with the money and counts as null beside "masked": true, as the web UI hides them. GET /api/v3/system/health and GET /api/v3/versions answer without a key.
Example: list your campaigns
curl https://your-domain.com/api/v3/campaigns \
-H "Authorization: Bearer YOUR_API_KEY"
The campaigns come back in data. pagination gives total, limit and offset. Add ?limit= (50 by default, up to 500) and &offset= to page through a long list.
GET /api/v3/ with your key returns a map of every endpoint group.
What the v3 API covers
| Area | Paths under /api/v3 | What you can do |
|---|---|---|
| Setup | /campaigns, /aff-networks, /ppc-networks, /ppc-accounts, /trackers, /landing-pages, /text-ads, /rotators | Create, read, update and delete your campaign setup, including rotator rules, and get its tracking links, landing page code and postback URLs. All but rotators also take /bulk-upsert. |
| Traffic | /clicks, /conversions, /events | Read clicks, list, record and delete conversions, send events from your own backend, and do the Update section’s jobs: past clicks’ cost, converted subids and revenue uploads. |
| Reports | /reports/summary, /reports/breakdown, /reports/timeseries, /reports/daypart, /reports/weekpart, /reports/groups | Pull the numbers behind the report screens. |
| Attribution | /attribution/... | Models, credited reports, conversion journeys, the worker queue and exports. See Attribution below. |
| Goals | /goals | Define goals, such as an opt-in or a sale, each with its own payout, and attach them to campaigns. |
| Customer value | /ltv/... | Customers, companies, revenue, subscriptions, products, cohorts, MRR and predictions, plus outbound webhooks. |
| Forecasts | /forecast-events | Record dated events, such as a sale or a holiday, and the effect you expect them to have on your forecasts. |
| Apps | /apps | Register iOS and Android apps, read SKAdNetwork and AdAttributionKit postbacks and Android installs, and manage SKAN encodings. |
| Users | /users | Users, roles, API keys and preferences. |
| Operations | /system, /sync, /changes, /audit, /staged-changes, /capabilities | Health, cron and error checks, copying setup between installs, reviewing changes an agent proposed, and finding out which features your server supports and which user, roles and scopes your key acts as. |
For every endpoint's fields and options, see the API reference in the Prosper202 source for 1.9.77.
Prefer a command line?
The p202 CLI calls this same API. Point it at your install with p202 config set-url, give it a key with p202 config set-key, and check the connection with p202 whoami. Every command can return JSON, so it works for scripts and AI agents as well as people. The CLI needs Prosper202 ClickServer Pro on the install (a 7-day trial counts); without it, most commands stop with a link to the trial and exit code 6. The REST API itself answers on every install, free or Pro.
Attribution
Attribution lives under /api/v3/attribution. Reading it needs the view_attribution_reports permission. Creating, changing or deleting a model also needs manage_attribution_models. A scoped key needs attribution:read to read and attribution:write to make changes.
| Method | Endpoint | Description |
|---|---|---|
GET | /attribution/models | List your models. Filter by type. |
POST | /attribution/models | Create a model: model_name, model_type (last_touch, first_touch, linear, time_decay or position_based), and optionally weighting_config, lookback_days, status and is_default. |
GET | /attribution/models/{id} | One model. |
PUT | /attribution/models/{id} | Change any of the fields above. A change to the type, weighting or lookback recomputes credit for every conversion. |
DELETE | /attribution/models/{id} | Delete a model. Add ?dry_run=1 to see what would be removed first. |
GET | /attribution/reports/breakdown | Credited conversions and revenue, grouped by group_by (campaign by default). model_id picks a model and compare_model_id adds a second one. |
GET | /attribution/reports/journeys | Journey length and time to convert across your conversions. |
GET | /attribution/conversions/{id}/journey | One conversion's clicks in order, and each model's share of the credit. |
GET | /attribution/queue | The attribution worker's backlog and failures. |
GET, POST | /attribution/exports | List or schedule CSV exports of a breakdown, optionally sent to a webhook. Each export also has GET /{id}, GET /{id}/download, POST /{id}/retry and DELETE /{id}. |
The Multi-touch Attribution QA Runbook shows how to check these results with the p202 CLI.
About
/api/v2/attribution: development builds between 1.9.55 and 1.9.76 had preview attribution endpoints under/api/v2/attribution. No release included them, and 1.9.76 removed them. Use the/api/v3/attributionendpoints above.
Original v1 reports endpoint
The v1 endpoint predates the v3 API. It still works for integrations built against it, but use v3 for anything new.
https://your-domain.com/api/v1/reports/
v1 takes your key in the URL, as the apikey parameter. URLs end up in server logs and browser history, so keep v1 calls server to server, and revoke the key if a URL that contains it gets out.
Methods
The only method is reports, and it is required.
Arguments
Argument name: type (Required) - Specifies the type of report you'd like to run. The current valid values are as follows
- keywords - Keyword report
- ips - IP report
- text_ads - text ad report
- referers - Referrer report
- countries - Country report
- cities - Cities report
- carriers - Carrier and ISP report
- landing_pages - Landing page report
Argument name: apikey (Required) - API key generated in Prosper202 and used for authentication.
Argument name: date_from (Optional) - Start date for the report you’d like to run. If left blank the system will default to the start of the current day. A valid date should be in the following format: mm/dd/yyyy
Argument name: date_to (Optional) - End date for the report you’d like to run. If left blank the system will default to the end of the current day. A valid date should be in the following format: mm/dd/yyyy
Argument name: cid (Optional) - Campaign id to filter your report by. If this is blank, data from all campaigns will be returned.
Argument name: c1,c2,c3,c4 (Optional) - Filters by value stored in the corresponding c1-4 variable. If this is blank, data from all campaigns will be returned.
Example of a validly formatted API call
https://your-domain.com/api/v1/reports/?type=countries&apikey=YOUR_API_KEY&date_from=03/24/2014&date_to=04/27/2014&cid=1&c1=c1var&c2=c2var&c3=c3var&c4=c4var