Skip to main content
POST
/
v2
/
offers
{
  "id": "664f1a2b3c4d5e6f7a8b9c0d",
  "slug": "ofr_summer-promo_a1b2c3",
  "name": "Summer Promo",
    "tracking_url": "https://track.example.com/click?offer_id=123",
    "external_platform": "tune",
    "external_id": "4521",
    "advertiser_id": "adv_882",
    "payout": 2.50,
    "payout_type": "cpa",
    "filter_bots": true,
    "status": "active",
    "metadata": {
      "vertical": "health",
      "geo": "US"
    },
    "created_at": "2025-11-01T14:30:00",
    "updated_at": "2025-11-01T14:30:00"
}
Creates a new offer on your account. At minimum, a name and tracking_url are required. You can optionally link the offer to an external affiliate platform such as TUNE or Everflow.

Body Parameters

name
string
required
Display name for the offer. Maximum 255 characters.
tracking_url
string
required
The tracking/click URL for this offer. Must be a valid URL.
external_platform
string
External affiliate platform integration. Accepted values: tune, everflow, or null.
external_id
string
The offer ID on the external platform. Useful for syncing data with TUNE or Everflow.
advertiser_id
string
Advertiser ID associated with the offer.
payout
float
default:"0"
Payout amount for the offer.
payout_type
string
default:"cpa"
Payout model. Accepted values: cpa (cost per action) or cpc (cost per click).
filter_bots
boolean
default:"false"
Whether to enable bot click filtering for this offer. When enabled, suspected bot clicks are flagged and excluded from reporting.
status
string
default:"active"
Initial status of the offer. Accepted values: active or paused.
metadata
object
Custom key-value pairs for storing additional information about the offer. Keys and values must be strings.

Response Fields

success
boolean
Indicates whether the offer was created successfully.
offer
object
The full offer object. See List Offers for the complete field reference.

Examples

cURL
curl -X POST "https://app.tracklysms.com/api/v2/offers" \
  -H "X-Api-Key: trk_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer Promo",
    "tracking_url": "https://track.example.com/click?offer_id=123",
    "external_platform": "tune",
    "external_id": "4521",
    "advertiser_id": "adv_882",
    "payout": 2.50,
    "payout_type": "cpa",
    "filter_bots": true,
    "metadata": {
      "vertical": "health",
      "geo": "US"
    }
  }'
Python
import requests

response = requests.post(
    "https://app.tracklysms.com/api/v2/offers",
    headers={
        "X-Api-Key": "trk_your_api_key_here",
        "Content-Type": "application/json"
    },
    json={
        "name": "Summer Promo",
        "tracking_url": "https://track.example.com/click?offer_id=123",
        "external_platform": "tune",
        "external_id": "4521",
        "advertiser_id": "adv_882",
        "payout": 2.50,
        "payout_type": "cpa",
        "filter_bots": True,
        "metadata": {
            "vertical": "health",
            "geo": "US"
        }
    }
)

data = response.json()
print(data["offer"]["id"])
Node.js
const response = await fetch("https://app.tracklysms.com/api/v2/offers", {
  method: "POST",
  headers: {
    "X-Api-Key": "trk_your_api_key_here",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    name: "Summer Promo",
    tracking_url: "https://track.example.com/click?offer_id=123",
    external_platform: "tune",
    external_id: "4521",
    advertiser_id: "adv_882",
    payout: 2.50,
    payout_type: "cpa",
    filter_bots: true,
    metadata: {
      vertical: "health",
      geo: "US"
    }
  })
});

const data = await response.json();
console.log(data.offer.id);
{
  "id": "664f1a2b3c4d5e6f7a8b9c0d",
  "slug": "ofr_summer-promo_a1b2c3",
  "name": "Summer Promo",
    "tracking_url": "https://track.example.com/click?offer_id=123",
    "external_platform": "tune",
    "external_id": "4521",
    "advertiser_id": "adv_882",
    "payout": 2.50,
    "payout_type": "cpa",
    "filter_bots": true,
    "status": "active",
    "metadata": {
      "vertical": "health",
      "geo": "US"
    },
    "created_at": "2025-11-01T14:30:00",
    "updated_at": "2025-11-01T14:30:00"
}

Error Codes

HTTP StatusError CodeDescription
400missing_nameThe name field was not provided.
400missing_tracking_urlThe tracking_url field was not provided.
400name_too_longThe name exceeds 255 characters.
400invalid_external_platformThe external_platform value is not tune, everflow, or null.
400invalid_payout_typeThe payout_type value is not cpa or cpc.
400invalid_statusThe status value is not active or paused.
401unauthorizedAPI key is missing or invalid.
500server_errorAn unexpected error occurred on the server.

Next Steps

Offers Overview

Learn about offer management

Record Revenue

Track revenue for your offers