Skip to main content
PUT
Update goal

Authorizations

X-API-Key
string
header
required

Preferred authentication method. Pass the API key in the X-API-Key HTTP request header. The user account must have api_status enabled.

Path Parameters

offer_id
integer
required

Offer ID.

goal_id
integer
required

Goal ID.

Body

application/json
title
string
Maximum string length: 128
type
integer
status
integer

Goal status to set: 1=active, 3=inactive.

tracking_method
integer
revenue
number
payout
number
conversion_status
integer

Default conversion status: 2=approved, 3=pending, 4=rejected, 5=trash.

multiple_conversions
enum<integer>
Available options:
0,
1
is_private
enum<integer>
Available options:
0,
1
alias
string
Maximum string length: 64
hold_period
string
caps
string
fire_affiliate_postback
enum<integer>
Available options:
0,
1
unique_track_id
enum<integer>
Available options:
0,
1
payout_for_affiliate
string
payoutByCountry
object[]

Per-country payouts. Default goal only — for a non-default goal the key is ignored and the request still returns 200. A non-empty list fully replaces the previous set and turns the "Payout by Country" toggle on; an empty array ([]) clears all per-country payouts and turns the toggle off. Omit the key to leave the current payouts untouched — there is no separate toggle field in the body. Every row must carry amounts (see payout), so a non-empty list always leaves the toggle on. If a goal ends up with both this and payoutByTier enabled, per-country wins wherever the click's country is known; on the conversion paths that gate the country branch on a resolved country, a click whose country could not be resolved falls through to the per-tier payout instead. Enable only one of the two per goal. Row shape: [{"country": 690791, "payout": 5, "revenue": 8}]. Note the read/write asymmetry: GET returns country as an object ({"id": …, "title": …, "code": …}) and each amount as an object ({"value": 5, "mod": "fixed"}), while PUT takes a plain country ID and plain numbers — a GET response cannot be sent back as-is.

payoutByTier
object[]

Per-affiliate-tier payouts. Default goal only — for a non-default goal the key is ignored and the request still returns 200. Any list you send fully replaces the previous set. The "Payout by Tier" toggle then follows the rows that actually carry amounts: it is turned on when at least one row has a non-zero payout or revenue, and turned off otherwise. So an empty array ([]) and a list of amount-less rows ([{"id": 1}]) both clear the per-tier payouts and disable the toggle. Omit the key to leave the current payouts untouched — there is no separate toggle field in the body. Row shape: [{"id": 1, "payout": 6, "revenue": 9}]. Two further limits are worth knowing, because neither produces an error: when a goal ends up with both this and payoutByCountry enabled, per-country takes precedence and the per-tier amounts normally go unused — except on the conversion paths that gate the country branch on a resolved country, where a click with an unresolved country falls through to the per-tier payout, making the effective payout depend on geo resolution. Enable only one of the two per goal. And per-tier payouts are additionally gated by the platform-level affiliate-tiers setting — while that setting is off, stored per-tier payouts are ignored on conversions even though this endpoint accepts and saves them. The read/write asymmetry is also wider here than for payoutByCountry, and it bites on round-trips: GET returns a tier object and {"value": …, "mod": …} amounts instead of plain IDs and numbers, and it lists every tier on the platform, filling in the goal's own payout / revenue wherever a tier has no stored row. Converting that list back into a PUT body would pin a real row to every tier at the goal's current default, after which changing the goal's own payout stops affecting any tier. payoutByCountry has no such behaviour — there GET returns only the stored rows.

Response

Goal updated.

status
string
Example:

"success"

code
integer
Example:

200

name
string
Example:

"OK"

message
string
info
object