This article will cover the following:
Use the Offers API to create offers in bulk, sync your offer catalog into external systems, update payouts or status without logging into the UI, or automate offer lifecycle management as part of an onboarding workflow.
api_key parameter. Find yours under Setup → System Access → API Keys.
Overview
Offers are the foundation of every campaign in CAKE. An offer represents a specific product or service that an advertiser wants promoted, and it defines everything an affiliate needs to participate: the destination URL, payout structure, creative assets, session duration, and conversion rules. Every click, conversion, and commission tracked in CAKE is attributed to an offer.
Each offer belongs to a vertical and can be tagged for flexible filtering. Offers are linked to a single advertiser and can be made available to all affiliates or restricted to a curated group. Payout and revenue values are set at the offer level and can be overridden at the affiliate or creative level.
Offer caps allow you to control spend and conversion volume by setting daily, weekly, or monthly limits. When a cap is reached, CAKE automatically stops serving the offer to affiliates.
Key Concepts
- Offer — A trackable campaign unit representing a product or service. Contains the tracking URL, payout rules, and creative assets affiliates use.
- Vertical — A category grouping offers by industry (e.g., Finance, Health, Insurance). Used for filtering and reporting.
- Payout — The amount the network pays an affiliate per qualifying conversion.
- Revenue — The amount the advertiser pays the network per conversion.
- Payout Type — How affiliate compensation is calculated: CPA (fixed per action), CPS (% of sale), CPC (per click), or CPM (per thousand impressions).
- Session Hours — Duration in hours during which a cookie remains valid for conversion attribution after a click.
- Offer Cap — A configurable limit on conversions or clicks over a defined time interval to control spend.
- Offer Status — Controls visibility and availability: Active, Paused, Pending, Expired.
- Tag — A user-defined label applied to offers for custom grouping and segmentation.
- Expiration Date — An optional date after which CAKE automatically marks the offer as expired.
Available Actions
Available Actions
Get Offers
Returns a list of offers matching the specified filter criteria. Use this endpoint to retrieve your full offer catalog, filter by status or vertical, or look up a specific offer by ID.
GET /api/2/offers.json
| Parameter | Type | Required | Description |
|---|---|---|---|
| api_key | string | Yes | Your CAKE API key. |
| offer_id | integer | No | Filter to a single offer by its unique CAKE offer ID. |
| offer_status | string | No | Filter by status: active, paused, pending, expired. |
| vertical_id | integer | No | Filter offers belonging to a specific vertical. |
| tag_id | integer | No | Filter offers associated with a specific tag ID. |
| start_at_row | integer | No | Row offset for pagination. Defaults to 0. |
| row_limit | integer | No | Maximum records to return. Default 100, max 5000. |
| sort_field | string | No | Field to sort by (e.g. offer_name, offer_id). |
| sort_descending | boolean | No | Set true for descending sort. Default false. |
Sample request
GET https://yourdomain.cakemarketing.com/api/2/offers.json?api_key=YOUR_API_KEY&offer_status=active&vertical_id=3&row_limit=50&start_at_row=0&sort_field=offer_name&sort_descending=falseSample response
{
"request_status": "Success",
"response": {
"offers": [
{
"offer": {
"offer_id": 12345,
"offer_name": "Auto Insurance Quote - US",
"offer_status": "active",
"vertical": { "vertical_id": 3, "vertical_name": "Insurance" },
"advertiser": { "advertiser_id": 101, "advertiser_name": "SafeDrive Insurance Co." },
"offer_url": "https://safedrive.example.com/quote",
"payout": 18.50,
"payout_type": "CPA",
"revenue": 22.00,
"currency": "USD",
"session_hours": 24,
"expiration_date": "2026-12-31",
"tags": [{ "tag_id": 8, "tag_name": "auto" }]
}
}
],
"total_rows": 1
}
}offer_id values as your primary key — offer names can change, but IDs are permanent.
Create Offer
Creates a new offer in CAKE. Use this endpoint to programmatically onboard offers when new advertiser products are added in an external system, eliminating manual UI entry.
POST /api/2/offer.json
| Parameter | Type | Required | Description |
|---|---|---|---|
| api_key | string | Yes | Your CAKE API key. |
| offer_name | string | Yes | Display name for the offer. |
| advertiser_id | integer | Yes | ID of the advertiser running this offer. |
| vertical_id | integer | Yes | Vertical category the offer belongs to. |
| offer_url | string | Yes | The tracking URL affiliates will use. |
| preview_url | string | No | Landing page preview URL for affiliates. |
| offer_status | string | No | active | inactive | pending. Default: active. |
| payout | decimal | No | Affiliate payout amount. |
| payout_type | string | No | cpa | cpc | cpm | revshare |
| revenue | decimal | No | Advertiser revenue amount. |
| revenue_type | string | No | cpa | cpc | cpm | revshare |
| currency_id | integer | No | Currency ID (1 = USD). |
| session_hours | integer | No | Cookie duration in hours. |
| expiration_date | datetime | No | Offer expiry (YYYY-MM-DD HH:MM:SS). |
| offer_description | string | No | Internal description visible to affiliates in their portal. |
Sample request
POST https://yourdomain.cakemarketing.com/api/2/offer.json
{
"api_key": "YOUR_API_KEY",
"offer_name": "Home Warranty Lead - Premium",
"advertiser_id": 101,
"vertical_id": 7,
"offer_url": "https://track.yourdomain.com/aff_c?offer_id={offer_id}&aff_id={aff_id}",
"offer_status": "active",
"payout": 24.00,
"payout_type": "cpa",
"revenue": 30.00,
"currency_id": 1,
"session_hours": 24
}Sample response
{
"request_status": "Success",
"offer": {
"offer_id": 12346,
"offer_name": "Home Warranty Lead - Premium",
"offer_status": "active",
"payout": 24.00,
"payout_type": "CPA",
"revenue": 30.00,
"created_date": "2026-06-19 09:15:00"
}
}Update Offer
Updates an existing offer's payout, status, or expiry without touching the CAKE UI — essential for bulk updates or automated campaign management via script.
POST /api/2/update_offer.json
| Parameter | Type | Required | Description |
|---|---|---|---|
| api_key | string | Yes | Your CAKE API key. |
| offer_id | integer | Yes | ID of the offer to update. |
| offer_name | string | No | New display name. |
| offer_status | string | No | active | inactive | pending |
| payout | decimal | No | Updated affiliate payout. |
| revenue | decimal | No | Updated advertiser revenue. |
| expiration_date | datetime | No | New expiry date (YYYY-MM-DD HH:MM:SS). |
Sample request
POST https://yourdomain.cakemarketing.com/api/2/update_offer.json
{
"api_key": "YOUR_API_KEY",
"offer_id": 12345,
"offer_status": "inactive",
"payout": 20.00,
"expiration_date": "2026-09-30 23:59:59"
}Sample response
{
"request_status": "Success",
"offer": {
"offer_id": 12345,
"offer_name": "Auto Insurance Quote - US",
"offer_status": "inactive",
"payout": 20.00,
"expiration_date": "2026-09-30 23:59:59"
}
}You may also be interested in:
If you have any questions, please reach out to your dedicated CAKE Client Success Manager/Account Manager or contact the CAKE Support Team at support@getCAKE.com.