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.
Looking to manage advertiser campaigns?
The Publisher API on this page is for retrieving offers and publisher reporting. Advertisers can use the separate Campaign API to validate, create, edit, start, and pause self-serve campaigns, including with help from an AI agent.
Read the Advertiser Campaign API guide
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
CPC and boost-click earnings require paid CPAlead Premium membership and enabled CPC API access. Boosted offers 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. Lower offer_rank values show first.
Your CPC API access
Why click rewards may pause
CPC offers and boost-click rewards may be temporarily limited if your traffic generates repeated clicks without enough qualifying CPA or CPI conversions. This helps protect advertisers from bots and invalid traffic.
Native CPC offers and boost-click reward fields are hidden from your API feed during this pause. Qualifying CPA or CPI conversions lift the pause automatically. Eligible conversion offers remain available. Refresh your full offer feed to update availability; other click eligibility checks still apply.
CPC eligibility status
Every successful offers response includes cpc_eligibility, even when no offers match or fields is used. access_enabled shows your account permission. status is not_enabled, eligible, conversion_limited, or unavailable. native_cpc_available and boost_click_rewards_available show whether those rewards are currently available for your account.
Compare these values each time you sync. When they change, refresh the full feed without updated_since and replace your saved offer list. The status does not guarantee a reward for each click; other click checks still apply.
Ranking & Country Payouts
- Each offer includes an offer_rank where 1 is the highest ranked offer. 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".
- Some offers pay by event. If an offer includes an "events" list, use each event name, description, and amount for the completed event. Event amounts are already adjusted to your publisher payout split.
- CPA and CPI offers with conversion_mode=events pay each listed event once. The offer amount is the maximum total reward; events.amount is the reward for that event. Complete events within 30 days of the original click. The daily cap counts new acquisitions on the day of their first paid event.
- CPT (Cost Per Task) offers use screenshot verification. Send visitors to the returned offer link for instructions and My Tasks. Each task pays after approval; the events list shows the publisher rewards. Lockers unlock only after every required task is confirmed.
- Use the same subid or advertising ID when someone returns to an event offer. We reuse the original click and its 30-day deadline. Opening the offer again does not restart it. Direct links without an ID rely on a browser cookie; changing browsers, clearing cookies, or changing tracking domains can lose that identity.
- Use lead_id to credit each reward once. Event callbacks and conversion or reversal records include event_key and event_name. A later event has a new lead_id even when it belongs to the same offer and user.
Offer API Notes
- CPC offers and boost-click rewards through the API are available only to CPAlead Premium Members who have paid the $100 membership fee and have CPC API access enabled.
- 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.
- Use the exact link returned by the API. Do not rebuild CPAlead tracking links from offer IDs in your own system.
- Eligible boost clicks on CPA, CPI, or CPE offers pay $0.10 for US visitors and $0.07 for visitors from other countries. Rewards require remaining boost clicks and are subject to normal click eligibility limits.
- For native CPC offers, cpc_reward_type is native and amount is your click payout. For boosted offers, cpc_reward_type is boost_click and amount remains the conversion payout. boost_click_balance shows the remaining boost clicks. The API returns cpc_payout_us, cpc_payout_not_us, or both, based on the offer's target countries. These click rewards are paid to the publisher only and do not send publisher postbacks or unlock content through a postback.
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 |
By default this API returns CPA, CPI, CPE, and CPT offers. Native CPC offers and boost-click rewards require paid CPAlead Premium membership and enabled CPC API access. You can request payout types 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:
Use "description" for the short offer description. Use "long_description" when you want the longer marketplace description. |
| include_long_description |
Set this to 0 or false to leave long_description out of the default Offers API response. If your fields list includes long_description, it will still be returned.
&include_long_description=0
|
| offerwall_offers | Deprecated. Ignored. The offers API only returns API-safe offers and does not return offerwall-only or other tools-only inventory. |
| 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 lets you pass extra data into CPAlead tracking links. CPAlead stores the value with clicks and conversions and returns it in publisher postbacks when available. If you do not pass subid, CPAlead will not add one automatically. Use a user ID, wallet ID, or click reference when you need to credit a specific visitor. You can also use a shared value for a page, site, sub-affiliate, keyword, or traffic source, but shared values are for reporting and segmentation and cannot identify one visitor for rewards. 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
Response example: HTTP 403
Code example
Boost-click response example
Illustrative response for a paid Premium Member with CPC API access. This CPI offer targets the US and Canada, so both boost payout fields are shown. amount is the conversion payout; the CPC fields show potential click rewards.
02
Conversions API
Conversions and Reversals share a request limit.
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
If an API request returns HTTP 429, wait for the number of seconds in Retry-After before trying again. Check X-RateLimit-Limit and X-RateLimit-Remaining, and increase the delay after repeated failures.
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
Conversions and Reversals share a request limit.
Use this API to download your list of bad leads between two dates. Useful for sorting out bad traffic
If an API request returns HTTP 429, wait for the number of seconds in Retry-After before trying again. Check X-RateLimit-Limit and X-RateLimit-Remaining, and increase the delay after repeated failures.
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