Skip to main content
POST
/
cpl
/
orders
Create a CPL order.
curl --request POST \
  --url https://studio-api.onlytraffic.com/api/external/v1/cpl/orders \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "offer_id": 2,
  "of_account_id": 2,
  "quantity": 2,
  "content_channels": [],
  "auto_renewal": false,
  "auto_renewal_fans": 2,
  "auto_renewal_max_price": 5000,
  "hide_income_stats": false
}
'
{
  "success": true,
  "data": {
    "order_id": "cplo_xxxxxxx"
  }
}

Documentation Index

Fetch the complete documentation index at: https://onlytraffic.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

Pricing is server-side: price_per_fan is computed from the offer plus your tier discount, so the caller does not set it. We recommend running GET /cpl/orders/quote first with the same body to preview cost and eligibility before committing.

Authorizations

X-API-Key
string
header
required

Your API key from the Studio Dashboard

Body

application/json
offer_id
integer
required
Required range: x >= 1
of_account_id
integer
required

Numeric id of one of your linked OF accounts.

Required range: x >= 1
quantity
integer
required

Number of fans to deliver. Must fall inside the offer's [min_quantity, max_quantity] range.

Required range: x >= 1
campaign_type
enum<string>
required
Available options:
free,
paid,
paid_trial
approved_cpl_terms
enum<boolean>
required

Must be true. Attests acceptance of the CPL placement terms for this request.

Available options:
true
trial_days
enum<integer>

Required when campaign_type=paid_trial. Must be in the offer's trial_days_available set.

Available options:
1,
3,
7,
14,
30,
90,
180,
360
content_channels
enum<string>[]

Optional filter. When omitted, every live channel on the model is used. When set, the order uses only the listed channels (intersected with the live ones).

Available options:
lifestyle,
tiktok,
lingerie,
light_nudes,
nudes
auto_renewal
boolean
default:false

When true, the order auto-creates a follow-up of auto_renewal_fans size on completion.

auto_renewal_fans
integer

Required when auto_renewal=true. Number of fans for the auto-renewal order; must fall inside the offer's [min_quantity, max_quantity].

Required range: x >= 1
auto_renewal_max_price
number<float>

Required when auto_renewal=true. Per-fan price cap for the renewal; must be ≥ the server-computed per-fan cost for the requested quantity.

Required range: 0 <= x <= 10000
hide_income_stats
boolean
default:false

When true, ROMI / income on this order is hidden from the partner-facing offer detail.

Response

Created.

success
boolean
data
object