CPAlead Publisher API
Publisher API Documentation
Use these APIs to pull offers, check conversions, and download reversals. If you want, you can also use the OpenAPI file below with your own API tools.
This page is public. Replace placeholder values like
{PUBLISHER_ID}
and
{API_KEY}
with your own values after you sign in.
Overview
What this API is designed for
Offer Sync
Pull available offers, filter by device or country, and use
updated_since
for incremental refreshes.
Tracking Safety
The Offers API never returns native CPC offers. Boost-click offers can appear, but they keep their normal rank.
OpenAPI File
The public OpenAPI file is available at /api/openapi.json .
01
Offers API
Returns a JSON list of available offers. Featured offers can show first. After that, lower offer_rank values show first.
Ranking & Country Payouts
- Each offer includes an offer_rank where 1 is the highest ranked offer. Featured offers can appear first. After that, results stay in offer_rank order from low to high.
- Some offers pay different amounts depending on the country. If an offer includes a "payouts_per_country" list, use the payout that matches the user's two-letter country code (e.g., US, CA, GB). If their country isn't in the list, use the default payout shown in "amount".
Offer API Notes
- CPC offers are not returned by this API.
- If an offer has boost clicks, it still keeps its normal rank. It is not moved to the top just because it has boost clicks.
- Using the exact link returned by the API keeps the best attribution. If you save or rebuild links in your own system, clicks still work.
Endpoint
https://www.cpalead.com/api/offers?id={PUBLISHER_ID}
Available HTTP query parameters
| HTTP Parameter | Description |
|---|---|
| id | Required. Your publisher ID. |
| country |
Only show offers from country, pass two letter ISO country code Use country=user to get offers for user's country automatically
|
| limit | Limit the number of offers returned. This can make your API calls faster. Default is 2500 and the maximum is 5000. |
| type |
This API does not return CPC offers. By default it returns CPA, CPI, and CPE offers. You can also request CPR with a comma-separated list, for example
&type=cpi,cpe,cpr
|
| updated_since |
Only return offers updated on or after this date. You can use YYYY-MM-DD or a full ISO date and time, for example
&updated_since=2026-04-01T00:00:00Z
|
| fields |
Only return the offer fields you need. Use a comma-separated list, for example
Available fields:
|
| offerwall_offers | Boolean (true|false). Use true if you also want offers that are marked for offerwalls. CPC offers still stay out, and boost-click offers keep their normal rank. |
| device |
Use this only if you are not using automatic device targeting. By default, the API can return all device types. Use this field to only return certain device types. Available values: ios, android, mobile, and desktop. Device may also be a comma-separated list, for example: For getting only CPI / CPE offers (which requires only installation for conversion - use device=ios,android Use |
| subid / subid2 / subid3 |
SubID tracking allows you to send extra data when a user clicks on your affiliate links by passing a tag at the end of your affiliate links, this parameter will automatically fill in the subid in your tracking link. You can use SubIDs to segment leads, optimize campaigns, and improve conversions, here is some examples: Sub-Affiliate IDs, Sources (Organic, PPC, Email etc), Keywords, Locations, etc... A second subid variable for extra data A third subid variable for extra data |
| gaid / idfa |
If you have a Google Advertising ID (GAID) for mobile, use this variable to automatically fill in the gaid on your tracking link If you have a Apple Identifier For Advertisers (IDFA) for mobile, use this variable to automatically fill in the idfa on your tracking link |
| format / callback |
JSON or JSONP format. JSON is default JSONP callback function name. Only used for JSONP format. If using jQuery getJSON, use callback=? and jQuery will automatically fill function name in for you. See JSONP example |
Response example
Code example
02
Conversions API
Limit: 1 request per minute
Conversion API allows you to ping CPAlead to test for conversions, useful for making custom apps. Pass subid in as a subid or ip address, or "user" to have our system use the ip address of the client calling this script (useful for JSONP calls)
For push-type conversion service (Server-to-Server Postback), see our Postback Documentation
Endpoint
https://www.cpalead.com/api/conversions?id={PUBLISHER_ID}&api_key={API_KEY}
Available HTTP query parameters
| HTTP Parameter | Description |
|---|---|
| id | Required. Your publisher ID. |
| api_key | Required. Your API key. |
| subid | Required. Lookup conversion based on subid, pass subid or users ip address, pass "user" to use the ip address of the client calling this script (useful for JSONP calls) |
| offer_id | Optional. Will check for conversion only for this offer (campaign) id |
| format / callback | JSON or JSONP format. JSON is default JSONP callback function name. Only used for JSONP format. If using jQuery getJSON, use callback=? and jQuery will automatically fill function name in for you. See JSONP example |
Response example
03
Reversals API
Limit: 1 request per minute
Use this API to download your list of bad leads between two dates. Useful for sorting out bad traffic
Endpoint
https://www.cpalead.com/api/reversals?id={PUBLISHER_ID}&api_key={API_KEY}
Available HTTP query parameters
| HTTP Parameter | Description |
|---|---|
| id | Required. Your publisher ID. |
| api_key | Required. Your API key. |
| start_date | Starting date to use when pulling bad leads. Format: yyyy-mm-dd |
| end_date | End date to use when pulling bad leads. A maximum of one month can be pulled at a time |
| format / callback | JSON or JSONP format. JSON is default JSONP callback function name. Only used for JSONP format. If using jQuery getJSON, use callback=? and jQuery will automatically fill function name in for you. See JSONP example |
Response example