{"openapi":"3.0.3","info":{"title":"ClickGo API Documentation","description":"Public REST API for managing campaigns, creatives, advertisers and reporting data on the network. All endpoints are versioned under `\/api\/v1`.\n\n## Authentication\n\nAll requests must include an API key. Send it on every request using **either** of the following headers:\n\n```\nAuthorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n```\n\n```\nX-API-KEY: mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n```\n\n## How to get an API key\n\n1. Open your ClickGo dashboard in a browser.\n2. Click **Settings** in the menu, then click **Network Settings**.\n3. Go to the **API Keys** tab.\n4. Click **Generate API Key** (or **Reveal API Key** if one already exists) and copy your Current Key.\n\n## Rate Limiting\n\nAll API requests are subject to per-second rate limits based on the role of the API key.\nOnce the limit is reached, the API returns **429 Too Many Requests** with the following body:\n\n```json\n{\n  \"code\": \"rate_limited\",\n  \"message\": \"Too many requests. Please slow down.\"\n}\n```\n\n### Request quotas\n\n| User | Limit |\n|-----------|----------------|\n| Network (Admin) | 60 requests\/second |\n| Publisher | 10 requests\/second |\n| Advertiser | 10 requests\/second |\n\n### Response headers\n\nEvery response includes headers indicating your current quota:\n\n| Header | Description |\n|--------|-------------|\n| `X-RateLimit-Limit` | Maximum requests allowed in the current window |\n| `X-RateLimit-Remaining` | Requests remaining in the current window |\n\nWhen rate-limited (429), two additional headers are included:\n\n| Header | Description |\n|--------|-------------|\n| `Retry-After` | Seconds to wait before retrying |\n| `X-RateLimit-Reset` | Unix timestamp (seconds) when the window resets |\n\n## SDKs\n\n- \ud83d\udcd8 **SDK Setup Guide** \u2014 [clickgo-sdk-setup-guide.pdf](https:\/\/clickgo.com\/docs\/clickgo-sdk-setup-guide.pdf)\n\n## Downloads\n\n- \ud83d\udce5 **Postman Collection** \u2014 [\/docs.postman](.\/docs.postman)\n- \ud83d\udcc4 **OpenAPI 3.0 Spec** \u2014 [\/docs.openapi](.\/docs.openapi)","version":"1.10.0"},"servers":[{"url":"https:\/\/api.stage.clickgotrack.com"}],"tags":[{"name":"Account","description":""},{"name":"Publishers","description":""},{"name":"Publisher Restrictions","description":""},{"name":"Campaigns","description":""},{"name":"Pixels","description":""},{"name":"Groups","description":""},{"name":"Advertisers","description":""},{"name":"Creatives","description":""},{"name":"Managers","description":""},{"name":"Tracking Links","description":""},{"name":"Tracking Domains","description":""},{"name":"Reference Data","description":""},{"name":"Leads","description":""},{"name":"Reporting","description":""},{"name":"Publisher Campaigns","description":""},{"name":"Publisher Postbacks","description":""},{"name":"Publisher Integrations","description":""},{"name":"Publisher Tracking Links","description":""},{"name":"Publisher Tracking Domains","description":""},{"name":"Publisher Reporting","description":""},{"name":"Advertiser Campaigns","description":""}],"components":{"securitySchemes":{"default":{"type":"http","scheme":"bearer","description":"Generate your API key from <b>Network Settings \u2192 API Keys<\/b> in the admin dashboard. Send it as <code>Authorization: Bearer mk_...<\/code> (or via the <code>X-API-KEY<\/code> header)."}}},"security":[{"default":[]}],"x-tagGroups":[{"name":"Account","tags":["Account"]},{"name":"Admin APIs","tags":["Publishers","Publisher Restrictions","Campaigns","Pixels","Groups","Advertisers","Creatives","Managers","Tracking Links","Tracking Domains","Reference Data","Leads","Reporting"]},{"name":"Publisher APIs","tags":["Publisher Campaigns","Publisher Postbacks","Publisher Integrations","Publisher Tracking Links","Publisher Tracking Domains","Publisher Reporting"]},{"name":"Advertiser APIs","tags":["Advertiser Campaigns"]}],"paths":{"\/api\/v1\/account\/info":{"get":{"summary":"Get account info","operationId":"getAccountInfo","description":"Returns details about the authenticated account: the user the API key\nbelongs to (name, email and role) and the network it operates on,\nincluding its currency (what reporting converts to by default, and what\nadvertisers and publishers without their own currency use).\n\nUse this as the first call when integrating \u2014 a successful 200 confirms\nconnectivity, host resolution, API key validity and role assignment in a\nsingle round-trip.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"first_name":"Jane","last_name":"Doe","email":"jane@acme.com","role":"advertiser","network":{"name":"Acme Network","primary_domain":"acme.example.com","currency":"USD"}}},"properties":{"data":{"type":"object","properties":{"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@acme.com"},"role":{"type":"string","example":"advertiser"},"network":{"type":"object","properties":{"name":{"type":"string","example":"Acme Network"},"primary_domain":{"type":"string","example":"acme.example.com"},"currency":{"type":"string","example":"USD"}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}}},"tags":["Account"]}},"\/api\/v1\/admin\/publishers":{"get":{"summary":"List Publishers","operationId":"listPublishers","description":"Returns a paginated list of publishers (affiliates) in your network.\nFilters are flat query parameters.","parameters":[{"in":"query","name":"name","description":"Partial match on first or last name (case-insensitive).","example":"jane","required":false,"schema":{"type":"string","description":"Partial match on first or last name (case-insensitive).","example":"jane"}},{"in":"query","name":"email","description":"Partial match on email address (case-insensitive).","example":"@acme.com","required":false,"schema":{"type":"string","description":"Partial match on email address (case-insensitive).","example":"@acme.com"}},{"in":"query","name":"status","description":"Comma-separated list of statuses. Allowed: `APPROVED`, `DENIED`, `TERMINATED`, `PENDING`.","example":"APPROVED,PENDING","required":false,"schema":{"type":"string","description":"Comma-separated list of statuses. Allowed: `APPROVED`, `DENIED`, `TERMINATED`, `PENDING`.","example":"APPROVED,PENDING"}},{"in":"query","name":"created_after","description":"Return only publishers created on or after this ISO date.","example":"2026-01-01","required":false,"schema":{"type":"string","description":"Return only publishers created on or after this ISO date.","example":"2026-01-01"}},{"in":"query","name":"created_before","description":"Return only publishers created on or before this ISO date.","example":"2026-12-31","required":false,"schema":{"type":"string","description":"Return only publishers created on or before this ISO date.","example":"2026-12-31"}},{"in":"query","name":"group","description":"Comma-separated list of publisher group names, matched case-insensitively.","example":"Tier 1 Partners","required":false,"schema":{"type":"string","description":"Comma-separated list of publisher group names, matched case-insensitively.","example":"Tier 1 Partners"}},{"in":"query","name":"group_id","description":"Comma-separated list of group IDs, as an alternative to `group`. Combining the two selects the union.","example":"4,5","required":false,"schema":{"type":"string","description":"Comma-separated list of group IDs, as an alternative to `group`. Combining the two selects the union.","example":"4,5"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `email`, `first_name`, `last_name`, `status`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `email`, `first_name`, `last_name`, `status`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":12,"company_name":"Acme Media LLC","first_name":"Jane","last_name":"Doe","email":"jane@example.com","status":"approved","manager_id":null,"payment_schedule":"MONTHLY_NET30","payment_currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":12,"company_name":"Acme Media LLC","first_name":"Jane","last_name":"Doe","email":"jane@example.com","status":"approved","manager_id":null,"payment_schedule":"MONTHLY_NET30","payment_currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":12},"company_name":{"type":"string","example":"Acme Media LLC"},"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@example.com"},"status":{"type":"string","example":"approved"},"manager_id":{"type":"string","example":null,"nullable":true},"payment_schedule":{"type":"string","example":"MONTHLY_NET30"},"payment_currency":{"type":"string","example":"USD"},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publishers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"email":{"type":"string","description":"Must not be greater than 255 characters.","example":"zbailey@example.net","nullable":true},"status":{"type":"string","description":"","example":"architecto","nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-11-02T03:04:28","nullable":true},"created_before":{"type":"string","description":"Must be a valid date. Must be a date after or equal to <code>created_after<\/code>.","example":"2052-11-25","nullable":true},"sort":{"type":"string","description":"","example":"created_at","enum":["id","-id","email","-email","first_name","-first_name","last_name","-last_name","status","-status","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true},"group_id":{"type":"string","description":"Must not be greater than 255 characters.","example":"g","nullable":true},"group":{"type":"string","description":"Must not be greater than 1024 characters.","example":"z","nullable":true}}}}}}},"post":{"summary":"Create Publisher","operationId":"createPublisher","description":"Creates a new publisher (affiliate) in your network. The new publisher\nis assigned the default `publisher` role for your network. A random\npassword is generated; publishers cannot log in until you reset their\npassword from the dashboard.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":12,"company_name":"Acme Media LLC","first_name":"Jane","last_name":"Doe","email":"jane@example.com","status":"approved","manager_id":null,"payment_schedule":"MONTHLY_NET30","payment_currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":12},"company_name":{"type":"string","example":"Acme Media LLC"},"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@example.com"},"status":{"type":"string","example":"approved"},"manager_id":{"type":"string","example":null,"nullable":true},"payment_schedule":{"type":"string","example":"MONTHLY_NET30"},"payment_currency":{"type":"string","example":"USD"},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"email":["A user with this email already exists."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"email":{"type":"array","example":["A user with this email already exists."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"company_name":{"type":"string","description":"Optional company name for the publisher. Must not be greater than 255 characters.","example":"Acme Media LLC","nullable":true},"first_name":{"type":"string","description":"Publisher first name. Must not be greater than 255 characters.","example":"Jane"},"last_name":{"type":"string","description":"Publisher last name. Must not be greater than 255 characters.","example":"Doe"},"email":{"type":"string","description":"Publisher email address (must be unique in your network). Must be a valid email address. Must not be greater than 255 characters.","example":"jane@example.com"},"status":{"type":"string","description":"Initial status. Allowed: `APPROVED`, `PENDING`. Defaults to `APPROVED`.","example":"APPROVED","enum":["APPROVED","PENDING"]},"manager_id":{"type":"integer","description":"Optional ID of a publisher manager to assign. Use the Managers endpoint to retrieve valid IDs.","example":null,"nullable":true},"payment_schedule":{"type":"string","description":"Optional payment schedule. Allowed: `MONTHLY_NET15`, `MONTHLY_NET30`, `WEEKLY_NET1`, `WEEKLY_NET2`, `WEEKLY_NET3`, `WEEKLY_NET4`, `WEEKLY_NET5`, `TWICE_WEEKLY`.","example":"MONTHLY_NET30","enum":["MONTHLY_NET15","MONTHLY_NET30","WEEKLY_NET1","WEEKLY_NET2","WEEKLY_NET3","WEEKLY_NET4","WEEKLY_NET5","TWICE_WEEKLY"],"nullable":true},"payment_currency":{"type":"string","description":"ISO 4217 code the publisher is paid in. `null` follows the network currency. Payments already generated keep theirs.","example":"EUR","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"],"nullable":true},"terms_acceptance_required":{"type":"boolean","description":"When `true`, the publisher must accept your network's Terms of Service before using their account: on the set-password page, or on their first sign-in. Defaults to `false`.","example":true}},"required":["first_name","last_name","email"]}}}}}},"\/api\/v1\/admin\/publishers\/{id}":{"get":{"summary":"Get Publisher","operationId":"getPublisher","description":"Returns a single publisher by its ID.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":12,"company_name":"Acme Media LLC","first_name":"Jane","last_name":"Doe","email":"jane@example.com","status":"approved","manager_id":null,"payment_schedule":"MONTHLY_NET30","payment_currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":12},"company_name":{"type":"string","example":"Acme Media LLC"},"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@example.com"},"status":{"type":"string","example":"approved"},"manager_id":{"type":"string","example":null,"nullable":true},"payment_schedule":{"type":"string","example":"MONTHLY_NET30"},"payment_currency":{"type":"string","example":"USD"},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"The requested resource was not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"The requested resource was not found."}}}}}}},"tags":["Publishers"]},"put":{"summary":"Update Publisher","operationId":"updatePublisher","description":"Partially updates a publisher by its ID. Only the\nfields you include in the body are updated. Manager assignment replaces\n(not appends to) any existing manager.\n`PATCH` and `PUT` are both accepted and behave identically.\n\n**Status change emails** \u2014 changing `status` triggers the same automated\nemails as the dashboard: application approved \/ denied, account\nterminated (include `termination_reason` for the email body), and\naccount reinstated (terminated \u2192 approved).","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":12,"company_name":"Acme Media LLC","first_name":"Jane","last_name":"Doe","email":"jane@example.com","status":"approved","manager_id":null,"payment_schedule":"WEEKLY_NET2","payment_currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T13:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":12},"company_name":{"type":"string","example":"Acme Media LLC"},"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@example.com"},"status":{"type":"string","example":"approved"},"manager_id":{"type":"string","example":null,"nullable":true},"payment_schedule":{"type":"string","example":"WEEKLY_NET2"},"payment_currency":{"type":"string","example":"USD"},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T13:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"The requested resource was not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"The requested resource was not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"email":["The email field must be a valid email address."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"email":{"type":"array","example":["The email field must be a valid email address."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"company_name":{"type":"string","description":"Company name for the publisher. Send `null` to remove the company record. Must not be greater than 255 characters.","example":"Acme Media LLC","nullable":true},"first_name":{"type":"string","description":"Publisher first name. Must not be greater than 255 characters.","example":"Jane"},"last_name":{"type":"string","description":"Publisher last name. Must not be greater than 255 characters.","example":"Doe"},"email":{"type":"string","description":"Publisher email address (must be unique in your network). Must be a valid email address. Must not be greater than 255 characters.","example":"jane@example.com"},"status":{"type":"string","description":"Publisher status. Allowed: `APPROVED`, `DENIED`, `PENDING`, `TERMINATED`. Status changes trigger the same automated emails as the dashboard (application approved \/ denied, account terminated \/ reinstated).","example":"APPROVED","enum":["approved","denied","terminated","pending"]},"termination_reason":{"type":"string","description":"Reason shown in the termination email. Only meaningful together with `status: TERMINATED`. Must not be greater than 1000 characters.","example":null,"nullable":true},"manager_id":{"type":"integer","description":"ID of a publisher manager to assign, or `null` to remove the current manager. Use the Managers endpoint to retrieve valid IDs.","example":null,"nullable":true},"payment_schedule":{"type":"string","description":"Payment schedule. Allowed: `MONTHLY_NET15`, `MONTHLY_NET30`, `WEEKLY_NET1`, `WEEKLY_NET2`, `WEEKLY_NET3`, `WEEKLY_NET4`, `WEEKLY_NET5`, `TWICE_WEEKLY`.","example":"MONTHLY_NET30","enum":["MONTHLY_NET15","MONTHLY_NET30","WEEKLY_NET1","WEEKLY_NET2","WEEKLY_NET3","WEEKLY_NET4","WEEKLY_NET5","TWICE_WEEKLY"],"nullable":true},"payment_currency":{"type":"string","description":"ISO 4217 code the publisher is paid in. `null` follows the network currency. Payments already generated keep theirs.","example":"EUR","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"],"nullable":true}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the publisher.","example":12,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/publishers\/{id}\/postbacks":{"get":{"summary":"List Publisher Postbacks","operationId":"listPublisherPostbacks","description":"Returns a paginated list of the publisher's postbacks \u2014 both global\n(fire for all of the publisher's conversions) and campaign-specific.\n\n`delivery_method` says how each one delivers: `url` calls `url`; `meta` sends the\nconversion to a Meta pixel through the Conversions API, using the publisher's Meta\n`business` and the settings in `meta` (both null on a URL postback).","parameters":[{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":9,"type":"campaign","delivery_method":"url","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}","http_method":"GET","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":null,"meta":null,"created_at":"2026-05-01T12:00:00Z"},{"id":10,"type":"global","delivery_method":"meta","url":null,"http_method":"GET","campaign_id":null,"campaign_name":null,"event_id":null,"event_name":null,"conversion_type":"campaign_only","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","event_source_url":"https:\/\/advertiser.example.com\/thank-you","meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":2,"total":2}},"properties":{"data":{"type":"array","example":[{"id":9,"type":"campaign","delivery_method":"url","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}","http_method":"GET","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":null,"meta":null,"created_at":"2026-05-01T12:00:00Z"},{"id":10,"type":"global","delivery_method":"meta","url":null,"http_method":"GET","campaign_id":null,"campaign_name":null,"event_id":null,"event_name":null,"conversion_type":"campaign_only","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","event_source_url":"https:\/\/advertiser.example.com\/thank-you","meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"campaign"},"delivery_method":{"type":"string","example":"url"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}"},"http_method":{"type":"string","example":"GET"},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"all"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"string","example":null,"nullable":true},"meta":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":2},"total":{"type":"integer","example":2}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher not found."}}}}}}},"tags":["Publishers"]},"post":{"summary":"Create Publisher Postback","operationId":"createPublisherPostback","description":"Creates a postback for a publisher, on their behalf. Two scopes are\nsupported via `type`:\n\n- `global` \u2014 fires for every conversion of the publisher. Use\n  `conversion_type` to limit it to base conversions (`campaign_only`,\n  the default), event conversions (`event_only`) or both (`all`).\n- `campaign` \u2014 fires only for conversions of the given `campaign_id`.\n  Optionally scope to a single event with `event_id`.\n\n**Postback URL tokens** \u2014 `url` may contain `{TOKEN}` placeholders that\nare replaced with real values when the postback fires. Tokens are\ncase-insensitive and the URL-encoded form (`%7BTOKEN%7D`) is also\naccepted. Recognized tokens with no value resolve to an empty string;\nunrecognized placeholders are left untouched.\n\n| Token | Description |\n|-------|-------------|\n| `{UID}` | Unique conversion\/click ID |\n| `{CAMPAIGN_ID}` | Campaign ID (aliases: `{OFFER_ID}`, `{OFFER}`, `{CAMPAIGN}`) |\n| `{CREATIVE_ID}` | Creative ID (alias: `{CREATIVE}`) |\n| `{PUBLISHER_ID}` | Publisher ID (aliases: `{AFFILIATE_ID}`, `{AFFILIATE}`, `{PUBLISHER}`) |\n| `{s1}` \u2026 `{s7}` | Sub IDs passed on the tracking link (aliases: `{sub1}`\u2026`{sub7}`, `{SUBID_1}`\u2026`{SUBID_7}`) |\n| `{DEVICE}` | Device type of the click |\n| `{OS}` | Operating system of the click |\n| `{CPA}` | Payout amount of the conversion (two decimals, or three for a fractional cent: `10.00`, `0.015`) |\n| `{ORDER_ID}` | Order\/transaction ID reported on the conversion (aliases: `{TRANSACTION_ID}`, `{TXN_ID}`, `{ORDER}`) |\n| `{ORDER_TOTAL}` | Order total reported on the conversion, in the campaign's currency (alias: `{TOTAL}`) |\n| `{CURRENCY}` | The campaign's currency, which every amount in the postback is in (alias: `{OFFER_CURRENCY}`) |\n| `{TIMESTAMP}` | Unix timestamp of the conversion (aliases: `{TS}`, `{TIME}`) |\n| `{EVENT_ID}` | Event ID (0 for base conversions; alias: `{EVENT}`) |\n| `{EVENT_NAME}` | Event name (`base` for base conversions) |\n| `{USER_AGENT}` | User agent of the click (URL-encoded) |\n| `{USER_IP}` | IP of the click\/conversion (URL-encoded; alias: `{CONVERSION_IP}`) |\n| `{GEO_CITY_NAME}` | City of the click (URL-encoded) |\n| `{GEO_REGION_CODE}` | 2-letter region code of the click (URL-encoded) |\n| `{ANDROID_ID}`, `{ANDROID_ID_MD5}`, `{ANDROID_ID_SHA1}` | Android device identifiers |\n| `{IDFA}`, `{IDFA_MD5}`, `{IDFA_SHA1}` | iOS advertising identifiers |\n| `{GOOGLE_AID}` | Google advertising ID |\n| `{FBCLID}`, `{GCLID}` | Facebook \/ Google click IDs (URL-encoded) |\n\n**Meta delivery**: set `delivery_method` to `meta` to send the conversions to a Meta pixel\nthrough the Conversions API instead of calling a URL. Name one of the publisher's Meta\nbusinesses in `business_id` (`GET \/admin\/publishers\/{id}\/integrations`) and the pixel,\nevent and data mapping in `meta`, and leave `url` out. `meta.custom_data` and\n`meta.user_data` values take the same tokens as a URL. Meta delivery is available on\n`global` and `campaign` postbacks.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":10,"type":"global","delivery_method":"meta","url":null,"http_method":"GET","campaign_id":null,"campaign_name":null,"event_id":null,"event_name":null,"conversion_type":"campaign_only","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","event_source_url":"https:\/\/advertiser.example.com\/thank-you","meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":10},"type":{"type":"string","example":"global"},"delivery_method":{"type":"string","example":"meta"},"url":{"type":"string","example":null,"nullable":true},"http_method":{"type":"string","example":"GET"},"campaign_id":{"type":"string","example":null,"nullable":true},"campaign_name":{"type":"string","example":null,"nullable":true},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"campaign_only"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"object","properties":{"id":{"type":"integer","example":3},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"}}},"meta":{"type":"object","properties":{"pixel_id":{"type":"string","example":"931612345678901"},"pixel_name":{"type":"string","example":"Acme Pixel"},"event_name":{"type":"string","example":"Lead"},"custom_event":{"type":"boolean","example":false},"event_id":{"type":"string","example":null,"nullable":true},"action_source":{"type":"string","example":"website"},"event_source_url":{"type":"string","example":"https:\/\/advertiser.example.com\/thank-you"},"meta_clicks_only":{"type":"boolean","example":true},"paused":{"type":"boolean","example":false},"custom_data":{"type":"array","example":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"items":{"type":"object","properties":{"field":{"type":"string","example":"value"},"name":{"type":"string","example":null,"nullable":true},"value":{"type":"string","example":"{CPA}"}}}},"user_data":{"type":"array","example":[{"field":"external_id","value":"{s1}"}],"items":{"type":"object","properties":{"field":{"type":"string","example":"external_id"},"value":{"type":"string","example":"{s1}"}}}}}},"created_at":{"type":"string","example":"2026-05-02T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"url":["The url must use HTTPS (https:\/\/)."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"url":{"type":"array","example":["The url must use HTTPS (https:\/\/)."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Postback scope. `global` fires for all of the publisher's conversions; `campaign` fires only for the given campaign.","example":"campaign","enum":["global","campaign"]},"url":{"type":"string","description":"Postback URL. Required unless `delivery_method` is `meta`, and not allowed for a Meta postback. Supports `{TOKEN}` placeholders resolved at conversion time: see the endpoint description for the full token list. Must not be greater than 2048 characters.","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}&s1={s1}"},"http_method":{"type":"string","description":"HTTP verb used to fire the postback: `GET` (default) or `POST`. Parameters are sent in the query string either way. Omit to use the default.","example":"GET","enum":["GET","POST"],"nullable":true},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local). Required when `type` is `campaign`. This field is required when <code>type<\/code> is <code>campaign<\/code>.","example":42,"nullable":true},"event_id":{"type":"integer","description":"Optional campaign event ID (tenant-local) to scope the postback to a single event. Only for `campaign` type.","example":null,"nullable":true},"conversion_type":{"type":"string","description":"Which conversions fire a global postback: `all`, `campaign_only` (default) or `event_only`. Only for `global` type.","example":"campaign_only","enum":["all","campaign_only","event_only"],"nullable":true},"include_non_payable":{"type":"boolean","description":"Whether non-payable event conversions also fire the postback. Defaults to false.","example":false,"nullable":true},"delivery_method":{"type":"string","description":"How the postback delivers: `url` (default) calls `url`; `meta` sends the conversion to a Meta pixel through the Conversions API, using one of the publisher's Meta businesses (`business_id`) and the settings in `meta`.","example":"url","enum":["url","meta"],"nullable":true},"business_id":{"type":"integer","description":"The ID of the Meta business to send through, one of the publisher's integrations. Required when `delivery_method` is `meta`.","example":3},"meta":{"type":"object","description":"The Meta settings. Required when `delivery_method` is `meta`.","example":[],"properties":{"pixel_id":{"type":"string","description":"The Meta pixel (dataset) ID, digits only.","example":"931612345678901"},"pixel_name":{"type":"string","description":"The pixel's name, for display only.","example":"Acme Pixel"},"event_name":{"type":"string","description":"One of Meta's standard events (`Lead`, `Purchase`, `CompleteRegistration`, `Subscribe`, ...), or, with `custom_event`, a custom event name of up to 50 letters, numbers, spaces, dots, dashes and underscores.","example":"Lead"},"custom_event":{"type":"boolean","description":"Send `event_name` as a custom event. Defaults to false.","example":false},"event_id":{"type":"string","description":"A token template for the event ID Meta deduplicates on. Leave empty to send the conversion's own ID.","example":"{UID}"},"action_source":{"type":"string","description":"Where the conversion happened: `website`, `email`, `phone_call`, `chat`, `physical_store`, `system_generated` or `other`.","example":"website"},"event_source_url":{"type":"string","description":"The page sent to Meta as the event's URL (tokens allowed). Leave empty to use the campaign's `conversion_page_url`, else each click's landing page. Publishers can't see or change it.","example":"https:\/\/advertiser.example.com\/thank-you"},"meta_clicks_only":{"type":"boolean","description":"Send only conversions whose click came from Facebook or Instagram (it carries an `fbclid` or a valid `fbc`). Defaults to true.","example":true},"paused":{"type":"boolean","description":"Keep the postback but send nothing. Defaults to false.","example":false},"custom_data":{"type":"array","description":"Meta custom_data, one row per field, up to 20 rows. Omitted means none.","example":[[]],"items":{"type":"object","properties":{"field":{"type":"string","description":"`value`, `currency`, `order_id`, `predicted_ltv`, `num_items`, `search_string`, `status`, `content_name`, `content_category`, `content_ids` (comma-separated, sent as a list), `content_type`, `delivery_category`, `item_number`, `net_revenue`, or `custom` for a custom property.","example":"value"},"name":{"type":"string","description":"The property's name (lowercase letters, digits and underscores) when `field` is `custom`.","example":"plan_tier"},"value":{"type":"string","description":"The value, as a token template.","example":"{CPA}"}},"required":["field","value"]}},"user_data":{"type":"array","description":"Meta user_data, one row per field, up to 20 rows. Omitted means none.","example":[[]],"items":{"type":"object","properties":{"field":{"type":"string","description":"`em`, `ph`, `fn`, `ln`, `ge`, `db`, `ct`, `st`, `zp`, `country` or `external_id` (normalized and SHA-256 hashed before sending), or `fbc`, `fbp`, `subscription_id`, `fb_login_id`, `lead_id` (sent as is).","example":"external_id"},"value":{"type":"string","description":"The value, as a token template.","example":"{s1}"}},"required":["field","value"]}}},"required":["pixel_id","event_name","action_source"]}},"required":["type","url"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the publisher.","example":55,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/publishers\/{id}\/postbacks\/{postback_id}":{"put":{"summary":"Update Publisher Postback","operationId":"updatePublisherPostback","description":"Partially updates one of the publisher's postbacks \u2014 send only the fields you want\nto change. Anything you omit keeps its current value, and cross-field rules are\nvalidated against the resulting state. `PATCH` and `PUT` are both accepted and\nbehave identically.\n\nThe `type` can be changed in either direction. Switching to `global` drops the\ncampaign and event; switching to `campaign` requires a `campaign_id`.\n\nOmitting `http_method` keeps the stored verb \u2014 including the implicit `POST` of a\npostback created before the option existed. It does not fall back to the `GET`\ndefault used when creating.\n\nAn omitted `delivery_method` keeps the stored one. Switching to `meta` needs `business_id`\nand `meta` and drops the URL; switching back to `url` needs a `url`. On a Meta postback,\nthe keys you send in `meta` replace those stored and the rest are kept, so\n`{\"meta\":{\"paused\":true}}` pauses it. A list you send (`custom_data`, `user_data`)\nreplaces the stored list.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":10,"type":"global","delivery_method":"meta","url":null,"http_method":"GET","campaign_id":null,"campaign_name":null,"event_id":null,"event_name":null,"conversion_type":"campaign_only","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","event_source_url":"https:\/\/advertiser.example.com\/thank-you","meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":10},"type":{"type":"string","example":"global"},"delivery_method":{"type":"string","example":"meta"},"url":{"type":"string","example":null,"nullable":true},"http_method":{"type":"string","example":"GET"},"campaign_id":{"type":"string","example":null,"nullable":true},"campaign_name":{"type":"string","example":null,"nullable":true},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"campaign_only"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"object","properties":{"id":{"type":"integer","example":3},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"}}},"meta":{"type":"object","properties":{"pixel_id":{"type":"string","example":"931612345678901"},"pixel_name":{"type":"string","example":"Acme Pixel"},"event_name":{"type":"string","example":"Lead"},"custom_event":{"type":"boolean","example":false},"event_id":{"type":"string","example":null,"nullable":true},"action_source":{"type":"string","example":"website"},"event_source_url":{"type":"string","example":"https:\/\/advertiser.example.com\/thank-you"},"meta_clicks_only":{"type":"boolean","example":true},"paused":{"type":"boolean","example":false},"custom_data":{"type":"array","example":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"items":{"type":"object","properties":{"field":{"type":"string","example":"value"},"name":{"type":"string","example":null,"nullable":true},"value":{"type":"string","example":"{CPA}"}}}},"user_data":{"type":"array","example":[{"field":"external_id","value":"{s1}"}],"items":{"type":"object","properties":{"field":{"type":"string","example":"external_id"},"value":{"type":"string","example":"{s1}"}}}}}},"created_at":{"type":"string","example":"2026-05-02T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Postback not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Postback not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"url":["The url must use HTTPS (https:\/\/)."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"url":{"type":"array","example":["The url must use HTTPS (https:\/\/)."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Postback scope. `global` fires for all of the publisher's conversions; `campaign` fires only for the given campaign.","example":"campaign","enum":["global","campaign"]},"url":{"type":"string","description":"Postback URL. Required unless `delivery_method` is `meta`, and not allowed for a Meta postback. Supports `{TOKEN}` placeholders resolved at conversion time: see the endpoint description for the full token list. Must not be greater than 2048 characters.","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}&s1={s1}","nullable":true},"http_method":{"type":"string","description":"HTTP verb used to fire the postback: `GET` (default) or `POST`. Parameters are sent in the query string either way. Omit to use the default.","example":"GET","enum":["GET","POST"],"nullable":true},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local). Required when `type` is `campaign`. This field is required when <code>type<\/code> is <code>campaign<\/code>.","example":42,"nullable":true},"event_id":{"type":"integer","description":"Optional campaign event ID (tenant-local) to scope the postback to a single event. Only for `campaign` type.","example":null,"nullable":true},"conversion_type":{"type":"string","description":"Which conversions fire a global postback: `all`, `campaign_only` (default) or `event_only`. Only for `global` type.","example":"campaign_only","enum":["all","campaign_only","event_only"],"nullable":true},"include_non_payable":{"type":"boolean","description":"Whether non-payable event conversions also fire the postback. Defaults to false.","example":false,"nullable":true},"delivery_method":{"type":"string","description":"How the postback delivers: `url` (default) calls `url`; `meta` sends the conversion to a Meta pixel through the Conversions API, using one of the publisher's Meta businesses (`business_id`) and the settings in `meta`.","example":"url","enum":["url","meta"],"nullable":true},"business_id":{"type":"integer","description":"The ID of the Meta business to send through, one of the publisher's integrations. Required when `delivery_method` is `meta`.","example":3},"meta":{"type":"object","description":"The Meta settings. Required when `delivery_method` is `meta`.","example":[],"properties":{"pixel_id":{"type":"string","description":"The Meta pixel (dataset) ID, digits only.","example":"931612345678901"},"pixel_name":{"type":"string","description":"The pixel's name, for display only.","example":"Acme Pixel"},"event_name":{"type":"string","description":"One of Meta's standard events (`Lead`, `Purchase`, `CompleteRegistration`, `Subscribe`, ...), or, with `custom_event`, a custom event name of up to 50 letters, numbers, spaces, dots, dashes and underscores.","example":"Lead"},"custom_event":{"type":"boolean","description":"Send `event_name` as a custom event. Defaults to false.","example":false},"event_id":{"type":"string","description":"A token template for the event ID Meta deduplicates on. Leave empty to send the conversion's own ID.","example":"{UID}"},"action_source":{"type":"string","description":"Where the conversion happened: `website`, `email`, `phone_call`, `chat`, `physical_store`, `system_generated` or `other`.","example":"website"},"event_source_url":{"type":"string","description":"The page sent to Meta as the event's URL (tokens allowed). Leave empty to use the campaign's `conversion_page_url`, else each click's landing page. Publishers can't see or change it.","example":"https:\/\/advertiser.example.com\/thank-you"},"meta_clicks_only":{"type":"boolean","description":"Send only conversions whose click came from Facebook or Instagram (it carries an `fbclid` or a valid `fbc`). Defaults to true.","example":true},"paused":{"type":"boolean","description":"Keep the postback but send nothing. Defaults to false.","example":false},"custom_data":{"type":"array","description":"Meta custom_data, one row per field, up to 20 rows. Omitted means none.","example":[[]],"items":{"type":"object","properties":{"field":{"type":"string","description":"`value`, `currency`, `order_id`, `predicted_ltv`, `num_items`, `search_string`, `status`, `content_name`, `content_category`, `content_ids` (comma-separated, sent as a list), `content_type`, `delivery_category`, `item_number`, `net_revenue`, or `custom` for a custom property.","example":"value"},"name":{"type":"string","description":"The property's name (lowercase letters, digits and underscores) when `field` is `custom`.","example":"plan_tier"},"value":{"type":"string","description":"The value, as a token template.","example":"{CPA}"}},"required":["field","value"]}},"user_data":{"type":"array","description":"Meta user_data, one row per field, up to 20 rows. Omitted means none.","example":[[]],"items":{"type":"object","properties":{"field":{"type":"string","description":"`em`, `ph`, `fn`, `ln`, `ge`, `db`, `ct`, `st`, `zp`, `country` or `external_id` (normalized and SHA-256 hashed before sending), or `fbc`, `fbp`, `subscription_id`, `fb_login_id`, `lead_id` (sent as is).","example":"external_id"},"value":{"type":"string","description":"The value, as a token template.","example":"{s1}"}},"required":["field","value"]}}},"required":["pixel_id","event_name","action_source"]}}}}}}},"delete":{"summary":"Delete Publisher Postback","operationId":"deletePublisherPostback","description":"Deletes one of the publisher's postbacks by its ID.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Postback deleted."},"properties":{"message":{"type":"string","example":"Postback deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Postback not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Postback not found."}}}}}}},"tags":["Publishers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the publisher.","example":55,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"postback_id","description":"The ID of the postback.","example":9,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/publishers\/{id}\/integrations":{"get":{"summary":"List Publisher Integrations","operationId":"listPublisherIntegrations","description":"Returns the publisher's connected ad platform businesses, as on the Integrations tab of the\npublisher's page. Today that is Meta: a business is a name plus the Conversions API access\ntoken the publisher generated, and postbacks with `delivery_method: meta` send through one\n(`business_id`).\n\nThe token itself is never returned: `has_token` and `token_last4` say whether one is stored.\n`status` is `connected`, `unverified` (Meta couldn't be reached to check the token; sends\nstill go), `needs_attention` (Meta rejected the token, see `status_message`) or\n`awaiting_token` (imported without a token; nothing is sent until one is added).","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":3,"platform":"meta","name":"Acme Ads","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":"2026-05-02T08:30:00+00:00","created_at":"2026-05-01T12:00:00+00:00","postbacks_count":2,"created_by":"Jane Admin"}]},"properties":{"data":{"type":"array","example":[{"id":3,"platform":"meta","name":"Acme Ads","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":"2026-05-02T08:30:00+00:00","created_at":"2026-05-01T12:00:00+00:00","postbacks_count":2,"created_by":"Jane Admin"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":3},"platform":{"type":"string","example":"meta"},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"},"status_label":{"type":"string","example":"Connected"},"status_message":{"type":"string","example":null,"nullable":true},"has_token":{"type":"boolean","example":true},"token_last4":{"type":"string","example":"x9Zq"},"meta_account_name":{"type":"string","example":"Acme Conversions"},"imported_from_everflow":{"type":"boolean","example":false},"checked_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"last_sent_at":{"type":"string","example":"2026-05-02T08:30:00+00:00"},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"postbacks_count":{"type":"integer","example":2},"created_by":{"type":"string","example":"Jane Admin"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher not found."}}}}}}},"tags":["Publishers"]},"post":{"summary":"Connect Publisher Integration","operationId":"connectPublisherIntegration","description":"Connects a Meta business for the publisher, on their behalf: a name and the Conversions API\naccess token generated in Meta Events Manager (the publisher's pixel, then Settings, then\nConversions API). The token belongs to a system user with access to that pixel.\n\nMeta is asked whether the token works. A token Meta rejects answers `422` on `access_token`;\nwhen Meta can't be reached, the business is saved as `unverified` and its first send\nconfirms it. The token is write-only: responses show only its last four characters.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"platform":"meta","name":"Acme Ads","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":null,"created_at":"2026-05-01T12:00:00+00:00","postbacks_count":0,"created_by":"Jane Admin"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"platform":{"type":"string","example":"meta"},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"},"status_label":{"type":"string","example":"Connected"},"status_message":{"type":"string","example":null,"nullable":true},"has_token":{"type":"boolean","example":true},"token_last4":{"type":"string","example":"x9Zq"},"meta_account_name":{"type":"string","example":"Acme Conversions"},"imported_from_everflow":{"type":"boolean","example":false},"checked_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"last_sent_at":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"postbacks_count":{"type":"integer","example":0},"created_by":{"type":"string","example":"Jane Admin"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"access_token":["Meta didn't accept this access token: Invalid OAuth access token."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"access_token":{"type":"array","example":["Meta didn't accept this access token: Invalid OAuth access token."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"A name for the business, unique among the publisher's Meta businesses (any case). Must not be greater than 255 characters.","example":"Acme Ads"},"access_token":{"type":"string","description":"The Conversions API access token generated in Meta Events Manager (pixel, then Settings, then Conversions API). Write-only: responses show only its last four characters. Meta is asked whether it works; one Meta rejects answers 422, and one Meta can't be asked about is saved as `unverified`. Must be at least 20 characters. Must not be greater than 2048 characters.","example":"EAAGm0PX4ZCpsBAxxxxxxxxxxxxxxxx"}},"required":["name","access_token"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the publisher.","example":55,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/publishers\/{id}\/integrations\/{integration_id}":{"get":{"summary":"Get Publisher Integration","operationId":"getPublisherIntegration","description":"Returns one of the publisher's ad platform businesses. The access token is never returned.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"platform":"meta","name":"Acme Ads","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":"2026-05-02T08:30:00+00:00","created_at":"2026-05-01T12:00:00+00:00","postbacks_count":2,"created_by":"Jane Admin"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"platform":{"type":"string","example":"meta"},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"},"status_label":{"type":"string","example":"Connected"},"status_message":{"type":"string","example":null,"nullable":true},"has_token":{"type":"boolean","example":true},"token_last4":{"type":"string","example":"x9Zq"},"meta_account_name":{"type":"string","example":"Acme Conversions"},"imported_from_everflow":{"type":"boolean","example":false},"checked_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"last_sent_at":{"type":"string","example":"2026-05-02T08:30:00+00:00"},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"postbacks_count":{"type":"integer","example":2},"created_by":{"type":"string","example":"Jane Admin"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Integration not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Integration not found."}}}}}}},"tags":["Publishers"]},"put":{"summary":"Update Publisher Integration","operationId":"updatePublisherIntegration","description":"Renames one of the publisher's Meta businesses and\/or replaces its access token. Send only\nwhat changes: an omitted name keeps the current one, and an omitted or empty\n`access_token` keeps the stored token. A new token is checked with Meta as on create, and\nconnects a business that was imported without one. `PATCH` and `PUT` are both accepted\nand behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"platform":"meta","name":"Acme Ads (EU)","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":"2026-05-02T08:30:00+00:00","created_at":"2026-05-01T12:00:00+00:00","postbacks_count":2,"created_by":"Jane Admin"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"platform":{"type":"string","example":"meta"},"name":{"type":"string","example":"Acme Ads (EU)"},"status":{"type":"string","example":"connected"},"status_label":{"type":"string","example":"Connected"},"status_message":{"type":"string","example":null,"nullable":true},"has_token":{"type":"boolean","example":true},"token_last4":{"type":"string","example":"x9Zq"},"meta_account_name":{"type":"string","example":"Acme Conversions"},"imported_from_everflow":{"type":"boolean","example":false},"checked_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"last_sent_at":{"type":"string","example":"2026-05-02T08:30:00+00:00"},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"postbacks_count":{"type":"integer","example":2},"created_by":{"type":"string","example":"Jane Admin"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Integration not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Integration not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"name":["A Meta business with this name already exists."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"name":{"type":"array","example":["A Meta business with this name already exists."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"A new name, unique among the publisher's Meta businesses (any case). Omit to keep the current one. Must not be greater than 255 characters.","example":"Acme Ads (EU)"},"access_token":{"type":"string","description":"A new Conversions API access token. Omit it or send it empty to keep the current token. A new token is checked with Meta like on create, and connects a business imported without one. Must be at least 20 characters. Must not be greater than 2048 characters.","example":null,"nullable":true}}}}}}},"delete":{"summary":"Delete Publisher Integration","operationId":"deletePublisherIntegration","description":"Removes one of the publisher's Meta businesses and erases its access token. Refused with\n`422` while postbacks send through it: delete those postbacks or move them to another\nbusiness first.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Integration deleted."},"properties":{"message":{"type":"string","example":"Integration deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Integration not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Integration not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"integration":["This business is used by 2 postback(s) (#9, #10). Delete them or switch them to another business first."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"integration":{"type":"array","example":["This business is used by 2 postback(s) (#9, #10). Delete them or switch them to another business first."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the publisher.","example":55,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"integration_id","description":"The ID of the integration.","example":3,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/publishers\/{id}\/tracking-domains":{"get":{"summary":"List Publisher Tracking Domains","operationId":"listPublisherTrackingDomains","description":"Returns the dedicated tracking domains assigned to a publisher, as on the Domains\ntab of the publisher's page. Each assignment applies to all of the publisher's\ncampaigns (`scope: publisher`), one campaign or one Smarter Link. The most specific\nassignment wins when the publisher's tracking links are built; without any, the\nnetwork default domain is used.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":4,"domain_id":2,"hostname":"go.example.com","scope":"campaign","campaign_id":42,"campaign_name":"Spring Promo","smarter_link_id":null,"smarter_link_name":null,"created_at":"2026-05-01T12:00:00+00:00","updated_at":"2026-05-01T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":4,"domain_id":2,"hostname":"go.example.com","scope":"campaign","campaign_id":42,"campaign_name":"Spring Promo","smarter_link_id":null,"smarter_link_name":null,"created_at":"2026-05-01T12:00:00+00:00","updated_at":"2026-05-01T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":4},"domain_id":{"type":"integer","example":2},"hostname":{"type":"string","example":"go.example.com"},"scope":{"type":"string","example":"campaign"},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"smarter_link_id":{"type":"string","example":null,"nullable":true},"smarter_link_name":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher not found."}}}}}}},"tags":["Publishers"]},"post":{"summary":"Assign Tracking Domain to Publisher","operationId":"assignTrackingDomainToPublisher","description":"Assigns a dedicated tracking domain to a publisher, as \"Assign Domain\" does on the\npublisher's page. Without `campaign_ids` or `smarter_link_ids` the domain applies to\nall of the publisher's campaigns; otherwise one assignment is created per campaign\nand Smarter Link, and all of them are returned.\n\nA publisher holds one domain per scope. If any requested scope is already assigned,\nnothing is created and the call answers `409` \u2014 update or delete that assignment first.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":4,"domain_id":2,"hostname":"go.example.com","scope":"campaign","campaign_id":42,"campaign_name":"Spring Promo","smarter_link_id":null,"smarter_link_name":null,"created_at":"2026-05-01T12:00:00+00:00","updated_at":"2026-05-01T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":4,"domain_id":2,"hostname":"go.example.com","scope":"campaign","campaign_id":42,"campaign_name":"Spring Promo","smarter_link_id":null,"smarter_link_name":null,"created_at":"2026-05-01T12:00:00+00:00","updated_at":"2026-05-01T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":4},"domain_id":{"type":"integer","example":2},"hostname":{"type":"string","example":"go.example.com"},"scope":{"type":"string","example":"campaign"},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"smarter_link_id":{"type":"string","example":null,"nullable":true},"smarter_link_name":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher not found."}}}}}},"409":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"conflict","message":"This publisher already has a domain assigned for one or more of the selected campaigns. Remove it first."},"properties":{"code":{"type":"string","example":"conflict"},"message":{"type":"string","example":"This publisher already has a domain assigned for one or more of the selected campaigns. Remove it first."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"domain_id":["The default tracking domain is shared and cannot be assigned."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"domain_id":{"type":"array","example":["The default tracking domain is shared and cannot be assigned."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"domain_id":{"type":"string","description":"The ID of the tracking domain, from `GET \/api\/v1\/admin\/tracking-domains`. The network default domain is shared and cannot be assigned.","example":2},"campaign_ids":{"type":"array","description":"","example":null,"items":{"type":"string"}},"smarter_link_ids":{"type":"array","description":"","example":null,"items":{"type":"string"}}},"required":["domain_id"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the publisher.","example":55,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/publishers\/{id}\/tracking-domains\/{assignment_id}":{"put":{"summary":"Update Publisher Tracking Domain","operationId":"updatePublisherTrackingDomain","description":"Changes the domain or the scope of one of the publisher's assignments. Send only what\nchanges: omit `domain_id` to keep the domain, and omit both `campaign_id` and\n`smarter_link_id` to keep the scope. Sending either scope field replaces the scope, so\n`{\"campaign_id\": null, \"smarter_link_id\": null}` makes the assignment publisher-wide.\n\n`PATCH` and `PUT` are both accepted and behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":4,"domain_id":3,"hostname":"click.example.com","scope":"publisher","campaign_id":null,"campaign_name":null,"smarter_link_id":null,"smarter_link_name":null,"created_at":"2026-05-01T12:00:00+00:00","updated_at":"2026-05-02T09:00:00+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":4},"domain_id":{"type":"integer","example":3},"hostname":{"type":"string","example":"click.example.com"},"scope":{"type":"string","example":"publisher"},"campaign_id":{"type":"string","example":null,"nullable":true},"campaign_name":{"type":"string","example":null,"nullable":true},"smarter_link_id":{"type":"string","example":null,"nullable":true},"smarter_link_name":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-05-02T09:00:00+00:00"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Domain assignment not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Domain assignment not found."}}}}}},"409":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"conflict","message":"This publisher already has a domain assigned for all campaigns. Remove it first."},"properties":{"code":{"type":"string","example":"conflict"},"message":{"type":"string","example":"This publisher already has a domain assigned for all campaigns. Remove it first."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"campaign_id":["The campaign id field prohibits smarter link id from being present."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"campaign_id":{"type":"array","example":["The campaign id field prohibits smarter link id from being present."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"domain_id":{"type":"string","description":"The ID of the tracking domain to use instead.","example":3},"campaign_id":{"type":"integer","description":"Scope the assignment to this campaign. Send `null` for both `campaign_id` and `smarter_link_id` to make it publisher-wide. Cannot be combined with `smarter_link_id`.","example":42,"nullable":true},"smarter_link_id":{"type":"integer","description":"Scope the assignment to this Smarter Link instead of a campaign.","example":null,"nullable":true}}}}}}},"delete":{"summary":"Remove Publisher Tracking Domain","operationId":"removePublisherTrackingDomain","description":"Removes one of the publisher's domain assignments. Tracking links in that scope fall\nback to the next most specific assignment, or to the network default domain.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Domain assignment deleted."},"properties":{"message":{"type":"string","example":"Domain assignment deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Domain assignment not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Domain assignment not found."}}}}}}},"tags":["Publishers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the publisher.","example":55,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"assignment_id","description":"The ID of the domain assignment.","example":4,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/custom-rates":{"get":{"summary":"List Custom Rates","operationId":"listCustomRates","description":"Returns the custom rates (payout changes) in your network \u2014 per-publisher\nrates, and rates with `all_publishers: true` that apply to every publisher\non the campaign. Filter by `publisher_id`, `campaign_id` or `event_id` to\nfind the rates that apply to a specific pairing.\n\nA rate may carry a country condition: `countries` (ISO codes) read per\n`country_condition_mode` \u2014 `include` applies only in those countries,\n`exclude` everywhere except them.","parameters":[{"in":"query","name":"publisher_id","description":"Rates that apply to this publisher: their own plus every `all_publishers` rate.","example":55,"required":false,"schema":{"type":"integer","description":"Rates that apply to this publisher: their own plus every `all_publishers` rate.","example":55}},{"in":"query","name":"all_publishers","description":"True returns only rates for every publisher; false only per-publisher rates.","example":false,"required":false,"schema":{"type":"boolean","description":"True returns only rates for every publisher; false only per-publisher rates.","example":false}},{"in":"query","name":"campaign_id","description":"Filter by campaign ID.","example":42,"required":false,"schema":{"type":"integer","description":"Filter by campaign ID.","example":42}},{"in":"query","name":"event_id","description":"Filter by event ID.","example":3,"required":false,"schema":{"type":"integer","description":"Filter by event ID.","example":3}},{"in":"query","name":"base_only","description":"When true, only rates without subid or country conditions (the negotiated base rate).","example":false,"required":false,"schema":{"type":"boolean","description":"When true, only rates without subid or country conditions (the negotiated base rate).","example":false}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":9,"publisher_id":55,"all_publishers":false,"campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"cpa":14,"payout":20,"revshare":null,"subid_condition_mode":"ALL","subid_filters":[],"country_condition_mode":"include","countries":["GB","DE"],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":9,"publisher_id":55,"all_publishers":false,"campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"cpa":14,"payout":20,"revshare":null,"subid_condition_mode":"ALL","subid_filters":[],"country_condition_mode":"include","countries":["GB","DE"],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9},"publisher_id":{"type":"integer","example":55},"all_publishers":{"type":"boolean","example":false},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"cpa":{"type":"number","example":14},"payout":{"type":"number","example":20},"revshare":{"type":"string","example":null,"nullable":true},"subid_condition_mode":{"type":"string","example":"ALL"},"subid_filters":{"type":"array","example":[]},"country_condition_mode":{"type":"string","example":"include"},"countries":{"type":"array","example":["GB","DE"],"items":{"type":"string"}},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publishers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"publisher_id":{"type":"integer","description":"","example":16},"all_publishers":{"type":"boolean","description":"","example":false},"campaign_id":{"type":"integer","description":"","example":16},"event_id":{"type":"integer","description":"","example":16},"base_only":{"type":"boolean","description":"","example":true},"sort":{"type":"string","description":"","example":"architecto"},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22},"page":{"type":"integer","description":"Must be at least 1.","example":67}}}}}}},"post":{"summary":"Create Custom Rate","operationId":"createCustomRate","description":"Assigns a custom rate on a campaign \u2014 the API equivalent of a payout change\nin the dashboard. It overrides the campaign's (or event's) base rate for one\npublisher, or for every publisher when `all_publishers` is true (including\npublishers who join later). A publisher's own rate wins over an\nall-publishers rate unless the latter has more conditions.\n\nWhich amounts apply depends on the target:\n\n- **CPA campaign\/event** \u2014 send `cpa` (what the publisher earns) and\n  optionally `payout` (what the advertiser pays you).\n- **Revshare campaign\/event** \u2014 send `revshare` only.\n- **Dynamic revenue** \u2014 `payout` is rejected, since revenue comes from the\n  conversion and a fixed override would be overwritten.\n\nPass `event_id` to make the rate specific to one event; omit it for the\ncampaign base rate. Private events cannot carry a rate.\n\n**Subid conditions** \u2014 pass `filters` to apply the rate only to clicks\nwhose sub IDs match, combined via `subid_condition_mode`.\n\n**Country conditions** \u2014 pass `countries` (ISO codes) with\n`country_condition_mode` of `include` or `exclude`. When a click could\nmatch several rates, the one with the most conditions wins.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"publisher_id":55,"all_publishers":false,"campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"cpa":14,"payout":20,"revshare":null,"subid_condition_mode":"ALL","subid_filters":[],"country_condition_mode":"include","countries":["GB","DE"],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"publisher_id":{"type":"integer","example":55},"all_publishers":{"type":"boolean","example":false},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"cpa":{"type":"number","example":14},"payout":{"type":"number","example":20},"revshare":{"type":"string","example":null,"nullable":true},"subid_condition_mode":{"type":"string","example":"ALL"},"subid_filters":{"type":"array","example":[]},"country_condition_mode":{"type":"string","example":"include"},"countries":{"type":"array","example":["GB","DE"],"items":{"type":"string"}},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"cpa":["CPA cannot be set for revshare payouts."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"cpa":{"type":"array","example":["CPA cannot be set for revshare payouts."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"all_publishers":{"type":"boolean","description":"Set true to apply the rate to every publisher sending traffic to the campaign, including publishers added later. Omit `publisher_id` when using this.","example":false},"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local) receiving the custom rate. This field is required unless <code>all_publishers<\/code> is in <code>true<\/code> or <code>1<\/code>.","example":55,"nullable":true},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local) the rate applies to.","example":42},"event_id":{"type":"integer","description":"Optional event ID (tenant-local) to make the rate event-specific. Omit for the campaign base rate. The event must belong to the given campaign. Private events cannot carry a rate.","example":null,"nullable":true},"cpa":{"type":"number","description":"What the publisher earns per conversion. Only for non-revshare campaigns\/events. Must be at least 0.","example":14,"nullable":true},"payout":{"type":"number","description":"What the advertiser pays you. Only for non-revshare targets that do not take revenue from the conversion. Must be at least 0.","example":20,"nullable":true},"revshare":{"type":"integer","description":"Publisher share (0\u2013100). Only for revshare campaigns\/events. Must be at least 0. Must not be greater than 100.","example":null,"nullable":true},"subid_condition_mode":{"type":"string","description":"How multiple subid conditions combine: `ALL` or `ANY`. Defaults to ALL.","example":"ALL","enum":["ALL","ANY"],"nullable":true},"filters":{"type":"array","description":"Optional subid conditions. When present the rate only applies to clicks matching them.","example":[{"subid_index":1,"match_type":"exact_match","value":"vip"}],"items":{"type":"object","nullable":true,"properties":{"subid_index":{"type":"integer","description":"This field is required when <code>filters<\/code> is present. Must be between 1 and 7.","example":2},"match_type":{"type":"string","description":"This field is required when <code>filters<\/code> is present.","example":"is_empty","enum":["begins_with","contains","does_not_contain","does_not_match","ends_with","exact_match","is_empty","is_not_empty","regex"]},"value":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true}}}},"country_condition_mode":{"type":"string","description":"How `countries` is read: `include` (rate applies only in those countries) or `exclude` (applies everywhere except them). Required when `countries` is set.","example":"include","enum":["include","exclude"],"nullable":true},"countries":{"type":"array","description":"Optional country condition as ISO 3166-1 alpha-2 codes, the same values `GET \/countries` returns. When present the rate only applies to clicks whose geo matches, per `country_condition_mode`. `UK` is accepted as `GB`. Must be 2 characters.","example":["GB"],"items":{"type":"string","enum":[null]}}},"required":["campaign_id"]}}}}}},"\/api\/v1\/admin\/custom-rates\/{id}":{"put":{"summary":"Update Custom Rate","operationId":"updateCustomRate","description":"Partially updates a custom rate \u2014 send only the amounts you want to\nchange. Anything you omit keeps its current value.\n\nThe rate's target (`publisher_id` \/ `all_publishers`, `campaign_id`,\n`event_id`) is fixed at creation and cannot be changed here; delete the\nrate and create a new one to retarget it.\n\n**Subid conditions** \u2014 send `filters` to replace them wholesale, omit it\nto leave them untouched, or send `[]` to clear them. `countries` works the\nsame way for the country condition.\n\n`PATCH` and `PUT` are both accepted and behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"publisher_id":55,"all_publishers":false,"campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"cpa":16,"payout":20,"revshare":null,"subid_condition_mode":"ALL","subid_filters":[],"country_condition_mode":"include","countries":["GB","DE"],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-02T09:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"publisher_id":{"type":"integer","example":55},"all_publishers":{"type":"boolean","example":false},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"cpa":{"type":"number","example":16},"payout":{"type":"number","example":20},"revshare":{"type":"string","example":null,"nullable":true},"subid_condition_mode":{"type":"string","example":"ALL"},"subid_filters":{"type":"array","example":[]},"country_condition_mode":{"type":"string","example":"include"},"countries":{"type":"array","example":["GB","DE"],"items":{"type":"string"}},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-02T09:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Custom rate not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Custom rate not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"revshare":["Revshare cannot be set for non-revshare payouts."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"revshare":{"type":"array","example":["Revshare cannot be set for non-revshare payouts."],"items":{"type":"string"}}}}}}}}}},"tags":["Publishers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"all_publishers":{"type":"boolean","description":"Ignored on update \u2014 who a rate applies to is fixed at creation. Delete and recreate to retarget.","example":null},"publisher_id":{"type":"integer","description":"Ignored on update \u2014 fixed at creation. This field is required unless <code>all_publishers<\/code> is in <code>true<\/code> or <code>1<\/code>.","example":null,"nullable":true},"campaign_id":{"type":"integer","description":"Ignored on update \u2014 fixed at creation.","example":null},"event_id":{"type":"integer","description":"Ignored on update \u2014 fixed at creation.","example":null,"nullable":true},"cpa":{"type":"number","description":"What the publisher earns per conversion. Only for non-revshare campaigns\/events. Must be at least 0.","example":14,"nullable":true},"payout":{"type":"number","description":"What the advertiser pays you. Only for non-revshare targets that do not take revenue from the conversion. Must be at least 0.","example":20,"nullable":true},"revshare":{"type":"integer","description":"Publisher share (0\u2013100). Only for revshare campaigns\/events. Must be at least 0. Must not be greater than 100.","example":null,"nullable":true},"subid_condition_mode":{"type":"string","description":"How multiple subid conditions combine: `ALL` or `ANY`. Defaults to ALL.","example":"ALL","enum":["ALL","ANY"],"nullable":true},"filters":{"type":"array","description":"Replaces the subid conditions. Omit to keep them; send `[]` to remove them.","example":[{"subid_index":1,"match_type":"exact_match","value":"vip"}],"items":{"type":"object","nullable":true,"properties":{"subid_index":{"type":"integer","description":"This field is required when <code>filters<\/code> is present. Must be between 1 and 7.","example":2},"match_type":{"type":"string","description":"This field is required when <code>filters<\/code> is present.","example":"does_not_contain","enum":["begins_with","contains","does_not_contain","does_not_match","ends_with","exact_match","is_empty","is_not_empty","regex"]},"value":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true}}}},"country_condition_mode":{"type":"string","description":"How `countries` is read: `include` (rate applies only in those countries) or `exclude` (applies everywhere except them). Required when `countries` is set.","example":"include","enum":["include","exclude"],"nullable":true},"countries":{"type":"array","description":"Replaces the country condition (ISO 3166-1 alpha-2 codes). Omit to keep the current countries; send `[]` to remove the condition. Must be 2 characters.","example":["GB"],"items":{"type":"string","enum":[null]}}},"required":["campaign_id"]}}}}},"delete":{"summary":"Delete Custom Rate","operationId":"deleteCustomRate","description":"Removes a publisher's custom rate. The publisher immediately falls back to\nthe campaign's (or event's) base rate.\n\nThe record is soft-deleted, matching the dashboard, so it still appears in\nthe audit trail.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Custom rate deleted."},"properties":{"message":{"type":"string","example":"Custom rate deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Custom rate not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Custom rate not found."}}}}}}},"tags":["Publishers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the custom rate.","example":9,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/publisher-restrictions":{"get":{"summary":"List Publisher Restrictions","operationId":"listPublisherRestrictions","description":"Returns a paginated list of publisher restrictions in your network.\nFilters are flat query parameters.","parameters":[{"in":"query","name":"publisher_id","description":"Filter by publisher ID.","example":55,"required":false,"schema":{"type":"integer","description":"Filter by publisher ID.","example":55}},{"in":"query","name":"restriction_type","description":"Filter by type. Allowed: `campaign`, `advertiser`.","example":"campaign","required":false,"schema":{"type":"string","description":"Filter by type. Allowed: `campaign`, `advertiser`.","example":"campaign"}},{"in":"query","name":"campaign_id","description":"Filter by restricted campaign ID.","example":42,"required":false,"schema":{"type":"integer","description":"Filter by restricted campaign ID.","example":42}},{"in":"query","name":"advertiser_id","description":"Filter by restricted advertiser ID.","example":7,"required":false,"schema":{"type":"integer","description":"Filter by restricted advertiser ID.","example":7}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":3,"publisher_id":55,"restriction_type":"campaign","campaign_id":42,"campaign_name":"Spring Promo","advertiser_id":null,"redirect_to_invalid":false,"redirect_campaign_id":7,"redirect_creative_id":null,"redirect_smarter_link_id":null,"comments":null,"subid_condition_mode":"ALL","subid_filters":[],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":3,"publisher_id":55,"restriction_type":"campaign","campaign_id":42,"campaign_name":"Spring Promo","advertiser_id":null,"redirect_to_invalid":false,"redirect_campaign_id":7,"redirect_creative_id":null,"redirect_smarter_link_id":null,"comments":null,"subid_condition_mode":"ALL","subid_filters":[],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":3},"publisher_id":{"type":"integer","example":55},"restriction_type":{"type":"string","example":"campaign"},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"advertiser_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":false},"redirect_campaign_id":{"type":"integer","example":7},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"comments":{"type":"string","example":null,"nullable":true},"subid_condition_mode":{"type":"string","example":"ALL"},"subid_filters":{"type":"array","example":[]},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publisher Restrictions"]},"post":{"summary":"Create Publisher Restriction","operationId":"createPublisherRestriction","description":"Blocks a publisher from running a campaign (`restriction_type: campaign`)\nor every campaign of an advertiser (`restriction_type: advertiser`).\nRestricted clicks are redirected to `redirect_campaign_id` (optionally a\nspecific `redirect_creative_id`), or to the invalid\/dead page when\n`redirect_to_invalid` is true.\n\n**Subid conditions** \u2014 by default the restriction applies to all of the\npublisher's traffic. Pass `filters` to restrict only clicks whose sub IDs\nmatch the given conditions, combined with `subid_condition_mode`\n(`ALL` = every condition must match, `ANY` = at least one).","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"publisher_id":55,"restriction_type":"campaign","campaign_id":42,"campaign_name":"Spring Promo","advertiser_id":null,"redirect_to_invalid":false,"redirect_campaign_id":7,"redirect_creative_id":null,"redirect_smarter_link_id":null,"comments":"Fraudulent traffic on subid 3","subid_condition_mode":"ALL","subid_filters":[{"subid_index":3,"match_type":"begins_with","value":"fb_"}],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"publisher_id":{"type":"integer","example":55},"restriction_type":{"type":"string","example":"campaign"},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"advertiser_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":false},"redirect_campaign_id":{"type":"integer","example":7},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"comments":{"type":"string","example":"Fraudulent traffic on subid 3"},"subid_condition_mode":{"type":"string","example":"ALL"},"subid_filters":{"type":"array","example":[{"subid_index":3,"match_type":"begins_with","value":"fb_"}],"items":{"type":"object","properties":{"subid_index":{"type":"integer","example":3},"match_type":{"type":"string","example":"begins_with"},"value":{"type":"string","example":"fb_"}}}},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"redirect_campaign_id":["The redirect campaign field is required unless Invalid\/Dead Page is selected."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"redirect_campaign_id":{"type":"array","example":["The redirect campaign field is required unless Invalid\/Dead Page is selected."],"items":{"type":"string"}}}}}}}}}},"tags":["Publisher Restrictions"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local) to restrict.","example":55},"restriction_type":{"type":"string","description":"Restriction scope: `campaign` blocks one campaign; `advertiser` blocks all campaigns of an advertiser; `all` blocks every campaign on the network.","example":"campaign","enum":["advertiser","campaign","all"]},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local). Required when `restriction_type` is `campaign`, prohibited otherwise. This field is required when <code>restriction_type<\/code> is <code>campaign<\/code>.","example":42,"nullable":true},"advertiser_id":{"type":"integer","description":"Advertiser ID (tenant-local). Required when `restriction_type` is `advertiser`, prohibited otherwise. This field is required when <code>restriction_type<\/code> is <code>advertiser<\/code>.","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","description":"Send restricted clicks to the invalid\/dead page instead of a redirect campaign. Defaults to false, and is always forced true for `all` restrictions.","example":false,"nullable":true},"redirect_campaign_id":{"type":"integer","description":"Campaign ID (tenant-local) to redirect restricted clicks to. Required unless `redirect_to_invalid` is true or `restriction_type` is `all`.","example":7,"nullable":true},"redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID (tenant-local) to route restricted clicks into instead of a campaign. Mutually exclusive with `redirect_campaign_id`.","example":null,"nullable":true},"redirect_creative_id":{"type":"integer","description":"Optional creative ID (tenant-local) of the redirect campaign.","example":null,"nullable":true},"comments":{"type":"string","description":"Optional internal note.","example":"Fraudulent traffic on subid 3","nullable":true},"subid_condition_mode":{"type":"string","description":"How multiple subid conditions combine: `ALL` (every condition must match) or `ANY` (at least one). Defaults to ALL.","example":"ALL","enum":["ALL","ANY"],"nullable":true},"filters":{"type":"array","description":"Optional subid conditions. When present, the restriction only applies to clicks matching them.","example":[{"subid_index":3,"match_type":"begins_with","value":"fb_"}],"items":{"type":"object","nullable":true,"properties":{"subid_index":{"type":"integer","description":"This field is required when <code>filters<\/code> is present. Must be between 1 and 7.","example":2},"match_type":{"type":"string","description":"This field is required when <code>filters<\/code> is present.","example":"regex","enum":["begins_with","contains","does_not_contain","does_not_match","ends_with","exact_match","is_empty","is_not_empty","regex"]},"value":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true}}}}},"required":["publisher_id","restriction_type"]}}}}}},"\/api\/v1\/admin\/publisher-restrictions\/{id}":{"get":{"summary":"Get Publisher Restriction","operationId":"getPublisherRestriction","description":"Returns a single publisher restriction by its ID, including any subid\nconditions.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"publisher_id":55,"restriction_type":"campaign","campaign_id":42,"campaign_name":"Spring Promo","advertiser_id":null,"redirect_to_invalid":false,"redirect_campaign_id":7,"redirect_creative_id":null,"redirect_smarter_link_id":null,"comments":null,"subid_condition_mode":"ALL","subid_filters":[],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"publisher_id":{"type":"integer","example":55},"restriction_type":{"type":"string","example":"campaign"},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"advertiser_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":false},"redirect_campaign_id":{"type":"integer","example":7},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"comments":{"type":"string","example":null,"nullable":true},"subid_condition_mode":{"type":"string","example":"ALL"},"subid_filters":{"type":"array","example":[]},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher restriction not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher restriction not found."}}}}}}},"tags":["Publisher Restrictions"]},"put":{"summary":"Update Publisher Restriction","operationId":"updatePublisherRestriction","description":"Partially updates a publisher restriction \u2014 send only the fields you want\nto change. Anything you omit keeps its current value, and cross-field\nrules are validated against the resulting state (so switching\n`restriction_type` to `advertiser` only needs `advertiser_id`).\n`PATCH` and `PUT` are both accepted and behave identically.\n\n**Subid conditions** \u2014 send `filters` to replace the restriction's subid\nconditions wholesale (the array you send becomes the complete new set).\nOmit `filters` to leave the existing conditions untouched; send an empty\narray `[]` to clear them all.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"publisher_id":55,"restriction_type":"campaign","campaign_id":42,"campaign_name":"Spring Promo","advertiser_id":null,"redirect_to_invalid":true,"redirect_campaign_id":null,"redirect_creative_id":null,"redirect_smarter_link_id":null,"comments":"Now dead-ends","subid_condition_mode":"ALL","subid_filters":[],"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-02T09:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"publisher_id":{"type":"integer","example":55},"restriction_type":{"type":"string","example":"campaign"},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"advertiser_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":true},"redirect_campaign_id":{"type":"string","example":null,"nullable":true},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"comments":{"type":"string","example":"Now dead-ends"},"subid_condition_mode":{"type":"string","example":"ALL"},"subid_filters":{"type":"array","example":[]},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-02T09:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher restriction not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher restriction not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"campaign_id":["A campaign_id is required for campaign restrictions."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"campaign_id":{"type":"array","example":["A campaign_id is required for campaign restrictions."],"items":{"type":"string"}}}}}}}}}},"tags":["Publisher Restrictions"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local) to restrict.","example":55},"restriction_type":{"type":"string","description":"Restriction scope: `campaign` blocks one campaign; `advertiser` blocks all campaigns of an advertiser; `all` blocks every campaign on the network.","example":"campaign","enum":["advertiser","campaign","all"]},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local). Required when `restriction_type` is `campaign`, prohibited otherwise. This field is required when <code>restriction_type<\/code> is <code>campaign<\/code>.","example":42,"nullable":true},"advertiser_id":{"type":"integer","description":"Advertiser ID (tenant-local). Required when `restriction_type` is `advertiser`, prohibited otherwise. This field is required when <code>restriction_type<\/code> is <code>advertiser<\/code>.","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","description":"Send restricted clicks to the invalid\/dead page instead of a redirect campaign. Defaults to false, and is always forced true for `all` restrictions.","example":false,"nullable":true},"redirect_campaign_id":{"type":"integer","description":"Campaign ID (tenant-local) to redirect restricted clicks to. Required unless `redirect_to_invalid` is true or `restriction_type` is `all`.","example":7,"nullable":true},"redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID (tenant-local) to route restricted clicks into instead of a campaign. Mutually exclusive with `redirect_campaign_id`.","example":null,"nullable":true},"redirect_creative_id":{"type":"integer","description":"Optional creative ID (tenant-local) of the redirect campaign.","example":null,"nullable":true},"comments":{"type":"string","description":"Optional internal note.","example":"Fraudulent traffic on subid 3","nullable":true},"subid_condition_mode":{"type":"string","description":"How multiple subid conditions combine: `ALL` (every condition must match) or `ANY` (at least one). Defaults to ALL.","example":"ALL","enum":["ALL","ANY"],"nullable":true},"filters":{"type":"array","description":"Optional subid conditions. When present, the restriction only applies to clicks matching them.","example":[{"subid_index":3,"match_type":"begins_with","value":"fb_"}],"items":{"type":"object","nullable":true,"properties":{"subid_index":{"type":"integer","description":"This field is required when <code>filters<\/code> is present. Must be between 1 and 7.","example":2},"match_type":{"type":"string","description":"This field is required when <code>filters<\/code> is present.","example":"contains","enum":["begins_with","contains","does_not_contain","does_not_match","ends_with","exact_match","is_empty","is_not_empty","regex"]},"value":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true}}}}}}}}}},"delete":{"summary":"Delete Publisher Restriction","operationId":"deletePublisherRestriction","description":"Removes a publisher restriction. The publisher immediately regains\naccess to the previously restricted campaign or advertiser.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Publisher restriction deleted."},"properties":{"message":{"type":"string","example":"Publisher restriction deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher restriction not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher restriction not found."}}}}}}},"tags":["Publisher Restrictions"]},"parameters":[{"in":"path","name":"id","description":"The ID of the restriction.","example":3,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns":{"get":{"summary":"List Campaigns","operationId":"listCampaigns","description":"Returns a paginated list of campaigns in your network. Filters are flat\nquery parameters; multiple values can be passed as a comma-separated list\n(e.g. `status=ACTIVE,EXPIRING`).\n\n**Money fields** \u2014 `payout` is what the advertiser pays your network per conversion\n(your revenue); `cpa` is what your network pays the publisher. The difference is your\nmargin. For rev-share campaigns `cpa` is 0 and `cpa_rs` carries the percentage.\n\n**Caps** \u2014 each row in `caps` is one active cap on the campaign: `window` is one of\n`day`, `week`, `month`, `total`; `metric` is `lead`, `click`, `cpa` or `revenue`\n(`cpa` and `revenue` limits are currency amounts, `lead` and `click` are counts);\n`used` and `remaining` are live against the current window in your network's timezone.\n`count_pending: true` means the counter is being recomputed and `used`\/`remaining` are\nnot yet meaningful for that row \u2014 retry shortly. `is_capped` on the campaign is true when\nany counted cap is exhausted.\n\n**Deciding whether an offer is live** \u2014 no single field answers this, because traffic is\nalso gated per creative and per publisher. Treat a campaign as live when\n`status` is not `EXPIRED`, `is_hard_cap_active` is false, and `is_capped` is false.","parameters":[{"in":"query","name":"name","description":"Partial match on campaign name (case-insensitive).","example":"spring","required":false,"schema":{"type":"string","description":"Partial match on campaign name (case-insensitive).","example":"spring"}},{"in":"query","name":"status","description":"Comma-separated list of statuses. Allowed: `ACTIVE`, `EXPIRING`, `EXPIRED`.","example":"ACTIVE","required":false,"schema":{"type":"string","description":"Comma-separated list of statuses. Allowed: `ACTIVE`, `EXPIRING`, `EXPIRED`.","example":"ACTIVE"}},{"in":"query","name":"offer_type","description":"Comma-separated list of offer types. Allowed: `public`, `private`, `approval`.","example":"public","required":false,"schema":{"type":"string","description":"Comma-separated list of offer types. Allowed: `public`, `private`, `approval`.","example":"public"}},{"in":"query","name":"advertiser_id","description":"Filter by parent advertiser ID.","example":7,"required":false,"schema":{"type":"integer","description":"Filter by parent advertiser ID.","example":7}},{"in":"query","name":"converts_on","description":"Comma-separated list of conversion points. Allowed: `valid_cc_submit`, `valid_lead_submit`, `valid_trial_entry`, `install`, `1st_page_submit`, `2nd_page_submit`, `unique_click`, `other`.","example":"valid_lead_submit,install","required":false,"schema":{"type":"string","description":"Comma-separated list of conversion points. Allowed: `valid_cc_submit`, `valid_lead_submit`, `valid_trial_entry`, `install`, `1st_page_submit`, `2nd_page_submit`, `unique_click`, `other`.","example":"valid_lead_submit,install"}},{"in":"query","name":"group","description":"Comma-separated list of group names, matched case-insensitively. Campaign groups match their campaigns; advertiser groups match every campaign of their advertisers.","example":"Coreg Offers","required":false,"schema":{"type":"string","description":"Comma-separated list of group names, matched case-insensitively. Campaign groups match their campaigns; advertiser groups match every campaign of their advertisers.","example":"Coreg Offers"}},{"in":"query","name":"group_id","description":"Comma-separated list of group IDs, as an alternative to `group`. Combining the two selects the union.","example":"9,12","required":false,"schema":{"type":"string","description":"Comma-separated list of group IDs, as an alternative to `group`. Combining the two selects the union.","example":"9,12"}},{"in":"query","name":"created_after","description":"Return only campaigns created on or after this ISO date.","example":"2026-01-01","required":false,"schema":{"type":"string","description":"Return only campaigns created on or after this ISO date.","example":"2026-01-01"}},{"in":"query","name":"created_before","description":"Return only campaigns created on or before this ISO date.","example":"2026-12-31","required":false,"schema":{"type":"string","description":"Return only campaigns created on or before this ISO date.","example":"2026-12-31"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `status`, `cpa`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `status`, `cpa`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":101,"name":"Spring Campaign","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","transaction_type":"cpa","is_rev_share":false,"is_cpc":false,"payout":18,"currency":"USD","expiration_date":null,"created_at":"2026-04-20T12:00:00Z","updated_at":"2026-04-20T12:00:00Z","cpa":12.5,"cpa_rs":null,"dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"is_hard_cap_active":false,"hard_cap_date":null,"converts_on":"valid_lead_submit","converts_on_other":null,"caps":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"is_capped":false}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":101,"name":"Spring Campaign","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","transaction_type":"cpa","is_rev_share":false,"is_cpc":false,"payout":18,"currency":"USD","expiration_date":null,"created_at":"2026-04-20T12:00:00Z","updated_at":"2026-04-20T12:00:00Z","cpa":12.5,"cpa_rs":null,"dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"is_hard_cap_active":false,"hard_cap_date":null,"converts_on":"valid_lead_submit","converts_on_other":null,"caps":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"is_capped":false}],"items":{"type":"object","properties":{"id":{"type":"integer","example":101},"name":{"type":"string","example":"Spring Campaign"},"advertiser_id":{"type":"integer","example":7},"category_id":{"type":"integer","example":3},"category_name":{"type":"string","example":"Finance"},"offer_type":{"type":"string","example":"public"},"status":{"type":"string","example":"ACTIVE"},"transaction_type":{"type":"string","example":"cpa"},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"payout":{"type":"number","example":18},"currency":{"type":"string","example":"USD"},"expiration_date":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-20T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-20T12:00:00Z"},"cpa":{"type":"number","example":12.5},"cpa_rs":{"type":"string","example":null,"nullable":true},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"keep_percentage":{"type":"number","example":100},"dynamic_payout":{"type":"boolean","example":false},"is_hard_cap_active":{"type":"boolean","example":false},"hard_cap_date":{"type":"string","example":null,"nullable":true},"converts_on":{"type":"string","example":"valid_lead_submit"},"converts_on_other":{"type":"string","example":null,"nullable":true},"caps":{"type":"array","example":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"items":{"type":"object","properties":{"window":{"type":"string","example":"day"},"metric":{"type":"string","example":"lead"},"limit":{"type":"integer","example":500},"used":{"type":"integer","example":137},"remaining":{"type":"integer","example":363},"is_capped":{"type":"boolean","example":false},"count_pending":{"type":"boolean","example":false}}}},"is_capped":{"type":"boolean","example":false}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"status":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true},"offer_type":{"type":"string","description":"Must not be greater than 100 characters.","example":"g","nullable":true},"advertiser_id":{"type":"integer","description":"","example":16,"nullable":true},"converts_on":{"type":"string","description":"","example":"architecto","nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-11-02T03:04:27","nullable":true},"created_before":{"type":"string","description":"Must be a valid date. Must be a date after or equal to <code>created_after<\/code>.","example":"2052-11-25","nullable":true},"sort":{"type":"string","description":"","example":"status","enum":["id","-id","name","-name","status","-status","cpa","-cpa","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true},"group_id":{"type":"string","description":"Must not be greater than 255 characters.","example":"g","nullable":true},"group":{"type":"string","description":"Must not be greater than 1024 characters.","example":"z","nullable":true}}}}}}},"post":{"summary":"Create Campaign","operationId":"createCampaign","description":"Creates a new campaign in your network. All foreign-key fields\n(`advertiser_id`, `category_id`, redirect campaign \/ creative IDs) accept\ntenant-local IDs validated against your account.\n\n**Geo targeting** \u2014 pass `countries` as an array of ISO 3166-1 alpha-2\ncodes (e.g. `[\"US\",\"CA\"]`). Omit the field or pass `null` to target\n**all countries**. Use `GET \/admin\/countries` for the full supported list.\n\n**Device & OS targeting** \u2014 pass `device` (`\"mobile\"`, `\"desktop\"`, `\"all\"`)\nand\/or `os` (array of `\"ios\"`, `\"android\"`, `\"windows\"`, `\"mac\"`, `\"linux\"`).\nOmit or pass `null` on either field to allow all devices \/ OS.\n\n`caps[].count_pending` may be true right after a write: a counter not yet cached is not\ncomputed inline. The next GET has the number.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":101,"name":"Spring Promo 2026","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","description":null,"url":"https:\/\/...","conversion_page_url":"https:\/\/advertiser.example.com\/thank-you","is_incentive":false,"transaction_type":null,"is_rev_share":false,"is_cpc":false,"cpa":12.5,"cpa_rs":null,"payout":18,"currency":"USD","dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"caps":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"is_capped":false,"is_cap_active":true,"cap_limit":500,"cap_limit_frequency":1,"is_hard_cap_active":false,"hard_cap_date":null,"expiration_date":null,"device":null,"os":null,"block_proxies":false,"proxy_tolerance":"standard","enable_container":false,"allow_duplicate_conversions":false,"terms":null,"comment":null,"converts_on":null,"converts_on_other":null,"countries":["US","CA"],"geo_redirect_campaign_id":null,"geo_redirect_creative_id":null,"geo_redirect_smarter_link_id":null,"expired_redirect_campaign_id":null,"expired_redirect_creative_id":null,"expired_redirect_smarter_link_id":null,"campaign_cap_redirect_campaign_id":null,"campaign_cap_redirect_creative_id":null,"campaign_cap_redirect_smarter_link_id":null,"advertiser_cap_redirect_campaign_id":null,"advertiser_cap_redirect_creative_id":null,"advertiser_cap_redirect_smarter_link_id":null,"device_redirect_campaign_id":null,"device_redirect_creative_id":null,"device_redirect_smarter_link_id":null,"os_redirect_campaign_id":null,"os_redirect_creative_id":null,"os_redirect_smarter_link_id":null,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":101},"name":{"type":"string","example":"Spring Promo 2026"},"advertiser_id":{"type":"integer","example":7},"category_id":{"type":"integer","example":3},"category_name":{"type":"string","example":"Finance"},"offer_type":{"type":"string","example":"public"},"status":{"type":"string","example":"ACTIVE"},"description":{"type":"string","example":null,"nullable":true},"url":{"type":"string","example":"https:\/\/..."},"conversion_page_url":{"type":"string","example":"https:\/\/advertiser.example.com\/thank-you"},"is_incentive":{"type":"boolean","example":false},"transaction_type":{"type":"string","example":null,"nullable":true},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"cpa":{"type":"number","example":12.5},"cpa_rs":{"type":"string","example":null,"nullable":true},"payout":{"type":"number","example":18},"currency":{"type":"string","example":"USD"},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"keep_percentage":{"type":"number","example":100},"dynamic_payout":{"type":"boolean","example":false},"caps":{"type":"array","example":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"items":{"type":"object","properties":{"window":{"type":"string","example":"day"},"metric":{"type":"string","example":"lead"},"limit":{"type":"integer","example":500},"used":{"type":"integer","example":137},"remaining":{"type":"integer","example":363},"is_capped":{"type":"boolean","example":false},"count_pending":{"type":"boolean","example":false}}}},"is_capped":{"type":"boolean","example":false},"is_cap_active":{"type":"boolean","example":true,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"cap_limit":{"type":"integer","example":500,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"cap_limit_frequency":{"type":"integer","example":1,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"is_hard_cap_active":{"type":"boolean","example":false},"hard_cap_date":{"type":"string","example":null,"nullable":true},"expiration_date":{"type":"string","example":null,"nullable":true},"device":{"type":"string","example":null,"nullable":true},"os":{"type":"string","example":null,"nullable":true},"block_proxies":{"type":"boolean","example":false},"proxy_tolerance":{"type":"string","example":"standard"},"enable_container":{"type":"boolean","example":false},"allow_duplicate_conversions":{"type":"boolean","example":false},"terms":{"type":"string","example":null,"nullable":true},"comment":{"type":"string","example":null,"nullable":true},"converts_on":{"type":"string","example":null,"nullable":true},"converts_on_other":{"type":"string","example":null,"nullable":true},"countries":{"type":"array","example":["US","CA"],"items":{"type":"string"}},"geo_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"geo_redirect_creative_id":{"type":"string","example":null,"nullable":true},"geo_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"expired_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"expired_redirect_creative_id":{"type":"string","example":null,"nullable":true},"expired_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_creative_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_creative_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"device_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"device_redirect_creative_id":{"type":"string","example":null,"nullable":true},"device_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"os_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"os_redirect_creative_id":{"type":"string","example":null,"nullable":true},"os_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"name":["The name has already been taken."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"name":{"type":"array","example":["The name has already been taken."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Campaign status, stored as `expiration_date`. `ACTIVE` clears the expiration date. `EXPIRED` expires the campaign now, or at the past `expiration_date` you send. `EXPIRING` requires an `expiration_date` in the future. Defaults to `ACTIVE` on create.","example":"ACTIVE","enum":["ACTIVE","EXPIRING","EXPIRED"],"nullable":true},"converts_on":{"type":"string","description":"Conversion point. Allowed: `valid_cc_submit` (Valid CC Submit), `valid_lead_submit` (Valid Lead Submit), `valid_trial_entry` (Valid Trial Entry), `install` (Install), `1st_page_submit` (1st Page Submit), `2nd_page_submit` (2nd Page Submit), `unique_click` (Unique Click (CPC)), `other` (Other). `unique_click` is the conversion point of CPC campaigns.","example":"valid_lead_submit","nullable":true},"converts_on_other":{"type":"string","description":"Free-text conversion point. Required when `converts_on` is `other`, cleared otherwise. This field is required when <code>converts_on<\/code> is <code>other<\/code>. Must not be greater than 255 characters.","example":null,"nullable":true},"caps":{"type":"array","description":"","example":null,"items":{"type":"object","properties":{"metric":{"type":"string","description":"","example":"click","enum":["lead","click","cpa","revenue"]},"window":{"type":"integer","description":"","example":2,"enum":[1,2,3,4]},"limit":{"type":"number","description":"Must be at least 0.","example":39}},"required":["metric","window","limit"]}},"dynamic_revenue":{"type":"boolean","description":"CPA campaigns only. Take the revenue from each conversion instead of the fixed `payout`, which is set to 0.","example":false},"dynamic_payout":{"type":"boolean","description":"CPA campaigns only. Take the publisher payout from each conversion instead of the fixed `cpa`, which is set to 0.","example":false},"revenue_source":{"type":"string","description":"Conversion parameter that carries the revenue when `dynamic_revenue` is on: `revenue` (also accepts `cpa` and `payout`) or `order_total`.","example":"revenue","enum":["revenue","order_total"],"nullable":true},"name":{"type":"string","description":"Campaign name. Must not be greater than 255 characters.","example":"Spring Promo 2026"},"advertiser_id":{"type":"integer","description":"Advertiser ID.","example":7},"offer_type":{"type":"string","description":"Offer visibility. Allowed: `public`, `private`, `approval`, `tst` (Testing: hidden from publishers).","example":"public","enum":["public","private","approval","tst"]},"description":{"type":"string","description":"Optional campaign description.","example":null,"nullable":true},"category_id":{"type":"integer","description":"Optional category ID.","example":3,"nullable":true},"is_incentive":{"type":"boolean","description":"Whether this is an incentive campaign.","example":false},"url":{"type":"string","description":"Destination \/ preview URL. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/landing","nullable":true},"conversion_page_url":{"type":"string","description":"The page where conversions happen, such as the thank-you page. Publishers' ad platform postbacks report it as the conversion's page (for Meta, `event_source_url`) unless the postback overrides it; publishers never see it here. Leave empty to use each click's landing page. Must be a valid URL. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/thank-you","nullable":true},"comment":{"type":"string","description":"","example":"architecto","nullable":true},"terms":{"type":"string","description":"Optional campaign terms shown to publishers.","example":null,"nullable":true},"transaction_type":{"type":"string","description":"","example":"revshare","enum":["cpa","revshare","cpc"]},"cpa":{"type":"number","description":"Amount paid to publishers per conversion. Must be at least 0.","example":12.5},"is_rev_share":{"type":"boolean","description":"Use revenue share model instead of fixed CPA.","example":false},"is_cpc":{"type":"boolean","description":"","example":true},"cpa_rs":{"type":"number","description":"Revenue share percentage (required when `is_rev_share` is true). Must be at least 0.","example":null},"payout":{"type":"number","description":"Amount the advertiser pays per conversion. Not required when `dynamic_revenue` is true. Must be at least 0.","example":18},"keep_percentage":{"type":"number","description":"The share of the reported sale booked as revenue (above 0, up to 100). Applies to rev share and to dynamic revenue; a rev share still pays the publisher a percentage of the full sale. Defaults to 100. Must not be greater than 100.","example":100,"nullable":true},"currency":{"type":"string","description":"ISO 4217 code the campaign's rates and conversions are in. Defaults to the advertiser's currency, else the network's.","example":"USD","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"],"nullable":true},"is_hard_cap_active":{"type":"boolean","description":"Whether the campaign has a hard cap end date.","example":false},"hard_cap_date":{"type":"string","description":"Required when `is_hard_cap_active` is true. Must be a valid date.","example":null},"is_cap_active":{"type":"boolean","description":"Whether a per-window conversion cap is enforced. This field is required when <code>caps<\/code> is not present. Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric.","example":false,"deprecated":true},"cap_limit":{"type":"integer","description":"Conversion cap limit (required when `is_cap_active` is true). Must be at least 0. Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric.","example":null,"deprecated":true},"cap_limit_frequency":{"type":"integer","description":"Deprecated in favour of `caps`. Window of the lead cap: `day`, `week`, `month` or `total` (or `1`\u2013`4`). Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric.","example":0,"enum":[1,2,3,4],"deprecated":true},"expiration_date":{"type":"string","description":"Optional campaign expiration date (ISO 8601). Must be a valid date.","example":"2026-12-31","nullable":true},"device":{"type":"string","description":"Restrict traffic by device type. Allowed: `all`, `desktop`, `mobile`. Omit or pass `null` to allow all devices.","example":"mobile","enum":["all","desktop","mobile"],"nullable":true},"os":{"type":"array","description":"","example":["all"],"items":{"type":"string","enum":["all","windows","mac","linux","android","ios"]}},"block_proxies":{"type":"boolean","description":"Block proxy\/VPN traffic.","example":false,"nullable":true},"proxy_tolerance":{"type":"string","description":"Proxy detection sensitivity. Allowed: `standard`, `strict`, `relaxed`.","example":"standard","enum":["standard","strict","relaxed"],"nullable":true},"enable_container":{"type":"boolean","description":"Enable container\/pixel tracking on the landing page.","example":false,"nullable":true},"allow_duplicate_conversions":{"type":"boolean","description":"Credit every repeat conversion on the same click ID as its own conversion. Ignored on CPC campaigns. Defaults to false.","example":false},"countries":{"type":"array","description":"ISO 3166-1 alpha-2 country code. Must match an existing stored value. Must be 2 characters.","example":["US"],"items":{"type":"string"}},"geo_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect users to when they fail the country filter.","example":null,"nullable":true},"geo_redirect_creative_id":{"type":"integer","description":"Optional creative ID to use when redirecting on geo mismatch. Requires `geo_redirect_campaign_id`.","example":null,"nullable":true},"geo_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `geo_redirect_campaign_id`.","example":null,"nullable":true},"expired_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when this campaign is expired.","example":null,"nullable":true},"expired_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the expired redirect.","example":null,"nullable":true},"expired_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `expired_redirect_campaign_id`.","example":null,"nullable":true},"campaign_cap_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when this campaign's cap is reached.","example":null,"nullable":true},"campaign_cap_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the campaign-cap redirect.","example":null,"nullable":true},"campaign_cap_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `campaign_cap_redirect_campaign_id`.","example":null,"nullable":true},"advertiser_cap_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when the advertiser-level cap is reached.","example":null,"nullable":true},"advertiser_cap_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the advertiser-cap redirect.","example":null,"nullable":true},"advertiser_cap_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `advertiser_cap_redirect_campaign_id`.","example":null,"nullable":true},"device_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when the visitor's device is not supported.","example":null,"nullable":true},"device_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the device redirect.","example":null,"nullable":true},"device_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `device_redirect_campaign_id`.","example":null,"nullable":true},"os_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when the visitor's OS is not supported.","example":null,"nullable":true},"os_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the OS redirect.","example":null,"nullable":true},"os_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `os_redirect_campaign_id`.","example":null,"nullable":true}},"required":["name","advertiser_id","offer_type","is_incentive","cpa","is_rev_share","cpa_rs","payout","is_hard_cap_active","hard_cap_date","cap_limit","cap_limit_frequency"]}}}}}},"\/api\/v1\/admin\/campaigns\/{id}":{"get":{"summary":"Get Campaign","operationId":"getCampaign","description":"Returns the full detail of a single campaign by its ID.\n\n**Caps** \u2014 `caps` describes every active cap on the campaign with live `used` and\n`remaining` figures; see the list endpoint for the full field reference. The legacy\n`is_cap_active`, `cap_limit` and `cap_limit_frequency` fields are **deprecated**: they\ndescribe only the single lead cap and are blind to click, CPA and revenue caps and to\nevery window but their own. Read `caps` instead.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":42,"name":"Spring Promo 2026","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","description":null,"url":"https:\/\/...","conversion_page_url":"https:\/\/advertiser.example.com\/thank-you","is_incentive":false,"transaction_type":null,"is_rev_share":false,"is_cpc":false,"cpa":12.5,"cpa_rs":null,"payout":18,"currency":"USD","dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"caps":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"is_capped":false,"is_cap_active":true,"cap_limit":500,"cap_limit_frequency":1,"is_hard_cap_active":false,"hard_cap_date":null,"expiration_date":null,"device":null,"os":null,"block_proxies":false,"proxy_tolerance":"standard","enable_container":false,"allow_duplicate_conversions":false,"terms":null,"comment":null,"converts_on":null,"converts_on_other":null,"countries":["US","CA"],"geo_redirect_campaign_id":null,"geo_redirect_creative_id":null,"geo_redirect_smarter_link_id":null,"expired_redirect_campaign_id":null,"expired_redirect_creative_id":null,"expired_redirect_smarter_link_id":null,"campaign_cap_redirect_campaign_id":null,"campaign_cap_redirect_creative_id":null,"campaign_cap_redirect_smarter_link_id":null,"advertiser_cap_redirect_campaign_id":null,"advertiser_cap_redirect_creative_id":null,"advertiser_cap_redirect_smarter_link_id":null,"device_redirect_campaign_id":null,"device_redirect_creative_id":null,"device_redirect_smarter_link_id":null,"os_redirect_campaign_id":null,"os_redirect_creative_id":null,"os_redirect_smarter_link_id":null,"created_at":"2026-04-20T12:00:00Z","updated_at":"2026-04-20T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":42},"name":{"type":"string","example":"Spring Promo 2026"},"advertiser_id":{"type":"integer","example":7},"category_id":{"type":"integer","example":3},"category_name":{"type":"string","example":"Finance"},"offer_type":{"type":"string","example":"public"},"status":{"type":"string","example":"ACTIVE"},"description":{"type":"string","example":null,"nullable":true},"url":{"type":"string","example":"https:\/\/..."},"conversion_page_url":{"type":"string","example":"https:\/\/advertiser.example.com\/thank-you"},"is_incentive":{"type":"boolean","example":false},"transaction_type":{"type":"string","example":null,"nullable":true},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"cpa":{"type":"number","example":12.5},"cpa_rs":{"type":"string","example":null,"nullable":true},"payout":{"type":"number","example":18},"currency":{"type":"string","example":"USD"},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"keep_percentage":{"type":"number","example":100},"dynamic_payout":{"type":"boolean","example":false},"caps":{"type":"array","example":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"items":{"type":"object","properties":{"window":{"type":"string","example":"day"},"metric":{"type":"string","example":"lead"},"limit":{"type":"integer","example":500},"used":{"type":"integer","example":137},"remaining":{"type":"integer","example":363},"is_capped":{"type":"boolean","example":false},"count_pending":{"type":"boolean","example":false}}}},"is_capped":{"type":"boolean","example":false},"is_cap_active":{"type":"boolean","example":true,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"cap_limit":{"type":"integer","example":500,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"cap_limit_frequency":{"type":"integer","example":1,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"is_hard_cap_active":{"type":"boolean","example":false},"hard_cap_date":{"type":"string","example":null,"nullable":true},"expiration_date":{"type":"string","example":null,"nullable":true},"device":{"type":"string","example":null,"nullable":true},"os":{"type":"string","example":null,"nullable":true},"block_proxies":{"type":"boolean","example":false},"proxy_tolerance":{"type":"string","example":"standard"},"enable_container":{"type":"boolean","example":false},"allow_duplicate_conversions":{"type":"boolean","example":false},"terms":{"type":"string","example":null,"nullable":true},"comment":{"type":"string","example":null,"nullable":true},"converts_on":{"type":"string","example":null,"nullable":true},"converts_on_other":{"type":"string","example":null,"nullable":true},"countries":{"type":"array","example":["US","CA"],"items":{"type":"string"}},"geo_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"geo_redirect_creative_id":{"type":"string","example":null,"nullable":true},"geo_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"expired_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"expired_redirect_creative_id":{"type":"string","example":null,"nullable":true},"expired_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_creative_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_creative_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"device_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"device_redirect_creative_id":{"type":"string","example":null,"nullable":true},"device_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"os_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"os_redirect_creative_id":{"type":"string","example":null,"nullable":true},"os_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-20T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-20T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"put":{"summary":"Update Campaign","operationId":"updateCampaign","description":"Partially updates a campaign by its ID. Only the fields you include\nin the body are updated. `PATCH` and `PUT` are both accepted and behave\nidentically.\n\n**Geo targeting** \u2014 pass `countries` as an array of ISO 3166-1 alpha-2\ncodes. Omit the field to leave geo targeting unchanged; pass `null` to\nclear it and target **all countries**.\n\n**Device & OS targeting** \u2014 pass `device` (`\"mobile\"`, `\"desktop\"`,\n`\"all\"`) and\/or `os` (array of `\"ios\"`, `\"android\"`, `\"windows\"`,\n`\"mac\"`, `\"linux\"`). Pass `null` to clear the restriction.\n\n`caps[].count_pending` may be true right after a write: a counter not yet cached is not\ncomputed inline. The next GET has the number.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":42,"name":"Spring Promo 2026 (updated)","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","description":null,"url":"https:\/\/...","conversion_page_url":"https:\/\/advertiser.example.com\/thank-you","is_incentive":false,"transaction_type":null,"is_rev_share":false,"is_cpc":false,"cpa":12.5,"cpa_rs":null,"payout":18,"currency":"USD","dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"caps":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"is_capped":false,"is_cap_active":true,"cap_limit":500,"cap_limit_frequency":1,"is_hard_cap_active":false,"hard_cap_date":null,"expiration_date":null,"device":null,"os":null,"block_proxies":false,"proxy_tolerance":"standard","enable_container":false,"allow_duplicate_conversions":false,"terms":null,"comment":null,"converts_on":null,"converts_on_other":null,"countries":["US","CA"],"geo_redirect_campaign_id":null,"geo_redirect_creative_id":null,"geo_redirect_smarter_link_id":null,"expired_redirect_campaign_id":null,"expired_redirect_creative_id":null,"expired_redirect_smarter_link_id":null,"campaign_cap_redirect_campaign_id":null,"campaign_cap_redirect_creative_id":null,"campaign_cap_redirect_smarter_link_id":null,"advertiser_cap_redirect_campaign_id":null,"advertiser_cap_redirect_creative_id":null,"advertiser_cap_redirect_smarter_link_id":null,"device_redirect_campaign_id":null,"device_redirect_creative_id":null,"device_redirect_smarter_link_id":null,"os_redirect_campaign_id":null,"os_redirect_creative_id":null,"os_redirect_smarter_link_id":null,"created_at":"2026-04-20T12:00:00Z","updated_at":"2026-05-02T09:15:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":42},"name":{"type":"string","example":"Spring Promo 2026 (updated)"},"advertiser_id":{"type":"integer","example":7},"category_id":{"type":"integer","example":3},"category_name":{"type":"string","example":"Finance"},"offer_type":{"type":"string","example":"public"},"status":{"type":"string","example":"ACTIVE"},"description":{"type":"string","example":null,"nullable":true},"url":{"type":"string","example":"https:\/\/..."},"conversion_page_url":{"type":"string","example":"https:\/\/advertiser.example.com\/thank-you"},"is_incentive":{"type":"boolean","example":false},"transaction_type":{"type":"string","example":null,"nullable":true},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"cpa":{"type":"number","example":12.5},"cpa_rs":{"type":"string","example":null,"nullable":true},"payout":{"type":"number","example":18},"currency":{"type":"string","example":"USD"},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"keep_percentage":{"type":"number","example":100},"dynamic_payout":{"type":"boolean","example":false},"caps":{"type":"array","example":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"items":{"type":"object","properties":{"window":{"type":"string","example":"day"},"metric":{"type":"string","example":"lead"},"limit":{"type":"integer","example":500},"used":{"type":"integer","example":137},"remaining":{"type":"integer","example":363},"is_capped":{"type":"boolean","example":false},"count_pending":{"type":"boolean","example":false}}}},"is_capped":{"type":"boolean","example":false},"is_cap_active":{"type":"boolean","example":true,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"cap_limit":{"type":"integer","example":500,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"cap_limit_frequency":{"type":"integer","example":1,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"is_hard_cap_active":{"type":"boolean","example":false},"hard_cap_date":{"type":"string","example":null,"nullable":true},"expiration_date":{"type":"string","example":null,"nullable":true},"device":{"type":"string","example":null,"nullable":true},"os":{"type":"string","example":null,"nullable":true},"block_proxies":{"type":"boolean","example":false},"proxy_tolerance":{"type":"string","example":"standard"},"enable_container":{"type":"boolean","example":false},"allow_duplicate_conversions":{"type":"boolean","example":false},"terms":{"type":"string","example":null,"nullable":true},"comment":{"type":"string","example":null,"nullable":true},"converts_on":{"type":"string","example":null,"nullable":true},"converts_on_other":{"type":"string","example":null,"nullable":true},"countries":{"type":"array","example":["US","CA"],"items":{"type":"string"}},"geo_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"geo_redirect_creative_id":{"type":"string","example":null,"nullable":true},"geo_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"expired_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"expired_redirect_creative_id":{"type":"string","example":null,"nullable":true},"expired_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_creative_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_creative_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"device_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"device_redirect_creative_id":{"type":"string","example":null,"nullable":true},"device_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"os_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"os_redirect_creative_id":{"type":"string","example":null,"nullable":true},"os_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-20T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-02T09:15:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"cpa":["The cpa must be at least 0."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"cpa":{"type":"array","example":["The cpa must be at least 0."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Campaign status, stored as `expiration_date`. `ACTIVE` clears the expiration date. `EXPIRED` expires the campaign now, or at the past `expiration_date` you send. `EXPIRING` requires an `expiration_date` in the future. Defaults to `ACTIVE` on create.","example":"ACTIVE","enum":["ACTIVE","EXPIRING","EXPIRED"],"nullable":true},"converts_on":{"type":"string","description":"Conversion point. Allowed: `valid_cc_submit` (Valid CC Submit), `valid_lead_submit` (Valid Lead Submit), `valid_trial_entry` (Valid Trial Entry), `install` (Install), `1st_page_submit` (1st Page Submit), `2nd_page_submit` (2nd Page Submit), `unique_click` (Unique Click (CPC)), `other` (Other). `unique_click` is the conversion point of CPC campaigns.","example":"valid_lead_submit","nullable":true},"converts_on_other":{"type":"string","description":"Free-text conversion point. Required when `converts_on` is `other`, cleared otherwise. This field is required when <code>converts_on<\/code> is <code>other<\/code>. Must not be greater than 255 characters.","example":null,"nullable":true},"caps":{"type":"array","description":"","example":null,"items":{"type":"object","properties":{"metric":{"type":"string","description":"","example":"click","enum":["lead","click","cpa","revenue"]},"window":{"type":"integer","description":"","example":4,"enum":[1,2,3,4]},"limit":{"type":"number","description":"Must be at least 0.","example":39}},"required":["metric","window","limit"]}},"dynamic_revenue":{"type":"boolean","description":"CPA campaigns only. Take the revenue from each conversion instead of the fixed `payout`, which is set to 0.","example":false},"dynamic_payout":{"type":"boolean","description":"CPA campaigns only. Take the publisher payout from each conversion instead of the fixed `cpa`, which is set to 0.","example":false},"revenue_source":{"type":"string","description":"Conversion parameter that carries the revenue when `dynamic_revenue` is on: `revenue` (also accepts `cpa` and `payout`) or `order_total`.","example":"revenue","enum":["revenue","order_total"],"nullable":true},"name":{"type":"string","description":"Campaign name. Must not be greater than 255 characters.","example":"Spring Promo 2026 (updated)"},"advertiser_id":{"type":"integer","description":"Advertiser ID.","example":7},"offer_type":{"type":"string","description":"Offer visibility. Allowed: `public`, `private`, `approval`, `tst` (Testing: hidden from publishers).","example":"public","enum":["public","private","approval","tst"]},"description":{"type":"string","description":"Optional campaign description.","example":null,"nullable":true},"category_id":{"type":"integer","description":"Optional category ID.","example":3,"nullable":true},"is_incentive":{"type":"boolean","description":"Whether this is an incentive campaign.","example":false},"url":{"type":"string","description":"Destination \/ preview URL. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/landing","nullable":true},"conversion_page_url":{"type":"string","description":"The page where conversions happen, such as the thank-you page. Publishers' ad platform postbacks report it as the conversion's page (for Meta, `event_source_url`) unless the postback overrides it; publishers never see it here. Leave empty to use each click's landing page. Must be a valid URL. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/thank-you","nullable":true},"comment":{"type":"string","description":"","example":"architecto","nullable":true},"terms":{"type":"string","description":"","example":"architecto","nullable":true},"transaction_type":{"type":"string","description":"","example":"revshare","enum":["cpa","revshare","cpc"]},"cpa":{"type":"number","description":"Amount paid to publishers per conversion. Must be at least 0.","example":13},"is_rev_share":{"type":"boolean","description":"Use revenue share model instead of fixed CPA.","example":false},"is_cpc":{"type":"boolean","description":"","example":false},"cpa_rs":{"type":"number","description":"Revenue share percentage (required when `is_rev_share` is true). Must be at least 0.","example":null,"nullable":true},"payout":{"type":"number","description":"Amount the advertiser pays per conversion. Not required when `dynamic_revenue` is true. Must be at least 0.","example":18.5},"keep_percentage":{"type":"number","description":"The share of the reported sale booked as revenue (above 0, up to 100). Applies to rev share and to dynamic revenue; a rev share still pays the publisher a percentage of the full sale. Send `null` or 100 for the whole sale. Must not be greater than 100.","example":100,"nullable":true},"currency":{"type":"string","description":"ISO 4217 code the campaign's rates and conversions are in. Can't change once the campaign has a click.","example":"USD","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"]},"is_hard_cap_active":{"type":"boolean","description":"Whether the campaign has a hard cap end date.","example":false},"hard_cap_date":{"type":"string","description":"Required when `is_hard_cap_active` is true. Must be a valid date.","example":null,"nullable":true},"is_cap_active":{"type":"boolean","description":"Whether a per-window conversion cap is enforced. Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric.","example":false,"deprecated":true},"cap_limit":{"type":"integer","description":"Conversion cap limit (required when `is_cap_active` is true). Must be at least 0. Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric.","example":null,"nullable":true,"deprecated":true},"cap_limit_frequency":{"type":"integer","description":"Deprecated in favour of `caps`. Window of the lead cap: `day`, `week`, `month` or `total` (or `1`\u2013`4`). Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric.","example":0,"enum":[1,2,3,4],"nullable":true,"deprecated":true},"expiration_date":{"type":"string","description":"Campaign expiration date (ISO 8601). Must be a valid date.","example":"2026-12-31","nullable":true},"device":{"type":"string","description":"Restrict traffic by device type. Allowed: `all`, `desktop`, `mobile`. Omit or pass `null` to allow all devices.","example":"mobile","enum":["all","desktop","mobile"],"nullable":true},"os":{"type":"array","description":"","example":["windows"],"items":{"type":"string","enum":["all","windows","mac","linux","android","ios"]}},"block_proxies":{"type":"boolean","description":"Block proxy\/VPN traffic.","example":false,"nullable":true},"proxy_tolerance":{"type":"string","description":"Proxy detection sensitivity. Allowed: `standard`, `strict`, `relaxed`.","example":"standard","enum":["standard","strict","relaxed"],"nullable":true},"enable_container":{"type":"boolean","description":"Enable container\/pixel tracking on the landing page.","example":false,"nullable":true},"allow_duplicate_conversions":{"type":"boolean","description":"Credit every repeat conversion on the same click ID as its own conversion. Ignored on CPC campaigns.","example":false},"countries":{"type":"array","description":"ISO 3166-1 alpha-2 country code. Must match an existing stored value. Must be 2 characters.","example":["US"],"items":{"type":"string"}},"geo_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect users to when they fail the country filter.","example":null,"nullable":true},"geo_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the geo redirect.","example":null,"nullable":true},"geo_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `geo_redirect_campaign_id`.","example":null,"nullable":true},"expired_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when this campaign is expired.","example":null,"nullable":true},"expired_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the expired redirect.","example":null,"nullable":true},"expired_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `expired_redirect_campaign_id`.","example":null,"nullable":true},"campaign_cap_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when this campaign's cap is reached.","example":null,"nullable":true},"campaign_cap_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the campaign-cap redirect.","example":null,"nullable":true},"campaign_cap_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `campaign_cap_redirect_campaign_id`.","example":null,"nullable":true},"advertiser_cap_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when the advertiser-level cap is reached.","example":null,"nullable":true},"advertiser_cap_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the advertiser-cap redirect.","example":null,"nullable":true},"advertiser_cap_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `advertiser_cap_redirect_campaign_id`.","example":null,"nullable":true},"device_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when the visitor's device is not supported.","example":null,"nullable":true},"device_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the device redirect.","example":null,"nullable":true},"device_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `device_redirect_campaign_id`.","example":null,"nullable":true},"os_redirect_campaign_id":{"type":"integer","description":"Campaign ID to redirect to when the visitor's OS is not supported.","example":null,"nullable":true},"os_redirect_creative_id":{"type":"integer","description":"Optional creative ID for the OS redirect.","example":null,"nullable":true},"os_redirect_smarter_link_id":{"type":"integer","description":"Smarter Link ID to route to instead of a campaign for this redirect. Mutually exclusive with `os_redirect_campaign_id`.","example":null,"nullable":true}}}}}}},"delete":{"summary":"Delete Campaign","operationId":"deleteCampaign","description":"Deletes a campaign that has never had traffic. A campaign with leads, one that another\ncampaign's state redirect or dynamic schedule points to, or one a Smarter Link routes to\nanswers `409` with the reason; expire it instead (`PATCH` with `\"status\": \"EXPIRED\"`).","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Campaign deleted."},"properties":{"message":{"type":"string","example":"Campaign deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"409":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"conflict","message":"Campaigns with traffic history cannot be deleted. Expire the campaign instead."},"properties":{"code":{"type":"string","example":"conflict"},"message":{"type":"string","example":"Campaigns with traffic history cannot be deleted. Expire the campaign instead."}}}}}}},"tags":["Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/duplicate":{"post":{"summary":"Duplicate Campaign","operationId":"duplicateCampaign","description":"Copies a campaign with its settings, countries and caps, plus whatever you list in\n`copy`. The copy starts with offer type `tst` (Testing), hidden from publishers until\nyou change it, exactly as when duplicating from the dashboard.\n\n`copied` counts the rows copied per item; `skipped` explains anything that was left\nbehind, such as publishers outside your manager scope.\n\n`caps[].count_pending` may be true right after a write: a counter not yet cached is not\ncomputed inline. The next GET has the number.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":102,"name":"Spring Promo 2026 (Copy)","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"tst","status":"ACTIVE","description":null,"url":"https:\/\/...","conversion_page_url":"https:\/\/advertiser.example.com\/thank-you","is_incentive":false,"transaction_type":null,"is_rev_share":false,"is_cpc":false,"cpa":12.5,"cpa_rs":null,"payout":18,"currency":"USD","dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"caps":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"is_capped":false,"is_cap_active":true,"cap_limit":500,"cap_limit_frequency":1,"is_hard_cap_active":false,"hard_cap_date":null,"expiration_date":null,"device":null,"os":null,"block_proxies":false,"proxy_tolerance":"standard","enable_container":false,"allow_duplicate_conversions":false,"terms":null,"comment":null,"converts_on":null,"converts_on_other":null,"countries":["US","CA"],"geo_redirect_campaign_id":null,"geo_redirect_creative_id":null,"geo_redirect_smarter_link_id":null,"expired_redirect_campaign_id":null,"expired_redirect_creative_id":null,"expired_redirect_smarter_link_id":null,"campaign_cap_redirect_campaign_id":null,"campaign_cap_redirect_creative_id":null,"campaign_cap_redirect_smarter_link_id":null,"advertiser_cap_redirect_campaign_id":null,"advertiser_cap_redirect_creative_id":null,"advertiser_cap_redirect_smarter_link_id":null,"device_redirect_campaign_id":null,"device_redirect_creative_id":null,"device_redirect_smarter_link_id":null,"os_redirect_campaign_id":null,"os_redirect_creative_id":null,"os_redirect_smarter_link_id":null,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"},"copied":{"events":2},"skipped":[]},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":102},"name":{"type":"string","example":"Spring Promo 2026 (Copy)"},"advertiser_id":{"type":"integer","example":7},"category_id":{"type":"integer","example":3},"category_name":{"type":"string","example":"Finance"},"offer_type":{"type":"string","example":"tst"},"status":{"type":"string","example":"ACTIVE"},"description":{"type":"string","example":null,"nullable":true},"url":{"type":"string","example":"https:\/\/..."},"conversion_page_url":{"type":"string","example":"https:\/\/advertiser.example.com\/thank-you"},"is_incentive":{"type":"boolean","example":false},"transaction_type":{"type":"string","example":null,"nullable":true},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"cpa":{"type":"number","example":12.5},"cpa_rs":{"type":"string","example":null,"nullable":true},"payout":{"type":"number","example":18},"currency":{"type":"string","example":"USD"},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"keep_percentage":{"type":"number","example":100},"dynamic_payout":{"type":"boolean","example":false},"caps":{"type":"array","example":[{"window":"day","metric":"lead","limit":500,"used":137,"remaining":363,"is_capped":false,"count_pending":false}],"items":{"type":"object","properties":{"window":{"type":"string","example":"day"},"metric":{"type":"string","example":"lead"},"limit":{"type":"integer","example":500},"used":{"type":"integer","example":137},"remaining":{"type":"integer","example":363},"is_capped":{"type":"boolean","example":false},"count_pending":{"type":"boolean","example":false}}}},"is_capped":{"type":"boolean","example":false},"is_cap_active":{"type":"boolean","example":true,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"cap_limit":{"type":"integer","example":500,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"cap_limit_frequency":{"type":"integer","example":1,"deprecated":true,"description":"Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric."},"is_hard_cap_active":{"type":"boolean","example":false},"hard_cap_date":{"type":"string","example":null,"nullable":true},"expiration_date":{"type":"string","example":null,"nullable":true},"device":{"type":"string","example":null,"nullable":true},"os":{"type":"string","example":null,"nullable":true},"block_proxies":{"type":"boolean","example":false},"proxy_tolerance":{"type":"string","example":"standard"},"enable_container":{"type":"boolean","example":false},"allow_duplicate_conversions":{"type":"boolean","example":false},"terms":{"type":"string","example":null,"nullable":true},"comment":{"type":"string","example":null,"nullable":true},"converts_on":{"type":"string","example":null,"nullable":true},"converts_on_other":{"type":"string","example":null,"nullable":true},"countries":{"type":"array","example":["US","CA"],"items":{"type":"string"}},"geo_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"geo_redirect_creative_id":{"type":"string","example":null,"nullable":true},"geo_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"expired_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"expired_redirect_creative_id":{"type":"string","example":null,"nullable":true},"expired_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_creative_id":{"type":"string","example":null,"nullable":true},"campaign_cap_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_creative_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"device_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"device_redirect_creative_id":{"type":"string","example":null,"nullable":true},"device_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"os_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"os_redirect_creative_id":{"type":"string","example":null,"nullable":true},"os_redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}},"copied":{"type":"object","properties":{"events":{"type":"integer","example":2}}},"skipped":{"type":"array","example":[]}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"copy.0":["The selected copy.0 is invalid."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"copy.0":{"type":"array","example":["The selected copy.0 is invalid."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the copy. Defaults to the original name followed by \" (Copy)\". Must not be greater than 255 characters.","example":"Spring Promo 2026 (Copy)","nullable":true},"copy":{"type":"array","description":"What to copy besides the campaign itself, its countries and its caps. Allowed: `events`, `creatives`, `email_settings`, `global_postbacks`, `global_pixels`, `all_publisher_payouts`, `publisher_payouts`, `restrictions`, `publisher_caps`, `publisher_access`, `tracking_domains`, `margin_tiers`, `state_redirects`, `clickless`, `groups`, `schedules`, `publisher_schedules`. Options you may not copy (for example publishers outside your manager scope) are skipped and listed in `skipped`.","example":["events"],"items":{"type":"string"}}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign to copy.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/tracking":{"get":{"summary":"Get Campaign Tracking Setup","operationId":"getCampaignTrackingSetup","description":"Returns everything an advertiser needs to report conversions on this\ncampaign \u2014 the same information the campaign page shows in the dashboard:\n\n- `postback_url` \u2014 server-to-server postback (recommended).\n- `clickless_postback_url` \u2014 for advertisers who cannot echo the click ID\n  back. Only returned when clickless conversions are enabled for the\n  campaign's advertiser, otherwise `null`.\n- `pixel_html` \u2014 `<script>` tag for the advertiser's confirmation page.\n- `container_html` \u2014 container tag that renders approved publisher pixels.\n  `container_enabled` reflects the campaign's toggle.\n- `sdk_url` \u2014 the ClickGo SDK, for enhanced\/first-party tracking.\n- `sdk_landing_html` \/ `sdk_conversion_html` \u2014 ready-to-paste ClickGo SDK snippets for the\n  landing page and the conversion page.\n- `components` \u2014 the same values broken out (`tracking_domain`,\n  `conversion_token`, the click-ID and revenue parameter names) for\n  clients that would rather assemble the URLs themselves.\n\nURLs contain `{TOKEN}` placeholders the advertiser substitutes at fire\ntime \u2014 `{CLICK_ID}` is always required. When the campaign's revenue comes\nfrom the conversion (rev share, or CPA with dynamic revenue) a revenue\nparameter is included and `components.revenue_required` is true.\n\nPass `optional_params=true` to receive the URLs with the full optional\ntail (`event_id`, `order_id`, `order_total`, sub IDs) appended.\n\n**Reporting an event** \u2014 append the event's `reporting_param` \/\n`reporting_id` from `GET \/admin\/campaigns\/{id}\/events`, or use that\nevent's own dedicated URLs.","parameters":[{"in":"query","name":"optional_params","description":"Append the optional parameter tail (event_id, order_id, order_total, sub IDs) to the returned URLs. Defaults to false.","example":false,"required":false,"schema":{"type":"boolean","description":"Append the optional parameter tail (event_id, order_id, order_total, sub IDs) to the returned URLs. Defaults to false.","example":false}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"postback_url":"https:\/\/track.example.com\/postback\/abc123?uid={CLICK_ID}","clickless_postback_url":null,"clickless_enabled":false,"pixel_html":"<script src=\"https:\/\/track.example.com\/pixel\/abc123.js?uid={CLICK_ID}\" async><\/script>","container_html":"<script src=\"https:\/\/track.example.com\/container\/abc123.js?uid={CLICK_ID}\" async><\/script>","container_enabled":true,"sdk_url":"https:\/\/track.example.com\/sdk.js?v=2","sdk_landing_html":"<script src=\"https:\/\/track.example.com\/sdk.js?v=2\"><\/script>\n<script>\n  ClickGo.track();\n<\/script>","sdk_conversion_html":"<script src=\"https:\/\/track.example.com\/sdk.js?v=2\"><\/script>\n<script>\n  ClickGo.trackConversion();\n<\/script>","components":{"tracking_domain":"track.example.com","conversion_token":"abc123","click_id_param":"uid","revenue_param_name":null,"revenue_param_token":null,"revenue_required":false,"publisher_payout_param_name":null,"publisher_payout_param_token":null,"publisher_payout_required":false}}},"properties":{"data":{"type":"object","properties":{"postback_url":{"type":"string","example":"https:\/\/track.example.com\/postback\/abc123?uid={CLICK_ID}"},"clickless_postback_url":{"type":"string","example":null,"nullable":true},"clickless_enabled":{"type":"boolean","example":false},"pixel_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/pixel\/abc123.js?uid={CLICK_ID}\" async><\/script>"},"container_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/container\/abc123.js?uid={CLICK_ID}\" async><\/script>"},"container_enabled":{"type":"boolean","example":true},"sdk_url":{"type":"string","example":"https:\/\/track.example.com\/sdk.js?v=2"},"sdk_landing_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/sdk.js?v=2\"><\/script>\n<script>\n  ClickGo.track();\n<\/script>"},"sdk_conversion_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/sdk.js?v=2\"><\/script>\n<script>\n  ClickGo.trackConversion();\n<\/script>"},"components":{"type":"object","properties":{"tracking_domain":{"type":"string","example":"track.example.com"},"conversion_token":{"type":"string","example":"abc123"},"click_id_param":{"type":"string","example":"uid"},"revenue_param_name":{"type":"string","example":null,"nullable":true},"revenue_param_token":{"type":"string","example":null,"nullable":true},"revenue_required":{"type":"boolean","example":false},"publisher_payout_param_name":{"type":"string","example":null,"nullable":true},"publisher_payout_param_token":{"type":"string","example":null,"nullable":true},"publisher_payout_required":{"type":"boolean","example":false}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"no_tracking_domain","message":"No tracking domain is configured for this network."},"properties":{"code":{"type":"string","example":"no_tracking_domain"},"message":{"type":"string","example":"No tracking domain is configured for this network."}}}}}}},"tags":["Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/email-meta\/suppression-file":{"post":{"summary":"Upload Suppression File","operationId":"uploadSuppressionFile","description":"Uploads the campaign's suppression list and sets `suppression_type` to `upload`, replacing\nany text, URL or Optizmo list. Creates the email settings if the campaign has none.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"campaign_id":42,"from_lines":"Acme Deals","subject_lines":"Your reward is waiting","suppression_type":"upload","suppression_value":"suppression_files\/2\/list.zip","suppression_text":null,"suppression_file":"suppression_files\/2\/list.zip","optizmo_optout_id":null,"optizmo_external_access_link":null,"unsubscribe_link":"https:\/\/advertiser.example.com\/unsubscribe","created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-02T09:00:00Z"}},"properties":{"data":{"type":"object","properties":{"campaign_id":{"type":"integer","example":42},"from_lines":{"type":"string","example":"Acme Deals"},"subject_lines":{"type":"string","example":"Your reward is waiting"},"suppression_type":{"type":"string","example":"upload"},"suppression_value":{"type":"string","example":"suppression_files\/2\/list.zip"},"suppression_text":{"type":"string","example":null,"nullable":true},"suppression_file":{"type":"string","example":"suppression_files\/2\/list.zip"},"optizmo_optout_id":{"type":"string","example":null,"nullable":true},"optizmo_external_access_link":{"type":"string","example":null,"nullable":true},"unsubscribe_link":{"type":"string","example":"https:\/\/advertiser.example.com\/unsubscribe"},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-02T09:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Suppression list archive (zip, gzip, 7z or rar), up to 1 GB. Send `multipart\/form-data`. Must be a file. Must not be greater than 1048576 kilobytes."}},"required":["file"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/preview-image":{"post":{"summary":"Set Campaign Preview Image","operationId":"setCampaignPreviewImage","description":"Uploads the preview image publishers see on the offer, or, with `\"capture\": true`, starts a\nscreenshot of the campaign `url` (`processing` is true until it lands). An uploaded image\nis kept; automatic captures only replace other captures.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"preview_image":"https:\/\/cdn.example.com\/uploads\/campaign-previews\/spring.png","source":"user_upload","processing":false}},"properties":{"data":{"type":"object","properties":{"preview_image":{"type":"string","example":"https:\/\/cdn.example.com\/uploads\/campaign-previews\/spring.png"},"source":{"type":"string","example":"user_upload"},"processing":{"type":"boolean","example":false}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"capture":["The campaign needs a url to capture a preview from."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"capture":{"type":"array","example":["The campaign needs a url to capture a preview from."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":false,"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"image":{"type":"string","format":"binary","description":"Preview image to upload: JPEG, PNG, GIF or WebP, up to 10 MB. Send `multipart\/form-data`. This field is required when <code>capture<\/code> is not present. Must be a file. Must be an image. Must not be greater than 10240 kilobytes."},"capture":{"type":"boolean","description":"Send `true` instead of `image` to take a screenshot of the campaign `url` in the background. Must be accepted.","example":null}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/email-meta":{"get":{"summary":"Get Email Meta","operationId":"getEmailMeta","description":"Returns a campaign's email meta information \u2014 from lines, subject lines,\nsuppression configuration and unsubscribe link.\n\nUse this to audit which campaigns are missing suppression or unsubscribe\ndata. Note the difference between the two \"empty\" states:\n\n- `suppression_type: null` \u2014 nothing configured yet (\"Not set\").\n- `suppression_type: \"none\"` \u2014 explicitly no suppression list.\n\n`suppression_value` gives you the configured value whatever the type is,\nso you do not have to know which column backs each one.\n\nEmail meta is stored per campaign, not per creative, and is a\nprerequisite for creating email creatives.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"campaign_id":42,"from_lines":"Acme Deals","subject_lines":"Your reward is waiting","suppression_type":"url","suppression_value":"https:\/\/advertiser.example.com\/suppression.zip","suppression_text":null,"suppression_file":"https:\/\/advertiser.example.com\/suppression.zip","optizmo_optout_id":null,"optizmo_external_access_link":null,"unsubscribe_link":"https:\/\/advertiser.example.com\/unsubscribe","created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"campaign_id":{"type":"integer","example":42},"from_lines":{"type":"string","example":"Acme Deals"},"subject_lines":{"type":"string","example":"Your reward is waiting"},"suppression_type":{"type":"string","example":"url"},"suppression_value":{"type":"string","example":"https:\/\/advertiser.example.com\/suppression.zip"},"suppression_text":{"type":"string","example":null,"nullable":true},"suppression_file":{"type":"string","example":"https:\/\/advertiser.example.com\/suppression.zip"},"optizmo_optout_id":{"type":"string","example":null,"nullable":true},"optizmo_external_access_link":{"type":"string","example":null,"nullable":true},"unsubscribe_link":{"type":"string","example":"https:\/\/advertiser.example.com\/unsubscribe"},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"oneOf":[{"description":"","type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}},{"description":"","type":"object","example":{"code":"no_email_meta","message":"This campaign has no email meta information yet."},"properties":{"code":{"type":"string","example":"no_email_meta"},"message":{"type":"string","example":"This campaign has no email meta information yet."}}}]}}}}},"tags":["Campaigns"]},"put":{"summary":"Update Email Meta","operationId":"updateEmailMeta","description":"Creates or updates a campaign's email meta information. Send only the\nfields you want to change; anything omitted keeps its current value.\n\n**Suppression** \u2014 set `suppression_type` together with its value:\n\n- `text` \u2192 send `suppression_text`\n- `url` \u2192 send `suppression_url`\n- `optizmo` \u2192 send `optizmo_optout_id` **or** `optizmo_external_access_link`\n- `none` \u2192 explicitly no suppression list\n- `null` \u2192 clears it back to \"not set\"\n\nThe `upload` type is read-only through the API: suppression archives are\nup to 1GB and run through a security scan, so uploading one stays in the\ndashboard. An existing uploaded file is preserved unless you change the\ntype.\n\n`PATCH` and `PUT` are both accepted and behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"campaign_id":42,"from_lines":"Acme Deals","subject_lines":"Your reward is waiting","suppression_type":"url","suppression_value":"https:\/\/advertiser.example.com\/suppression.zip","suppression_text":null,"suppression_file":"https:\/\/advertiser.example.com\/suppression.zip","optizmo_optout_id":null,"optizmo_external_access_link":null,"unsubscribe_link":"https:\/\/advertiser.example.com\/unsubscribe","created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-02T09:00:00Z"}},"properties":{"data":{"type":"object","properties":{"campaign_id":{"type":"integer","example":42},"from_lines":{"type":"string","example":"Acme Deals"},"subject_lines":{"type":"string","example":"Your reward is waiting"},"suppression_type":{"type":"string","example":"url"},"suppression_value":{"type":"string","example":"https:\/\/advertiser.example.com\/suppression.zip"},"suppression_text":{"type":"string","example":null,"nullable":true},"suppression_file":{"type":"string","example":"https:\/\/advertiser.example.com\/suppression.zip"},"optizmo_optout_id":{"type":"string","example":null,"nullable":true},"optizmo_external_access_link":{"type":"string","example":null,"nullable":true},"unsubscribe_link":{"type":"string","example":"https:\/\/advertiser.example.com\/unsubscribe"},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-02T09:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"suppression_url":["The suppression url field is required when suppression type is url."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"suppression_url":{"type":"array","example":["The suppression url field is required when suppression type is url."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"from_lines":{"type":"string","description":"From lines the mailer may use, one per line.","example":"Acme Deals\nAcme Rewards","nullable":true},"subject_lines":{"type":"string","description":"Subject lines the mailer may use, one per line.","example":"Your reward is waiting\nDon't miss out","nullable":true},"unsubscribe_link":{"type":"string","description":"Unsubscribe URL required in the mailing footer. May contain tracking tokens (`{PUBLISHER_ID}`) and mailer merge tags (`{{EMAIL}}`). Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/unsubscribe","nullable":true},"suppression_type":{"type":"string","description":"How the suppression list is provided: `text`, `url`, `optizmo`, or `none` (explicitly no list). Send `null` to clear it back to \"not set\". The `upload` type is read-only here \u2014 use the dashboard to upload a suppression file.","example":"url","enum":["text","url","optizmo","none"],"nullable":true},"suppression_text":{"type":"string","description":"Inline suppression list. Required when `suppression_type` is `text`. This field is required when <code>suppression_type<\/code> is <code>text<\/code>.","example":null,"nullable":true},"suppression_url":{"type":"string","description":"External suppression list URL. Required when `suppression_type` is `url`. This field is required when <code>suppression_type<\/code> is <code>url<\/code>. Must be a valid URL. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/suppression.zip","nullable":true},"optizmo_optout_id":{"type":"string","description":"Optizmo optout list ID. Provide this or `optizmo_external_access_link` when `suppression_type` is `optizmo`. Must not be greater than 80 characters.","example":null,"nullable":true},"optizmo_external_access_link":{"type":"string","description":"Optizmo mailer access key. Alternative to `optizmo_optout_id`. Must not be greater than 64 characters.","example":null,"nullable":true}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/events":{"get":{"summary":"List Campaign Events","operationId":"listCampaignEvents","description":"Returns the events configured on a campaign, together with the ID an\nadvertiser reports each one with.\n\n`reporting_param` tells you which query parameter to send \u2014 `event_id`\nnormally, or `adv_event_id` when the event is linked to an\nadvertiser-level event \u2014 and `reporting_id` is the value to send. Append\nthem to the campaign postback, or use the event's own dedicated URLs from\n`GET \/admin\/campaigns\/{id}\/events\/{event_id}\/tracking`.","parameters":[{"in":"query","name":"status","description":"Filter by event status. Allowed: `active`, `expired`.","example":"active","required":false,"schema":{"type":"string","description":"Filter by event status. Allowed: `active`, `expired`.","example":"active"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"event_id":3,"name":"Deposit","status":"active","is_private":false,"payable_status":"payable","cpa":5,"revenue":10,"profit_margin":null,"revshare_percentage":null,"dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"track_multiple":false,"block_conversions":false,"enable_traffic_reporting":false,"enable_container":true,"advertiser_event_id":null,"advertiser_event_name":null,"reporting_param":"event_id","reporting_id":3,"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"event_id":3,"name":"Deposit","status":"active","is_private":false,"payable_status":"payable","cpa":5,"revenue":10,"profit_margin":null,"revshare_percentage":null,"dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"track_multiple":false,"block_conversions":false,"enable_traffic_reporting":false,"enable_container":true,"advertiser_event_id":null,"advertiser_event_name":null,"reporting_param":"event_id","reporting_id":3,"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}],"items":{"type":"object","properties":{"event_id":{"type":"integer","example":3},"name":{"type":"string","example":"Deposit"},"status":{"type":"string","example":"active"},"is_private":{"type":"boolean","example":false},"payable_status":{"type":"string","example":"payable"},"cpa":{"type":"number","example":5},"revenue":{"type":"number","example":10},"profit_margin":{"type":"string","example":null,"nullable":true},"revshare_percentage":{"type":"string","example":null,"nullable":true},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"keep_percentage":{"type":"number","example":100},"dynamic_payout":{"type":"boolean","example":false},"track_multiple":{"type":"boolean","example":false},"block_conversions":{"type":"boolean","example":false},"enable_traffic_reporting":{"type":"boolean","example":false},"enable_container":{"type":"boolean","example":true},"advertiser_event_id":{"type":"string","example":null,"nullable":true},"advertiser_event_name":{"type":"string","example":null,"nullable":true},"reporting_param":{"type":"string","example":"event_id"},"reporting_id":{"type":"integer","example":3},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"post":{"summary":"Create Campaign Event","operationId":"createCampaignEvent","description":"Adds an event to a campaign. Events are post-conversion actions\n(deposits, upsells, subscriptions) an advertiser reports separately from\nthe base conversion.\n\n**Private events** \u2014 set `is_private` to true for admin-only bookkeeping.\nA private event is never visible to publishers, pays no CPA and does not\nrender publisher pixels; those fields are forced regardless of what you\nsend.\n\n**Revenue** \u2014 `payable_status` decides which amounts apply: `cpa` needs\n`cpa` + `revenue`, `rev_share` needs `revshare_percentage`, and\n`not_payable` needs neither. Set `dynamic_revenue` to take the revenue\nfrom the conversion instead of a fixed amount.\n\nUse `GET \/admin\/campaigns\/{id}\/events\/{event_id}\/tracking` afterwards to\nget the URLs the advertiser fires for this event.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"event_id":3,"name":"Deposit","status":"active","is_private":false,"payable_status":"cpa","cpa":5,"revenue":10,"profit_margin":null,"revshare_percentage":null,"dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"track_multiple":false,"block_conversions":false,"enable_traffic_reporting":false,"enable_container":true,"advertiser_event_id":null,"advertiser_event_name":null,"reporting_param":"event_id","reporting_id":3,"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"event_id":{"type":"integer","example":3},"name":{"type":"string","example":"Deposit"},"status":{"type":"string","example":"active"},"is_private":{"type":"boolean","example":false},"payable_status":{"type":"string","example":"cpa"},"cpa":{"type":"number","example":5},"revenue":{"type":"number","example":10},"profit_margin":{"type":"string","example":null,"nullable":true},"revshare_percentage":{"type":"string","example":null,"nullable":true},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"keep_percentage":{"type":"number","example":100},"dynamic_payout":{"type":"boolean","example":false},"track_multiple":{"type":"boolean","example":false},"block_conversions":{"type":"boolean","example":false},"enable_traffic_reporting":{"type":"boolean","example":false},"enable_container":{"type":"boolean","example":true},"advertiser_event_id":{"type":"string","example":null,"nullable":true},"advertiser_event_name":{"type":"string","example":null,"nullable":true},"reporting_param":{"type":"string","example":"event_id"},"reporting_id":{"type":"integer","example":3},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"payable_status":["The selected payable status is invalid."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"payable_status":{"type":"array","example":["The selected payable status is invalid."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Event name shown to publishers. Must not be greater than 255 characters.","example":"Deposit"},"advertiser_event_id":{"type":"integer","description":"Optional advertiser-level event ID (tenant-local) to link this event to.","example":null,"nullable":true},"is_private":{"type":"boolean","description":"Private events are admin-only: publishers never see them and they pay no CPA. Defaults to false.","example":false,"nullable":true},"payable_status":{"type":"string","description":"How the event pays: `cpa` (fixed amount), `rev_share` (percentage) or `not_payable`.","example":"cpa","enum":["not_payable","cpa","rev_share"]},"cpa":{"type":"number","description":"Amount paid to the publisher. Required when `payable_status` is `cpa`; ignored for private events. This field is required when <code>payable_status<\/code> is <code>cpa<\/code>. Must be at least 0.","example":5,"nullable":true},"revenue":{"type":"number","description":"Amount the advertiser pays you. Required when `payable_status` is `cpa`, unless `dynamic_revenue` is true. This field is required when <code>payable_status<\/code> is <code>cpa<\/code>. Must be at least 0.","example":10,"nullable":true},"revshare_percentage":{"type":"number","description":"Publisher share (0\u2013100). Required when `payable_status` is `rev_share`. This field is required when <code>payable_status<\/code> is <code>rev_share<\/code>. Must be at least 0. Must not be greater than 100.","example":null,"nullable":true},"dynamic_revenue":{"type":"boolean","description":"Revenue comes from the conversion instead of a fixed amount. Defaults to false.","example":false,"nullable":true},"dynamic_payout":{"type":"boolean","description":"The publisher's payout comes from the conversion's `publisher_payout` parameter instead of a fixed rate. Defaults to false.","example":false,"nullable":true},"revenue_source":{"type":"string","description":"Which conversion parameter carries the revenue: `revenue` or `order_total`. Defaults to `revenue`.","example":"revenue","enum":["revenue","order_total"],"nullable":true},"keep_percentage":{"type":"number","description":"The share of the reported sale booked as revenue (above 0, up to 100). Applies to `rev_share` events and dynamic-revenue `cpa` events; a rev share still pays the publisher a percentage of the full sale. Defaults to 100. Must not be greater than 100.","example":100,"nullable":true},"status":{"type":"string","description":"Event status: `active` or `expired`. Defaults to `active`.","example":"active","enum":["active","expired"],"nullable":true},"track_multiple":{"type":"boolean","description":"Allow the event to fire more than once per click. Defaults to false.","example":false,"nullable":true},"block_conversions":{"type":"boolean","description":"Block the base conversion when this event fires. Defaults to false.","example":false,"nullable":true},"enable_traffic_reporting":{"type":"boolean","description":"Include this event in traffic reporting. Defaults to false.","example":false,"nullable":true},"enable_container":{"type":"boolean","description":"Render approved publisher pixels through the event container. Defaults to true.","example":true,"nullable":true}},"required":["name","payable_status"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/events\/{event_id}":{"put":{"summary":"Update Campaign Event","operationId":"updateCampaignEvent","description":"Partially updates a campaign event \u2014 send only the fields you want to\nchange. Anything you omit keeps its current value, and cross-field rules\nare validated against the resulting state (so switching `payable_status`\nto `rev_share` only needs `revshare_percentage`).\n\nSetting `is_private` to true forces `cpa` and `revshare_percentage` to 0\nand disables the event container, regardless of what you send.\n\n`PATCH` and `PUT` are both accepted and behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"event_id":3,"name":"Deposit (updated)","status":"active","is_private":false,"payable_status":"cpa","cpa":7.5,"revenue":15,"profit_margin":null,"revshare_percentage":null,"dynamic_revenue":false,"revenue_source":"revenue","keep_percentage":100,"dynamic_payout":false,"track_multiple":false,"block_conversions":false,"enable_traffic_reporting":false,"enable_container":true,"advertiser_event_id":null,"advertiser_event_name":null,"reporting_param":"event_id","reporting_id":3,"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-02T09:00:00Z"}},"properties":{"data":{"type":"object","properties":{"event_id":{"type":"integer","example":3},"name":{"type":"string","example":"Deposit (updated)"},"status":{"type":"string","example":"active"},"is_private":{"type":"boolean","example":false},"payable_status":{"type":"string","example":"cpa"},"cpa":{"type":"number","example":7.5},"revenue":{"type":"number","example":15},"profit_margin":{"type":"string","example":null,"nullable":true},"revshare_percentage":{"type":"string","example":null,"nullable":true},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"keep_percentage":{"type":"number","example":100},"dynamic_payout":{"type":"boolean","example":false},"track_multiple":{"type":"boolean","example":false},"block_conversions":{"type":"boolean","example":false},"enable_traffic_reporting":{"type":"boolean","example":false},"enable_container":{"type":"boolean","example":true},"advertiser_event_id":{"type":"string","example":null,"nullable":true},"advertiser_event_name":{"type":"string","example":null,"nullable":true},"reporting_param":{"type":"string","example":"event_id"},"reporting_id":{"type":"integer","example":3},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-02T09:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign event not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign event not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"revshare_percentage":["The revshare percentage field is required when payable status is rev_share."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"revshare_percentage":{"type":"array","example":["The revshare percentage field is required when payable status is rev_share."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Event name shown to publishers. Must not be greater than 255 characters.","example":"Deposit"},"advertiser_event_id":{"type":"integer","description":"Optional advertiser-level event ID (tenant-local) to link this event to.","example":null,"nullable":true},"is_private":{"type":"boolean","description":"Private events are admin-only: publishers never see them and they pay no CPA. Defaults to false.","example":false,"nullable":true},"payable_status":{"type":"string","description":"How the event pays: `cpa` (fixed amount), `rev_share` (percentage) or `not_payable`.","example":"cpa","enum":["not_payable","cpa","rev_share"]},"cpa":{"type":"number","description":"Amount paid to the publisher. Required when `payable_status` is `cpa`; ignored for private events. This field is required when <code>payable_status<\/code> is <code>cpa<\/code>. Must be at least 0.","example":5,"nullable":true},"revenue":{"type":"number","description":"Amount the advertiser pays you. Required when `payable_status` is `cpa`, unless `dynamic_revenue` is true. This field is required when <code>payable_status<\/code> is <code>cpa<\/code>. Must be at least 0.","example":10,"nullable":true},"revshare_percentage":{"type":"number","description":"Publisher share (0\u2013100). Required when `payable_status` is `rev_share`. This field is required when <code>payable_status<\/code> is <code>rev_share<\/code>. Must be at least 0. Must not be greater than 100.","example":null,"nullable":true},"dynamic_revenue":{"type":"boolean","description":"Revenue comes from the conversion instead of a fixed amount. Defaults to false.","example":false,"nullable":true},"dynamic_payout":{"type":"boolean","description":"The publisher's payout comes from the conversion's `publisher_payout` parameter instead of a fixed rate. Defaults to false.","example":false,"nullable":true},"revenue_source":{"type":"string","description":"Which conversion parameter carries the revenue: `revenue` or `order_total`. Defaults to `revenue`.","example":"revenue","enum":["revenue","order_total"],"nullable":true},"keep_percentage":{"type":"number","description":"The share of the reported sale booked as revenue (above 0, up to 100). Applies to `rev_share` events and dynamic-revenue `cpa` events; a rev share still pays the publisher a percentage of the full sale. Defaults to 100. Must not be greater than 100.","example":100,"nullable":true},"status":{"type":"string","description":"Event status: `active` or `expired`. Defaults to `active`.","example":"active","enum":["active","expired"],"nullable":true},"track_multiple":{"type":"boolean","description":"Allow the event to fire more than once per click. Defaults to false.","example":false,"nullable":true},"block_conversions":{"type":"boolean","description":"Block the base conversion when this event fires. Defaults to false.","example":false,"nullable":true},"enable_traffic_reporting":{"type":"boolean","description":"Include this event in traffic reporting. Defaults to false.","example":false,"nullable":true},"enable_container":{"type":"boolean","description":"Render approved publisher pixels through the event container. Defaults to true.","example":true,"nullable":true}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"event_id","description":"The ID of the event.","example":3,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/events\/{event_id}\/tracking":{"get":{"summary":"Get Campaign Event Tracking Setup","operationId":"getCampaignEventTrackingSetup","description":"Returns the postback, pixel and container URLs dedicated to a single\ncampaign event \u2014 the event equivalent of\n`GET \/admin\/campaigns\/{id}\/tracking`.\n\nThese URLs already identify the event, so nothing extra needs to be\nappended. The alternative is to fire the campaign-level postback with the\nevent's `reporting_param` \/ `reporting_id` (see\n`GET \/admin\/campaigns\/{id}\/events`).\n\n**Linked events** \u2014 when the event is linked to an advertiser-level event,\nthe advertiser-level URLs are returned instead of the event's own, and\n`advertiser_event_name` is populated. This is intentional: handing over\nthe narrower URL would defeat the link.\n\n`sdk_conversion_html` fires the event from the advertiser's page with the\nClickGo SDK (`eventId`, or `advEventId` for a linked event).\n\nPass `optional_params=true` to receive the URLs with the optional tail\n(`order_id`, `order_total`, sub IDs) appended.","parameters":[{"in":"query","name":"optional_params","description":"Append the optional parameter tail (order_id, order_total, sub IDs) to the returned URLs. Defaults to false.","example":false,"required":false,"schema":{"type":"boolean","description":"Append the optional parameter tail (order_id, order_total, sub IDs) to the returned URLs. Defaults to false.","example":false}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"postback_url":"https:\/\/track.example.com\/event\/postback\/ev123?uid={CLICK_ID}","pixel_html":"<script src=\"https:\/\/track.example.com\/event\/pixel\/ev123.js?uid={CLICK_ID}\" async><\/script>","container_html":"<script src=\"https:\/\/track.example.com\/event\/container\/ev123.js?uid={CLICK_ID}\" async><\/script>","clickless_postback_url":null,"clickless_enabled":false,"advertiser_event_name":null,"reporting_param":"event_id","reporting_id":3,"sdk_url":"https:\/\/track.example.com\/sdk.js?v=2","sdk_conversion_html":"<script src=\"https:\/\/track.example.com\/sdk.js?v=2\"><\/script>\n<script>\n  ClickGo.trackEvent({\n    eventId: 3\n  });\n<\/script>","components":{"tracking_domain":"track.example.com","conversion_token":"ev123","click_id_param":"uid","revenue_param_name":null,"revenue_param_token":null,"revenue_required":false,"publisher_payout_param_name":null,"publisher_payout_param_token":null,"publisher_payout_required":false}}},"properties":{"data":{"type":"object","properties":{"postback_url":{"type":"string","example":"https:\/\/track.example.com\/event\/postback\/ev123?uid={CLICK_ID}"},"pixel_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/event\/pixel\/ev123.js?uid={CLICK_ID}\" async><\/script>"},"container_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/event\/container\/ev123.js?uid={CLICK_ID}\" async><\/script>"},"clickless_postback_url":{"type":"string","example":null,"nullable":true},"clickless_enabled":{"type":"boolean","example":false},"advertiser_event_name":{"type":"string","example":null,"nullable":true},"reporting_param":{"type":"string","example":"event_id"},"reporting_id":{"type":"integer","example":3},"sdk_url":{"type":"string","example":"https:\/\/track.example.com\/sdk.js?v=2"},"sdk_conversion_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/sdk.js?v=2\"><\/script>\n<script>\n  ClickGo.trackEvent({\n    eventId: 3\n  });\n<\/script>"},"components":{"type":"object","properties":{"tracking_domain":{"type":"string","example":"track.example.com"},"conversion_token":{"type":"string","example":"ev123"},"click_id_param":{"type":"string","example":"uid"},"revenue_param_name":{"type":"string","example":null,"nullable":true},"revenue_param_token":{"type":"string","example":null,"nullable":true},"revenue_required":{"type":"boolean","example":false},"publisher_payout_param_name":{"type":"string","example":null,"nullable":true},"publisher_payout_param_token":{"type":"string","example":null,"nullable":true},"publisher_payout_required":{"type":"boolean","example":false}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign event not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign event not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"no_tracking_domain","message":"No tracking domain is configured for this network."},"properties":{"code":{"type":"string","example":"no_tracking_domain"},"message":{"type":"string","example":"No tracking domain is configured for this network."}}}}}}},"tags":["Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"event_id","description":"The ID of the event.","example":3,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/publishers":{"get":{"summary":"List Campaign Publishers","operationId":"listCampaignPublishers","description":"Returns a paginated list of publishers that have been granted access to a\nprivate (`private`) or approval-only (`approval`) campaign. For public\ncampaigns this endpoint returns a 422 since access is not gated.","parameters":[{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"publisher_id":55,"publisher_name":"John Doe","publisher_email":"john@publisher.example.com","granted_at":"2026-05-01T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"publisher_id":55,"publisher_name":"John Doe","publisher_email":"john@publisher.example.com","granted_at":"2026-05-01T12:00:00Z"}],"items":{"type":"object","properties":{"publisher_id":{"type":"integer","example":55},"publisher_name":{"type":"string","example":"John Doe"},"publisher_email":{"type":"string","example":"john@publisher.example.com"},"granted_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"invalid_offer_type","message":"Campaign is not a private or approval-only offer."},"properties":{"code":{"type":"string","example":"invalid_offer_type"},"message":{"type":"string","example":"Campaign is not a private or approval-only offer."}}}}}}},"tags":["Campaigns"]},"post":{"summary":"Add Publisher to Campaign","operationId":"addPublisherToCampaign","description":"Grants a publisher access to a private (`private`) or approval-only\n(`approval`) campaign. For private campaigns this creates a private\noffer grant; for approval-only campaigns the publisher's offer request\nis approved (or created pre-approved if none exists). Public campaigns\nreturn a 422 since access is not gated.\n\nPublishers with an active restriction on the campaign or its advertiser\ncannot be granted access.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"publisher_id":55,"publisher_name":"John Doe","publisher_email":"john@publisher.example.com","granted_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"publisher_id":{"type":"integer","example":55},"publisher_name":{"type":"string","example":"John Doe"},"publisher_email":{"type":"string","example":"john@publisher.example.com"},"granted_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"oneOf":[{"description":"","type":"object","example":{"code":"invalid_offer_type","message":"Campaign is not a private or approval-only offer."},"properties":{"code":{"type":"string","example":"invalid_offer_type"},"message":{"type":"string","example":"Campaign is not a private or approval-only offer."}}},{"description":"","type":"object","example":{"code":"publisher_restricted","message":"Publisher has restrictions associated with this campaign or its advertiser."},"properties":{"code":{"type":"string","example":"publisher_restricted"},"message":{"type":"string","example":"Publisher has restrictions associated with this campaign or its advertiser."}}},{"description":"","type":"object","example":{"code":"already_granted","message":"Publisher already has access to this campaign."},"properties":{"code":{"type":"string","example":"already_granted"},"message":{"type":"string","example":"Publisher already has access to this campaign."}}}]}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local) to grant access to the campaign.","example":55}},"required":["publisher_id"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/publishers\/{publisher_id}":{"delete":{"summary":"Remove Publisher from Campaign","operationId":"removePublisherFromCampaign","description":"Revokes a publisher's access to a private or approval-only campaign.\nRemoves both the private offer grant and any offer request the\npublisher has on the campaign.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Publisher access revoked."},"properties":{"message":{"type":"string","example":"Publisher access revoked."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher does not have access to this campaign."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher does not have access to this campaign."}}}}}}},"tags":["Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"publisher_id","description":"The ID of the publisher.","example":55,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/publisher-caps":{"get":{"summary":"List Publisher Caps","operationId":"listPublisherCaps","description":"Caps that limit one publisher on this campaign, with live usage. They apply on top of the\ncampaign's own `caps`.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":14,"publisher_id":55,"metric":"lead","window":"day","limit":100,"is_active":true,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"used":12,"remaining":88,"is_capped":false,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":14,"publisher_id":55,"metric":"lead","window":"day","limit":100,"is_active":true,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"used":12,"remaining":88,"is_capped":false,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":14},"publisher_id":{"type":"integer","example":55},"metric":{"type":"string","example":"lead"},"window":{"type":"string","example":"day"},"limit":{"type":"integer","example":100},"is_active":{"type":"boolean","example":true},"redirect_campaign_id":{"type":"integer","example":43},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"used":{"type":"integer","example":12},"remaining":{"type":"integer","example":88},"is_capped":{"type":"boolean","example":false},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"post":{"summary":"Create Publisher Caps","operationId":"createPublisherCaps","description":"Caps each publisher in `publisher_ids` on this campaign. A publisher that already has a cap\non the same metric and window gets it updated instead, as on the dashboard.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":14,"publisher_id":55,"metric":"lead","window":"day","limit":100,"is_active":true,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"used":12,"remaining":88,"is_capped":false,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":14,"publisher_id":55,"metric":"lead","window":"day","limit":100,"is_active":true,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"used":12,"remaining":88,"is_capped":false,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":14},"publisher_id":{"type":"integer","example":55},"metric":{"type":"string","example":"lead"},"window":{"type":"string","example":"day"},"limit":{"type":"integer","example":100},"is_active":{"type":"boolean","example":true},"redirect_campaign_id":{"type":"integer","example":43},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"used":{"type":"integer","example":12},"remaining":{"type":"integer","example":88},"is_capped":{"type":"boolean","example":false},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"cap_window":{"type":"integer","description":"","example":2,"enum":[1,2,3,4]},"metric":{"type":"string","description":"`lead`, `click`, `cpa` or `revenue`.","example":"lead","enum":["lead","click","cpa","revenue"]},"cap_limit":{"type":"number","description":"Must be at least 0. Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric.","example":27,"deprecated":true},"is_active":{"type":"boolean","description":"Whether the cap is enforced. Defaults to true.","example":true,"nullable":true},"redirect_campaign_id":{"type":"string","description":"Where the publisher's traffic goes once capped. Required unless the campaign has a cap redirect or `redirect_smarter_link_id` is sent. The campaign's own ID sends it to the invalid page.","example":43},"redirect_creative_id":{"type":"integer","description":"Optional creative of the redirect campaign.","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"integer","description":"Smarter Link to send capped traffic to instead.","example":null,"nullable":true},"window":{"type":"string","description":"`day`, `week`, `month` or `total`, in the network timezone.","example":"day"},"limit":{"type":"string","description":"Limit for the window.","example":100},"publisher_ids":{"type":"array","description":"","example":[16],"items":{"type":"integer"}}},"required":["cap_window","metric","cap_limit","redirect_campaign_id","window","limit","publisher_ids"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/publisher-caps\/{capId}":{"put":{"summary":"Update Publisher Cap","operationId":"updatePublisherCap","description":"Changes a publisher cap; its publisher stays the same. Send only the fields to change.\n`PATCH` and `PUT` are both accepted and behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":14,"publisher_id":55,"metric":"lead","window":"day","limit":100,"is_active":true,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"used":12,"remaining":88,"is_capped":false,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":14},"publisher_id":{"type":"integer","example":55},"metric":{"type":"string","example":"lead"},"window":{"type":"string","example":"day"},"limit":{"type":"integer","example":100},"is_active":{"type":"boolean","example":true},"redirect_campaign_id":{"type":"integer","example":43},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"used":{"type":"integer","example":12},"remaining":{"type":"integer","example":88},"is_capped":{"type":"boolean","example":false},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"cap_window":{"type":"integer","description":"","example":1,"enum":[1,2,3,4]},"metric":{"type":"string","description":"`lead`, `click`, `cpa` or `revenue`.","example":"lead","enum":["lead","click","cpa","revenue"]},"cap_limit":{"type":"number","description":"Must be at least 0. Deprecated: describes only a single lead cap. Read `caps` instead, which covers every window and metric.","example":27,"deprecated":true},"is_active":{"type":"boolean","description":"Whether the cap is enforced. Defaults to true.","example":true,"nullable":true},"redirect_campaign_id":{"type":"string","description":"Where the publisher's traffic goes once capped. Required unless the campaign has a cap redirect or `redirect_smarter_link_id` is sent. The campaign's own ID sends it to the invalid page.","example":43,"nullable":true},"redirect_creative_id":{"type":"integer","description":"Optional creative of the redirect campaign.","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"integer","description":"Smarter Link to send capped traffic to instead.","example":null,"nullable":true},"window":{"type":"string","description":"`day`, `week`, `month` or `total`, in the network timezone.","example":"day"},"limit":{"type":"string","description":"Limit for the window.","example":100}}}}}}},"delete":{"summary":"Delete Publisher Cap","operationId":"deletePublisherCap","description":"","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Publisher cap deleted."},"properties":{"message":{"type":"string","example":"Publisher cap deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"capId","description":"The ID of the publisher cap.","example":14,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/state-redirects":{"get":{"summary":"List State Redirects","operationId":"listStateRedirects","description":"Where visitors from given US states are sent instead of the campaign.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":5,"campaign_id":42,"states":["CA","NY"],"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":5,"campaign_id":42,"states":["CA","NY"],"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":5},"campaign_id":{"type":"integer","example":42},"states":{"type":"array","example":["CA","NY"],"items":{"type":"string"}},"redirect_campaign_id":{"type":"integer","example":43},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"post":{"summary":"Create State Redirect","operationId":"createStateRedirect","description":"Sends visitors from the listed US states to another campaign or a Smarter Link.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":5,"campaign_id":42,"states":["CA","NY"],"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":5},"campaign_id":{"type":"integer","example":42},"states":{"type":"array","example":["CA","NY"],"items":{"type":"string"}},"redirect_campaign_id":{"type":"integer","example":43},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"","example":16},"states":{"type":"array","description":"","example":["TX"],"items":{"type":"string","enum":["AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY","AE","AA","AP"]}},"redirect_campaign_id":{"type":"integer","description":"Campaign to send visitors from those states to. Required unless `redirect_smarter_link_id` is sent.","example":43},"redirect_creative_id":{"type":"integer","description":"Optional creative of the redirect campaign.","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"integer","description":"Smarter Link to send them to instead of a campaign.","example":null,"nullable":true}},"required":["campaign_id","states","redirect_campaign_id"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/state-redirects\/{redirectId}":{"put":{"summary":"Update State Redirect","operationId":"updateStateRedirect","description":"Replaces the states and the target of a state redirect; send the full body. `PATCH` and\n`PUT` are both accepted and behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":5,"campaign_id":42,"states":["CA","NY"],"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":5},"campaign_id":{"type":"integer","example":42},"states":{"type":"array","example":["CA","NY"],"items":{"type":"string"}},"redirect_campaign_id":{"type":"integer","example":43},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"","example":16},"campaign_id":{"type":"integer","description":"","example":16},"states":{"type":"array","description":"","example":["ME"],"items":{"type":"string","enum":["AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY","AE","AA","AP"]}},"redirect_campaign_id":{"type":"integer","description":"Campaign to send visitors from those states to. Required unless `redirect_smarter_link_id` is sent.","example":43},"redirect_creative_id":{"type":"integer","description":"Optional creative of the redirect campaign.","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"integer","description":"Smarter Link to send them to instead of a campaign.","example":null,"nullable":true}},"required":["id","campaign_id","states","redirect_campaign_id"]}}}}},"delete":{"summary":"Delete State Redirect","operationId":"deleteStateRedirect","description":"","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"State redirect deleted."},"properties":{"message":{"type":"string","example":"State redirect deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"redirectId","description":"The ID of the state redirect.","example":5,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/dynamic-schedules":{"get":{"summary":"List Dynamic Schedules","operationId":"listDynamicSchedules","description":"Time windows during which the campaign redirects its traffic or pays different rates,\nfor every publisher or one.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":8,"campaign_id":42,"publisher_id":55,"device":"all","days":[1,2,3,4,5],"time_start":"09:00","time_end":"17:00","tz":"America\/New_York","type":"cost","redirect_campaign_id":null,"redirect_creative_id":null,"redirect_smarter_link_id":null,"custom_cpa":15,"custom_payout":20,"custom_revshare":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":8,"campaign_id":42,"publisher_id":55,"device":"all","days":[1,2,3,4,5],"time_start":"09:00","time_end":"17:00","tz":"America\/New_York","type":"cost","redirect_campaign_id":null,"redirect_creative_id":null,"redirect_smarter_link_id":null,"custom_cpa":15,"custom_payout":20,"custom_revshare":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":8},"campaign_id":{"type":"integer","example":42},"publisher_id":{"type":"integer","example":55},"device":{"type":"string","example":"all"},"days":{"type":"array","example":[1,2,3,4,5],"items":{"type":"integer"}},"time_start":{"type":"string","example":"09:00"},"time_end":{"type":"string","example":"17:00"},"tz":{"type":"string","example":"America\/New_York"},"type":{"type":"string","example":"cost"},"redirect_campaign_id":{"type":"string","example":null,"nullable":true},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"custom_cpa":{"type":"integer","example":15},"custom_payout":{"type":"integer","example":20},"custom_revshare":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"post":{"summary":"Create Dynamic Schedule","operationId":"createDynamicSchedule","description":"Creates one schedule per publisher in `publisher_ids`, or one for every publisher when it is\nleft out, as the dashboard does. A schedule identical to an existing one answers `422`.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":8,"campaign_id":42,"publisher_id":55,"device":"all","days":[1,2,3,4,5],"time_start":"09:00","time_end":"17:00","tz":"America\/New_York","type":"cost","redirect_campaign_id":null,"redirect_creative_id":null,"redirect_smarter_link_id":null,"custom_cpa":15,"custom_payout":20,"custom_revshare":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":8,"campaign_id":42,"publisher_id":55,"device":"all","days":[1,2,3,4,5],"time_start":"09:00","time_end":"17:00","tz":"America\/New_York","type":"cost","redirect_campaign_id":null,"redirect_creative_id":null,"redirect_smarter_link_id":null,"custom_cpa":15,"custom_payout":20,"custom_revshare":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":8},"campaign_id":{"type":"integer","example":42},"publisher_id":{"type":"integer","example":55},"device":{"type":"string","example":"all"},"days":{"type":"array","example":[1,2,3,4,5],"items":{"type":"integer"}},"time_start":{"type":"string","example":"09:00"},"time_end":{"type":"string","example":"17:00"},"tz":{"type":"string","example":"America\/New_York"},"type":{"type":"string","example":"cost"},"redirect_campaign_id":{"type":"string","example":null,"nullable":true},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"custom_cpa":{"type":"integer","example":15},"custom_payout":{"type":"integer","example":20},"custom_revshare":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"","example":16},"publisher_ids":{"type":"array","description":"","example":[16],"items":{"type":"integer"}},"device":{"type":"string","description":"Devices the schedule applies to: `all`, `desktop` or `mobile`.","example":"all","enum":["all","desktop","mobile"]},"days":{"type":"array","description":"Must be at least 0. Must not be greater than 6.","example":[4],"items":{"type":"integer"}},"time_start":{"type":"string","description":"Start time, `HH:MM`, in `tz`.","example":"09:00"},"time_end":{"type":"string","description":"End time, `HH:MM`, in `tz`.","example":"17:00"},"tz":{"type":"string","description":"IANA timezone of the times.","example":"America\/New_York","enum":["Africa\/Abidjan","Africa\/Accra","Africa\/Addis_Ababa","Africa\/Algiers","Africa\/Asmara","Africa\/Bamako","Africa\/Bangui","Africa\/Banjul","Africa\/Bissau","Africa\/Blantyre","Africa\/Brazzaville","Africa\/Bujumbura","Africa\/Cairo","Africa\/Casablanca","Africa\/Ceuta","Africa\/Conakry","Africa\/Dakar","Africa\/Dar_es_Salaam","Africa\/Djibouti","Africa\/Douala","Africa\/El_Aaiun","Africa\/Freetown","Africa\/Gaborone","Africa\/Harare","Africa\/Johannesburg","Africa\/Juba","Africa\/Kampala","Africa\/Khartoum","Africa\/Kigali","Africa\/Kinshasa","Africa\/Lagos","Africa\/Libreville","Africa\/Lome","Africa\/Luanda","Africa\/Lubumbashi","Africa\/Lusaka","Africa\/Malabo","Africa\/Maputo","Africa\/Maseru","Africa\/Mbabane","Africa\/Mogadishu","Africa\/Monrovia","Africa\/Nairobi","Africa\/Ndjamena","Africa\/Niamey","Africa\/Nouakchott","Africa\/Ouagadougou","Africa\/Porto-Novo","Africa\/Sao_Tome","Africa\/Tripoli","Africa\/Tunis","Africa\/Windhoek","America\/Adak","America\/Anchorage","America\/Anguilla","America\/Antigua","America\/Araguaina","America\/Argentina\/Buenos_Aires","America\/Argentina\/Catamarca","America\/Argentina\/Cordoba","America\/Argentina\/Jujuy","America\/Argentina\/La_Rioja","America\/Argentina\/Mendoza","America\/Argentina\/Rio_Gallegos","America\/Argentina\/Salta","America\/Argentina\/San_Juan","America\/Argentina\/San_Luis","America\/Argentina\/Tucuman","America\/Argentina\/Ushuaia","America\/Aruba","America\/Asuncion","America\/Atikokan","America\/Bahia","America\/Bahia_Banderas","America\/Barbados","America\/Belem","America\/Belize","America\/Blanc-Sablon","America\/Boa_Vista","America\/Bogota","America\/Boise","America\/Cambridge_Bay","America\/Campo_Grande","America\/Cancun","America\/Caracas","America\/Cayenne","America\/Cayman","America\/Chicago","America\/Chihuahua","America\/Ciudad_Juarez","America\/Costa_Rica","America\/Coyhaique","America\/Creston","America\/Cuiaba","America\/Curacao","America\/Danmarkshavn","America\/Dawson","America\/Dawson_Creek","America\/Denver","America\/Detroit","America\/Dominica","America\/Edmonton","America\/Eirunepe","America\/El_Salvador","America\/Fort_Nelson","America\/Fortaleza","America\/Glace_Bay","America\/Goose_Bay","America\/Grand_Turk","America\/Grenada","America\/Guadeloupe","America\/Guatemala","America\/Guayaquil","America\/Guyana","America\/Halifax","America\/Havana","America\/Hermosillo","America\/Indiana\/Indianapolis","America\/Indiana\/Knox","America\/Indiana\/Marengo","America\/Indiana\/Petersburg","America\/Indiana\/Tell_City","America\/Indiana\/Vevay","America\/Indiana\/Vincennes","America\/Indiana\/Winamac","America\/Inuvik","America\/Iqaluit","America\/Jamaica","America\/Juneau","America\/Kentucky\/Louisville","America\/Kentucky\/Monticello","America\/Kralendijk","America\/La_Paz","America\/Lima","America\/Los_Angeles","America\/Lower_Princes","America\/Maceio","America\/Managua","America\/Manaus","America\/Marigot","America\/Martinique","America\/Matamoros","America\/Mazatlan","America\/Menominee","America\/Merida","America\/Metlakatla","America\/Mexico_City","America\/Miquelon","America\/Moncton","America\/Monterrey","America\/Montevideo","America\/Montserrat","America\/Nassau","America\/New_York","America\/Nome","America\/Noronha","America\/North_Dakota\/Beulah","America\/North_Dakota\/Center","America\/North_Dakota\/New_Salem","America\/Nuuk","America\/Ojinaga","America\/Panama","America\/Paramaribo","America\/Phoenix","America\/Port-au-Prince","America\/Port_of_Spain","America\/Porto_Velho","America\/Puerto_Rico","America\/Punta_Arenas","America\/Rankin_Inlet","America\/Recife","America\/Regina","America\/Resolute","America\/Rio_Branco","America\/Santarem","America\/Santiago","America\/Santo_Domingo","America\/Sao_Paulo","America\/Scoresbysund","America\/Sitka","America\/St_Barthelemy","America\/St_Johns","America\/St_Kitts","America\/St_Lucia","America\/St_Thomas","America\/St_Vincent","America\/Swift_Current","America\/Tegucigalpa","America\/Thule","America\/Tijuana","America\/Toronto","America\/Tortola","America\/Vancouver","America\/Whitehorse","America\/Winnipeg","America\/Yakutat","Antarctica\/Casey","Antarctica\/Davis","Antarctica\/DumontDUrville","Antarctica\/Macquarie","Antarctica\/Mawson","Antarctica\/McMurdo","Antarctica\/Palmer","Antarctica\/Rothera","Antarctica\/Syowa","Antarctica\/Troll","Antarctica\/Vostok","Arctic\/Longyearbyen","Asia\/Aden","Asia\/Almaty","Asia\/Amman","Asia\/Anadyr","Asia\/Aqtau","Asia\/Aqtobe","Asia\/Ashgabat","Asia\/Atyrau","Asia\/Baghdad","Asia\/Bahrain","Asia\/Baku","Asia\/Bangkok","Asia\/Barnaul","Asia\/Beirut","Asia\/Bishkek","Asia\/Brunei","Asia\/Chita","Asia\/Colombo","Asia\/Damascus","Asia\/Dhaka","Asia\/Dili","Asia\/Dubai","Asia\/Dushanbe","Asia\/Famagusta","Asia\/Gaza","Asia\/Hebron","Asia\/Ho_Chi_Minh","Asia\/Hong_Kong","Asia\/Hovd","Asia\/Irkutsk","Asia\/Jakarta","Asia\/Jayapura","Asia\/Jerusalem","Asia\/Kabul","Asia\/Kamchatka","Asia\/Karachi","Asia\/Kathmandu","Asia\/Khandyga","Asia\/Kolkata","Asia\/Krasnoyarsk","Asia\/Kuala_Lumpur","Asia\/Kuching","Asia\/Kuwait","Asia\/Macau","Asia\/Magadan","Asia\/Makassar","Asia\/Manila","Asia\/Muscat","Asia\/Nicosia","Asia\/Novokuznetsk","Asia\/Novosibirsk","Asia\/Omsk","Asia\/Oral","Asia\/Phnom_Penh","Asia\/Pontianak","Asia\/Pyongyang","Asia\/Qatar","Asia\/Qostanay","Asia\/Qyzylorda","Asia\/Riyadh","Asia\/Sakhalin","Asia\/Samarkand","Asia\/Seoul","Asia\/Shanghai","Asia\/Singapore","Asia\/Srednekolymsk","Asia\/Taipei","Asia\/Tashkent","Asia\/Tbilisi","Asia\/Tehran","Asia\/Thimphu","Asia\/Tokyo","Asia\/Tomsk","Asia\/Ulaanbaatar","Asia\/Urumqi","Asia\/Ust-Nera","Asia\/Vientiane","Asia\/Vladivostok","Asia\/Yakutsk","Asia\/Yangon","Asia\/Yekaterinburg","Asia\/Yerevan","Atlantic\/Azores","Atlantic\/Bermuda","Atlantic\/Canary","Atlantic\/Cape_Verde","Atlantic\/Faroe","Atlantic\/Madeira","Atlantic\/Reykjavik","Atlantic\/South_Georgia","Atlantic\/St_Helena","Atlantic\/Stanley","Australia\/Adelaide","Australia\/Brisbane","Australia\/Broken_Hill","Australia\/Darwin","Australia\/Eucla","Australia\/Hobart","Australia\/Lindeman","Australia\/Lord_Howe","Australia\/Melbourne","Australia\/Perth","Australia\/Sydney","Europe\/Amsterdam","Europe\/Andorra","Europe\/Astrakhan","Europe\/Athens","Europe\/Belgrade","Europe\/Berlin","Europe\/Bratislava","Europe\/Brussels","Europe\/Bucharest","Europe\/Budapest","Europe\/Busingen","Europe\/Chisinau","Europe\/Copenhagen","Europe\/Dublin","Europe\/Gibraltar","Europe\/Guernsey","Europe\/Helsinki","Europe\/Isle_of_Man","Europe\/Istanbul","Europe\/Jersey","Europe\/Kaliningrad","Europe\/Kirov","Europe\/Kyiv","Europe\/Lisbon","Europe\/Ljubljana","Europe\/London","Europe\/Luxembourg","Europe\/Madrid","Europe\/Malta","Europe\/Mariehamn","Europe\/Minsk","Europe\/Monaco","Europe\/Moscow","Europe\/Oslo","Europe\/Paris","Europe\/Podgorica","Europe\/Prague","Europe\/Riga","Europe\/Rome","Europe\/Samara","Europe\/San_Marino","Europe\/Sarajevo","Europe\/Saratov","Europe\/Simferopol","Europe\/Skopje","Europe\/Sofia","Europe\/Stockholm","Europe\/Tallinn","Europe\/Tirane","Europe\/Ulyanovsk","Europe\/Vaduz","Europe\/Vatican","Europe\/Vienna","Europe\/Vilnius","Europe\/Volgograd","Europe\/Warsaw","Europe\/Zagreb","Europe\/Zurich","Indian\/Antananarivo","Indian\/Chagos","Indian\/Christmas","Indian\/Cocos","Indian\/Comoro","Indian\/Kerguelen","Indian\/Mahe","Indian\/Maldives","Indian\/Mauritius","Indian\/Mayotte","Indian\/Reunion","Pacific\/Apia","Pacific\/Auckland","Pacific\/Bougainville","Pacific\/Chatham","Pacific\/Chuuk","Pacific\/Easter","Pacific\/Efate","Pacific\/Fakaofo","Pacific\/Fiji","Pacific\/Funafuti","Pacific\/Galapagos","Pacific\/Gambier","Pacific\/Guadalcanal","Pacific\/Guam","Pacific\/Honolulu","Pacific\/Kanton","Pacific\/Kiritimati","Pacific\/Kosrae","Pacific\/Kwajalein","Pacific\/Majuro","Pacific\/Marquesas","Pacific\/Midway","Pacific\/Nauru","Pacific\/Niue","Pacific\/Norfolk","Pacific\/Noumea","Pacific\/Pago_Pago","Pacific\/Palau","Pacific\/Pitcairn","Pacific\/Pohnpei","Pacific\/Port_Moresby","Pacific\/Rarotonga","Pacific\/Saipan","Pacific\/Tahiti","Pacific\/Tarawa","Pacific\/Tongatapu","Pacific\/Wake","Pacific\/Wallis","UTC"]},"type":{"type":"string","description":"`redirect` sends the traffic elsewhere during the window; `cost` pays different rates.","example":"cost","enum":["cost","redirect"]},"redirect_campaign_id":{"type":"integer","description":"`redirect` only. Campaign to send traffic to.","example":null},"redirect_creative_id":{"type":"integer","description":"`redirect` only. Optional creative of the redirect campaign.","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"integer","description":"`redirect` only. Smarter Link to send traffic to instead.","example":null,"nullable":true},"custom_cpa":{"type":"number","description":"`cost` only, CPA campaigns. Publisher payout during the window. Must be at least 0.","example":15,"nullable":true},"custom_payout":{"type":"number","description":"`cost` only, CPA campaigns. Revenue during the window. Must be at least 0.","example":20,"nullable":true},"custom_revshare":{"type":"integer","description":"`cost` only, rev share campaigns. Publisher share, 0 to 100. Must be at least 0. Must not be greater than 100.","example":null,"nullable":true}},"required":["campaign_id","device","days","time_start","time_end","tz","type","redirect_campaign_id"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/dynamic-schedules\/{scheduleId}":{"put":{"summary":"Update Dynamic Schedule","operationId":"updateDynamicSchedule","description":"Replaces a schedule; send the full body. `PATCH` and `PUT` are both accepted and behave\nidentically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":8,"campaign_id":42,"publisher_id":55,"device":"all","days":[1,2,3,4,5],"time_start":"09:00","time_end":"17:00","tz":"America\/New_York","type":"cost","redirect_campaign_id":null,"redirect_creative_id":null,"redirect_smarter_link_id":null,"custom_cpa":15,"custom_payout":20,"custom_revshare":null,"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":8},"campaign_id":{"type":"integer","example":42},"publisher_id":{"type":"integer","example":55},"device":{"type":"string","example":"all"},"days":{"type":"array","example":[1,2,3,4,5],"items":{"type":"integer"}},"time_start":{"type":"string","example":"09:00"},"time_end":{"type":"string","example":"17:00"},"tz":{"type":"string","example":"America\/New_York"},"type":{"type":"string","example":"cost"},"redirect_campaign_id":{"type":"string","example":null,"nullable":true},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true},"custom_cpa":{"type":"integer","example":15},"custom_payout":{"type":"integer","example":20},"custom_revshare":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"","example":16},"campaign_id":{"type":"integer","description":"","example":16},"publisher_id":{"type":"integer","description":"Publisher the schedule applies to, or `null` for every publisher.","example":55,"nullable":true},"device":{"type":"string","description":"Devices the schedule applies to: `all`, `desktop` or `mobile`.","example":"all","enum":["all","desktop","mobile"]},"days":{"type":"array","description":"Must be at least 0. Must not be greater than 6.","example":[4],"items":{"type":"integer"}},"time_start":{"type":"string","description":"Start time, `HH:MM`, in `tz`.","example":"09:00"},"time_end":{"type":"string","description":"End time, `HH:MM`, in `tz`.","example":"17:00"},"tz":{"type":"string","description":"IANA timezone of the times.","example":"America\/New_York","enum":["Africa\/Abidjan","Africa\/Accra","Africa\/Addis_Ababa","Africa\/Algiers","Africa\/Asmara","Africa\/Bamako","Africa\/Bangui","Africa\/Banjul","Africa\/Bissau","Africa\/Blantyre","Africa\/Brazzaville","Africa\/Bujumbura","Africa\/Cairo","Africa\/Casablanca","Africa\/Ceuta","Africa\/Conakry","Africa\/Dakar","Africa\/Dar_es_Salaam","Africa\/Djibouti","Africa\/Douala","Africa\/El_Aaiun","Africa\/Freetown","Africa\/Gaborone","Africa\/Harare","Africa\/Johannesburg","Africa\/Juba","Africa\/Kampala","Africa\/Khartoum","Africa\/Kigali","Africa\/Kinshasa","Africa\/Lagos","Africa\/Libreville","Africa\/Lome","Africa\/Luanda","Africa\/Lubumbashi","Africa\/Lusaka","Africa\/Malabo","Africa\/Maputo","Africa\/Maseru","Africa\/Mbabane","Africa\/Mogadishu","Africa\/Monrovia","Africa\/Nairobi","Africa\/Ndjamena","Africa\/Niamey","Africa\/Nouakchott","Africa\/Ouagadougou","Africa\/Porto-Novo","Africa\/Sao_Tome","Africa\/Tripoli","Africa\/Tunis","Africa\/Windhoek","America\/Adak","America\/Anchorage","America\/Anguilla","America\/Antigua","America\/Araguaina","America\/Argentina\/Buenos_Aires","America\/Argentina\/Catamarca","America\/Argentina\/Cordoba","America\/Argentina\/Jujuy","America\/Argentina\/La_Rioja","America\/Argentina\/Mendoza","America\/Argentina\/Rio_Gallegos","America\/Argentina\/Salta","America\/Argentina\/San_Juan","America\/Argentina\/San_Luis","America\/Argentina\/Tucuman","America\/Argentina\/Ushuaia","America\/Aruba","America\/Asuncion","America\/Atikokan","America\/Bahia","America\/Bahia_Banderas","America\/Barbados","America\/Belem","America\/Belize","America\/Blanc-Sablon","America\/Boa_Vista","America\/Bogota","America\/Boise","America\/Cambridge_Bay","America\/Campo_Grande","America\/Cancun","America\/Caracas","America\/Cayenne","America\/Cayman","America\/Chicago","America\/Chihuahua","America\/Ciudad_Juarez","America\/Costa_Rica","America\/Coyhaique","America\/Creston","America\/Cuiaba","America\/Curacao","America\/Danmarkshavn","America\/Dawson","America\/Dawson_Creek","America\/Denver","America\/Detroit","America\/Dominica","America\/Edmonton","America\/Eirunepe","America\/El_Salvador","America\/Fort_Nelson","America\/Fortaleza","America\/Glace_Bay","America\/Goose_Bay","America\/Grand_Turk","America\/Grenada","America\/Guadeloupe","America\/Guatemala","America\/Guayaquil","America\/Guyana","America\/Halifax","America\/Havana","America\/Hermosillo","America\/Indiana\/Indianapolis","America\/Indiana\/Knox","America\/Indiana\/Marengo","America\/Indiana\/Petersburg","America\/Indiana\/Tell_City","America\/Indiana\/Vevay","America\/Indiana\/Vincennes","America\/Indiana\/Winamac","America\/Inuvik","America\/Iqaluit","America\/Jamaica","America\/Juneau","America\/Kentucky\/Louisville","America\/Kentucky\/Monticello","America\/Kralendijk","America\/La_Paz","America\/Lima","America\/Los_Angeles","America\/Lower_Princes","America\/Maceio","America\/Managua","America\/Manaus","America\/Marigot","America\/Martinique","America\/Matamoros","America\/Mazatlan","America\/Menominee","America\/Merida","America\/Metlakatla","America\/Mexico_City","America\/Miquelon","America\/Moncton","America\/Monterrey","America\/Montevideo","America\/Montserrat","America\/Nassau","America\/New_York","America\/Nome","America\/Noronha","America\/North_Dakota\/Beulah","America\/North_Dakota\/Center","America\/North_Dakota\/New_Salem","America\/Nuuk","America\/Ojinaga","America\/Panama","America\/Paramaribo","America\/Phoenix","America\/Port-au-Prince","America\/Port_of_Spain","America\/Porto_Velho","America\/Puerto_Rico","America\/Punta_Arenas","America\/Rankin_Inlet","America\/Recife","America\/Regina","America\/Resolute","America\/Rio_Branco","America\/Santarem","America\/Santiago","America\/Santo_Domingo","America\/Sao_Paulo","America\/Scoresbysund","America\/Sitka","America\/St_Barthelemy","America\/St_Johns","America\/St_Kitts","America\/St_Lucia","America\/St_Thomas","America\/St_Vincent","America\/Swift_Current","America\/Tegucigalpa","America\/Thule","America\/Tijuana","America\/Toronto","America\/Tortola","America\/Vancouver","America\/Whitehorse","America\/Winnipeg","America\/Yakutat","Antarctica\/Casey","Antarctica\/Davis","Antarctica\/DumontDUrville","Antarctica\/Macquarie","Antarctica\/Mawson","Antarctica\/McMurdo","Antarctica\/Palmer","Antarctica\/Rothera","Antarctica\/Syowa","Antarctica\/Troll","Antarctica\/Vostok","Arctic\/Longyearbyen","Asia\/Aden","Asia\/Almaty","Asia\/Amman","Asia\/Anadyr","Asia\/Aqtau","Asia\/Aqtobe","Asia\/Ashgabat","Asia\/Atyrau","Asia\/Baghdad","Asia\/Bahrain","Asia\/Baku","Asia\/Bangkok","Asia\/Barnaul","Asia\/Beirut","Asia\/Bishkek","Asia\/Brunei","Asia\/Chita","Asia\/Colombo","Asia\/Damascus","Asia\/Dhaka","Asia\/Dili","Asia\/Dubai","Asia\/Dushanbe","Asia\/Famagusta","Asia\/Gaza","Asia\/Hebron","Asia\/Ho_Chi_Minh","Asia\/Hong_Kong","Asia\/Hovd","Asia\/Irkutsk","Asia\/Jakarta","Asia\/Jayapura","Asia\/Jerusalem","Asia\/Kabul","Asia\/Kamchatka","Asia\/Karachi","Asia\/Kathmandu","Asia\/Khandyga","Asia\/Kolkata","Asia\/Krasnoyarsk","Asia\/Kuala_Lumpur","Asia\/Kuching","Asia\/Kuwait","Asia\/Macau","Asia\/Magadan","Asia\/Makassar","Asia\/Manila","Asia\/Muscat","Asia\/Nicosia","Asia\/Novokuznetsk","Asia\/Novosibirsk","Asia\/Omsk","Asia\/Oral","Asia\/Phnom_Penh","Asia\/Pontianak","Asia\/Pyongyang","Asia\/Qatar","Asia\/Qostanay","Asia\/Qyzylorda","Asia\/Riyadh","Asia\/Sakhalin","Asia\/Samarkand","Asia\/Seoul","Asia\/Shanghai","Asia\/Singapore","Asia\/Srednekolymsk","Asia\/Taipei","Asia\/Tashkent","Asia\/Tbilisi","Asia\/Tehran","Asia\/Thimphu","Asia\/Tokyo","Asia\/Tomsk","Asia\/Ulaanbaatar","Asia\/Urumqi","Asia\/Ust-Nera","Asia\/Vientiane","Asia\/Vladivostok","Asia\/Yakutsk","Asia\/Yangon","Asia\/Yekaterinburg","Asia\/Yerevan","Atlantic\/Azores","Atlantic\/Bermuda","Atlantic\/Canary","Atlantic\/Cape_Verde","Atlantic\/Faroe","Atlantic\/Madeira","Atlantic\/Reykjavik","Atlantic\/South_Georgia","Atlantic\/St_Helena","Atlantic\/Stanley","Australia\/Adelaide","Australia\/Brisbane","Australia\/Broken_Hill","Australia\/Darwin","Australia\/Eucla","Australia\/Hobart","Australia\/Lindeman","Australia\/Lord_Howe","Australia\/Melbourne","Australia\/Perth","Australia\/Sydney","Europe\/Amsterdam","Europe\/Andorra","Europe\/Astrakhan","Europe\/Athens","Europe\/Belgrade","Europe\/Berlin","Europe\/Bratislava","Europe\/Brussels","Europe\/Bucharest","Europe\/Budapest","Europe\/Busingen","Europe\/Chisinau","Europe\/Copenhagen","Europe\/Dublin","Europe\/Gibraltar","Europe\/Guernsey","Europe\/Helsinki","Europe\/Isle_of_Man","Europe\/Istanbul","Europe\/Jersey","Europe\/Kaliningrad","Europe\/Kirov","Europe\/Kyiv","Europe\/Lisbon","Europe\/Ljubljana","Europe\/London","Europe\/Luxembourg","Europe\/Madrid","Europe\/Malta","Europe\/Mariehamn","Europe\/Minsk","Europe\/Monaco","Europe\/Moscow","Europe\/Oslo","Europe\/Paris","Europe\/Podgorica","Europe\/Prague","Europe\/Riga","Europe\/Rome","Europe\/Samara","Europe\/San_Marino","Europe\/Sarajevo","Europe\/Saratov","Europe\/Simferopol","Europe\/Skopje","Europe\/Sofia","Europe\/Stockholm","Europe\/Tallinn","Europe\/Tirane","Europe\/Ulyanovsk","Europe\/Vaduz","Europe\/Vatican","Europe\/Vienna","Europe\/Vilnius","Europe\/Volgograd","Europe\/Warsaw","Europe\/Zagreb","Europe\/Zurich","Indian\/Antananarivo","Indian\/Chagos","Indian\/Christmas","Indian\/Cocos","Indian\/Comoro","Indian\/Kerguelen","Indian\/Mahe","Indian\/Maldives","Indian\/Mauritius","Indian\/Mayotte","Indian\/Reunion","Pacific\/Apia","Pacific\/Auckland","Pacific\/Bougainville","Pacific\/Chatham","Pacific\/Chuuk","Pacific\/Easter","Pacific\/Efate","Pacific\/Fakaofo","Pacific\/Fiji","Pacific\/Funafuti","Pacific\/Galapagos","Pacific\/Gambier","Pacific\/Guadalcanal","Pacific\/Guam","Pacific\/Honolulu","Pacific\/Kanton","Pacific\/Kiritimati","Pacific\/Kosrae","Pacific\/Kwajalein","Pacific\/Majuro","Pacific\/Marquesas","Pacific\/Midway","Pacific\/Nauru","Pacific\/Niue","Pacific\/Norfolk","Pacific\/Noumea","Pacific\/Pago_Pago","Pacific\/Palau","Pacific\/Pitcairn","Pacific\/Pohnpei","Pacific\/Port_Moresby","Pacific\/Rarotonga","Pacific\/Saipan","Pacific\/Tahiti","Pacific\/Tarawa","Pacific\/Tongatapu","Pacific\/Wake","Pacific\/Wallis","UTC"]},"type":{"type":"string","description":"`redirect` sends the traffic elsewhere during the window; `cost` pays different rates.","example":"cost","enum":["cost","redirect"]},"redirect_campaign_id":{"type":"integer","description":"`redirect` only. Campaign to send traffic to.","example":null},"redirect_creative_id":{"type":"integer","description":"`redirect` only. Optional creative of the redirect campaign.","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"integer","description":"`redirect` only. Smarter Link to send traffic to instead.","example":null,"nullable":true},"custom_cpa":{"type":"number","description":"`cost` only, CPA campaigns. Publisher payout during the window. Must be at least 0.","example":15,"nullable":true},"custom_payout":{"type":"number","description":"`cost` only, CPA campaigns. Revenue during the window. Must be at least 0.","example":20,"nullable":true},"custom_revshare":{"type":"integer","description":"`cost` only, rev share campaigns. Publisher share, 0 to 100. Must be at least 0. Must not be greater than 100.","example":null,"nullable":true}},"required":["id","campaign_id","device","days","time_start","time_end","tz","type","redirect_campaign_id"]}}}}},"delete":{"summary":"Delete Dynamic Schedule","operationId":"deleteDynamicSchedule","description":"","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Dynamic schedule deleted."},"properties":{"message":{"type":"string","example":"Dynamic schedule deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"scheduleId","description":"The ID of the schedule.","example":8,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/postbacks":{"get":{"summary":"List Campaign Postbacks","operationId":"listCampaignPostbacks","description":"Returns a paginated list of the postbacks bound to a campaign \u2014 both\n`global_campaign` (fire for every publisher on the campaign) and `campaign`\n(bound to the single publisher in `publisher_id`).\n\nA publisher's account-wide `global` postbacks are not campaign-bound and are\nlisted by `GET \/admin\/publishers\/{id}\/postbacks` instead.\n\nA publisher's postback that delivers to their Meta pixel (`delivery_method: meta`) is\nlisted with its `business` and `meta` settings, but can't be created or changed here (it can\nbe deleted): use `\/admin\/publishers\/{id}\/postbacks`.","parameters":[{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":9,"type":"global_campaign","delivery_method":"url","url":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}","http_method":"GET","publisher_id":null,"publisher_name":null,"event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":null,"meta":null,"created_at":"2026-05-01T12:00:00Z"},{"id":10,"type":"campaign","delivery_method":"meta","url":null,"http_method":"GET","publisher_id":55,"publisher_name":"Jane Doe","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","event_source_url":null,"meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":2,"total":2}},"properties":{"data":{"type":"array","example":[{"id":9,"type":"global_campaign","delivery_method":"url","url":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}","http_method":"GET","publisher_id":null,"publisher_name":null,"event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":null,"meta":null,"created_at":"2026-05-01T12:00:00Z"},{"id":10,"type":"campaign","delivery_method":"meta","url":null,"http_method":"GET","publisher_id":55,"publisher_name":"Jane Doe","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","event_source_url":null,"meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"global_campaign"},"delivery_method":{"type":"string","example":"url"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}"},"http_method":{"type":"string","example":"GET"},"publisher_id":{"type":"string","example":null,"nullable":true},"publisher_name":{"type":"string","example":null,"nullable":true},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"all"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"string","example":null,"nullable":true},"meta":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":2},"total":{"type":"integer","example":2}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Campaigns"]},"post":{"summary":"Create Campaign Postback","operationId":"createCampaignPostback","description":"Creates a postback on a campaign. Two scopes are supported via `type`:\n\n- `global_campaign` \u2014 fires for **every** publisher on the campaign, including\n  publishers added after the postback was created. Send no `publisher_id`. Use\n  `conversion_type` to limit it to base conversions (`campaign_only`), event\n  conversions (`event_only`) or both (`all`).\n- `campaign` \u2014 fires only for the publisher given in `publisher_id`.\n\nEither scope can be limited to a single event with `event_id`. Binding an event\nreplaces `conversion_type`: the postback then fires for that one event only, for\nnon-payable events too, so `conversion_type` and `include_non_payable` are not\naccepted alongside it.\n\nThis endpoint creates URL postbacks only. A postback that delivers to a publisher's\nMeta pixel is created through `POST \/admin\/publishers\/{id}\/postbacks`, and sending\n`delivery_method: meta` here answers `422`.\n\n**Postback URL tokens** \u2014 `url` may contain `{TOKEN}` placeholders that\nare replaced with real values when the postback fires. Tokens are\ncase-insensitive and the URL-encoded form (`%7BTOKEN%7D`) is also\naccepted. Recognized tokens with no value resolve to an empty string;\nunrecognized placeholders are left untouched.\n\n| Token | Description |\n|-------|-------------|\n| `{UID}` | Unique conversion\/click ID |\n| `{CAMPAIGN_ID}` | Campaign ID (aliases: `{OFFER_ID}`, `{OFFER}`, `{CAMPAIGN}`) |\n| `{CREATIVE_ID}` | Creative ID (alias: `{CREATIVE}`) |\n| `{PUBLISHER_ID}` | Publisher ID (aliases: `{AFFILIATE_ID}`, `{AFFILIATE}`, `{PUBLISHER}`) |\n| `{s1}` \u2026 `{s7}` | Sub IDs passed on the tracking link (aliases: `{sub1}`\u2026`{sub7}`, `{SUBID_1}`\u2026`{SUBID_7}`) |\n| `{DEVICE}` | Device type of the click |\n| `{OS}` | Operating system of the click |\n| `{CPA}` | Payout amount of the conversion (two decimals, or three for a fractional cent: `10.00`, `0.015`) |\n| `{ORDER_ID}` | Order\/transaction ID reported on the conversion (aliases: `{TRANSACTION_ID}`, `{TXN_ID}`, `{ORDER}`) |\n| `{ORDER_TOTAL}` | Order total reported on the conversion, in the campaign's currency (alias: `{TOTAL}`) |\n| `{CURRENCY}` | The campaign's currency, which every amount in the postback is in (alias: `{OFFER_CURRENCY}`) |\n| `{TIMESTAMP}` | Unix timestamp of the conversion (aliases: `{TS}`, `{TIME}`) |\n| `{EVENT_ID}` | Event ID (0 for base conversions; alias: `{EVENT}`) |\n| `{EVENT_NAME}` | Event name (`base` for base conversions) |\n| `{USER_AGENT}` | User agent of the click (URL-encoded) |\n| `{USER_IP}` | IP of the click\/conversion (URL-encoded; alias: `{CONVERSION_IP}`) |\n| `{GEO_CITY_NAME}` | City of the click (URL-encoded) |\n| `{GEO_REGION_CODE}` | 2-letter region code of the click (URL-encoded) |\n| `{ANDROID_ID}`, `{ANDROID_ID_MD5}`, `{ANDROID_ID_SHA1}` | Android device identifiers |\n| `{IDFA}`, `{IDFA_MD5}`, `{IDFA_SHA1}` | iOS advertising identifiers |\n| `{GOOGLE_AID}` | Google advertising ID |\n| `{FBCLID}`, `{GCLID}` | Facebook \/ Google click IDs (URL-encoded) |","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"type":"global_campaign","delivery_method":"url","url":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}","http_method":"GET","publisher_id":null,"publisher_name":null,"event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":null,"meta":null,"created_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"global_campaign"},"delivery_method":{"type":"string","example":"url"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}"},"http_method":{"type":"string","example":"GET"},"publisher_id":{"type":"string","example":null,"nullable":true},"publisher_name":{"type":"string","example":null,"nullable":true},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"all"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"string","example":null,"nullable":true},"meta":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"url":["The url must use HTTPS (https:\/\/)."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"url":{"type":"array","example":["The url must use HTTPS (https:\/\/)."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Postback scope. `global_campaign` fires for every publisher on the campaign, including publishers added later; `campaign` fires only for the publisher in `publisher_id`.","example":"global_campaign","enum":["campaign","global_campaign"]},"url":{"type":"string","description":"Postback URL. Supports `{TOKEN}` placeholders resolved at conversion time \u2014 see the endpoint description for the full token list. Must not be greater than 2048 characters.","example":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}"},"http_method":{"type":"string","description":"HTTP verb used to fire the postback: `GET` (default) or `POST`. Parameters are sent in the query string either way. Omit to use the default.","example":"GET","enum":["GET","POST"],"nullable":true},"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local). Required when `type` is `campaign`, and not allowed for `global_campaign`. This field is required when <code>type<\/code> is <code>campaign<\/code>.","example":null,"nullable":true},"event_id":{"type":"integer","description":"Optional campaign event ID (tenant-local) to fire for a single event instead of the base conversion. The event must belong to this campaign.","example":null,"nullable":true},"conversion_type":{"type":"string","description":"Which conversions fire a campaign-wide `global_campaign` postback: `all`, `campaign_only` or `event_only`. Required for that scope, and not allowed once `event_id` is set.","example":"all","enum":["all","campaign_only","event_only"],"nullable":true},"include_non_payable":{"type":"boolean","description":"Whether non-payable (tracking-only) event conversions also fire a campaign-wide `global_campaign` postback. Defaults to false, and is ignored once `event_id` is set.","example":false,"nullable":true},"delivery_method":{"type":"string","description":"Only `url` here. A postback that delivers to a publisher's Meta pixel is created through `POST \/admin\/publishers\/{id}\/postbacks`.","example":"url","nullable":true}},"required":["type","url"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/campaigns\/{id}\/postbacks\/{postback_id}":{"put":{"summary":"Update Campaign Postback","operationId":"updateCampaignPostback","description":"Partially updates a campaign postback \u2014 send only the fields you want to change.\nAnything you omit keeps its current value, and cross-field rules are validated\nagainst the resulting state. `PATCH` and `PUT` are both accepted and behave\nidentically.\n\nThe `type` can be changed in either direction. Switching to `global_campaign` drops\nthe publisher; switching to `campaign` requires a `publisher_id`.\n\nTwo cases require you to state `conversion_type` explicitly, because both widen what\nthe postback fires for and the previous value would not describe the new scope:\nconverting a `campaign` postback to `global_campaign`, and clearing `event_id`\n(`null`) on an event-bound `global_campaign` postback.\n\nOmitting `http_method` keeps the stored verb \u2014 including the implicit `POST` of a\npostback created before the option existed. It does not fall back to the `GET`\ndefault used when creating.\n\nA publisher's Meta postback (`delivery_method: meta`) can't be changed here and answers\n`422`; change it through `\/admin\/publishers\/{id}\/postbacks\/{postback_id}`. A URL\npostback can't be switched to Meta here either.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"type":"global_campaign","delivery_method":"url","url":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}","http_method":"GET","publisher_id":null,"publisher_name":null,"event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":null,"meta":null,"created_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"global_campaign"},"delivery_method":{"type":"string","example":"url"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}"},"http_method":{"type":"string","example":"GET"},"publisher_id":{"type":"string","example":null,"nullable":true},"publisher_name":{"type":"string","example":null,"nullable":true},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"all"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"string","example":null,"nullable":true},"meta":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Postback not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Postback not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"conversion_type":["A conversion_type is required for a global_campaign postback that is not bound to an event."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"conversion_type":{"type":"array","example":["A conversion_type is required for a global_campaign postback that is not bound to an event."],"items":{"type":"string"}}}}}}}}}},"tags":["Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Postback scope. `global_campaign` fires for every publisher on the campaign, including publishers added later; `campaign` fires only for the publisher in `publisher_id`.","example":"global_campaign","enum":["campaign","global_campaign"]},"url":{"type":"string","description":"Postback URL. Supports `{TOKEN}` placeholders resolved at conversion time \u2014 see the endpoint description for the full token list. Must not be greater than 2048 characters.","example":"https:\/\/tracker.example.com\/pb?cid={UID}&pub={PUBLISHER_ID}"},"http_method":{"type":"string","description":"HTTP verb used to fire the postback: `GET` (default) or `POST`. Parameters are sent in the query string either way. Omit to use the default.","example":"GET","enum":["GET","POST"],"nullable":true},"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local). Required when `type` is `campaign`, and not allowed for `global_campaign`. This field is required when <code>type<\/code> is <code>campaign<\/code>.","example":null,"nullable":true},"event_id":{"type":"integer","description":"Optional campaign event ID (tenant-local) to fire for a single event instead of the base conversion. The event must belong to this campaign.","example":null,"nullable":true},"conversion_type":{"type":"string","description":"Which conversions fire a campaign-wide `global_campaign` postback: `all`, `campaign_only` or `event_only`. Required for that scope, and not allowed once `event_id` is set.","example":"all","enum":["all","campaign_only","event_only"],"nullable":true},"include_non_payable":{"type":"boolean","description":"Whether non-payable (tracking-only) event conversions also fire a campaign-wide `global_campaign` postback. Defaults to false, and is ignored once `event_id` is set.","example":false,"nullable":true},"delivery_method":{"type":"string","description":"Only `url` here. A postback that delivers to a publisher's Meta pixel is created through `POST \/admin\/publishers\/{id}\/postbacks`.","example":"url","nullable":true}}}}}}},"delete":{"summary":"Delete Campaign Postback","operationId":"deleteCampaignPostback","description":"Deletes one of the campaign's postbacks by its ID.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Postback deleted."},"properties":{"message":{"type":"string","example":"Postback deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Postback not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Postback not found."}}}}}}},"tags":["Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"postback_id","description":"The ID of the postback.","example":9,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/pixels":{"get":{"summary":"List Pixels","operationId":"listPixels","description":"Returns a paginated list of tracking pixels in your network. Filters are flat\nquery parameters.\n\nA pixel is either `publisher`-scoped (fires for the one publisher in\n`publisher_id`) or `global` (fires for every publisher on the campaign,\nincluding publishers added later). Filter on `scope` to separate the two.","parameters":[{"in":"query","name":"scope","description":"Filter by who the pixel fires for. Allowed: `publisher`, `global`.","example":"global","required":false,"schema":{"type":"string","description":"Filter by who the pixel fires for. Allowed: `publisher`, `global`.","example":"global"}},{"in":"query","name":"publisher_id","description":"Filter by publisher ID. Never matches global pixels, which have no publisher.","example":55,"required":false,"schema":{"type":"integer","description":"Filter by publisher ID. Never matches global pixels, which have no publisher.","example":55}},{"in":"query","name":"campaign_id","description":"Filter by campaign ID.","example":42,"required":false,"schema":{"type":"integer","description":"Filter by campaign ID.","example":42}},{"in":"query","name":"event_id","description":"Filter by campaign event ID.","example":7,"required":false,"schema":{"type":"integer","description":"Filter by campaign event ID.","example":7}},{"in":"query","name":"status","description":"Filter by review status. Allowed: `pending`, `approved`, `rejected`.","example":"approved","required":false,"schema":{"type":"string","description":"Filter by review status. Allowed: `pending`, `approved`, `rejected`.","example":"approved"}},{"in":"query","name":"type","description":"Filter by render type. Allowed: `javascript`, `iframe`, `image`, `html`.","example":"image","required":false,"schema":{"type":"string","description":"Filter by render type. Allowed: `javascript`, `iframe`, `image`, `html`.","example":"image"}},{"in":"query","name":"created_after","description":"Return only pixels created on or after this ISO date.","example":"2026-01-01","required":false,"schema":{"type":"string","description":"Return only pixels created on or after this ISO date.","example":"2026-01-01"}},{"in":"query","name":"created_before","description":"Return only pixels created on or before this ISO date.","example":"2026-12-31","required":false,"schema":{"type":"string","description":"Return only pixels created on or before this ISO date.","example":"2026-12-31"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `status`, `type`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `status`, `type`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":3,"scope":"global","publisher_id":null,"publisher_name":null,"campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"type":"image","status":"approved","url":"https:\/\/tracker.example.com\/px?cid={UID}","html_content":null,"comment":null,"created_at":"2026-05-01T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":3,"scope":"global","publisher_id":null,"publisher_name":null,"campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"type":"image","status":"approved","url":"https:\/\/tracker.example.com\/px?cid={UID}","html_content":null,"comment":null,"created_at":"2026-05-01T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":3},"scope":{"type":"string","example":"global"},"publisher_id":{"type":"string","example":null,"nullable":true},"publisher_name":{"type":"string","example":null,"nullable":true},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"type":{"type":"string","example":"image"},"status":{"type":"string","example":"approved"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/px?cid={UID}"},"html_content":{"type":"string","example":null,"nullable":true},"comment":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The selected type is invalid.","errors":{"type":["The selected type is invalid."]}},"properties":{"message":{"type":"string","example":"The selected type is invalid."},"errors":{"type":"object","properties":{"type":{"type":"array","example":["The selected type is invalid."],"items":{"type":"string"}}}}}}}}}},"tags":["Pixels"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"scope":{"type":"string","description":"","example":"architecto","enum":["publisher","global"],"nullable":true},"publisher_id":{"type":"integer","description":"","example":16,"nullable":true},"campaign_id":{"type":"integer","description":"","example":16,"nullable":true},"event_id":{"type":"integer","description":"","example":16,"nullable":true},"status":{"type":"string","description":"","example":"rejected","enum":["pending","approved","rejected"],"nullable":true},"type":{"type":"string","description":"","example":"html","enum":["javascript","iframe","image","html"],"nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-11-02T03:04:29","nullable":true},"created_before":{"type":"string","description":"Must be a valid date. Must be a date after or equal to <code>created_after<\/code>.","example":"2052-11-25","nullable":true},"sort":{"type":"string","description":"","example":"-created_at","enum":["id","-id","status","-status","type","-type","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true}}}}}}},"post":{"summary":"Create Pixel","operationId":"createPixel","description":"Creates a tracking pixel on a campaign. Two scopes are supported via `scope`:\n\n- `global` \u2014 fires for **every** publisher on the campaign, including publishers\n  added after the pixel was created. Send no `publisher_id`.\n- `publisher` \u2014 fires only for the publisher given in `publisher_id`.\n\nEither scope can be limited to a single event with `event_id`; the event must\nbelong to `campaign_id`. A pixel with no event fires on the campaign's base\nconversion only, never on events, and vice versa.\n\nPixels are rendered by the campaign's container script, which only emits\n**approved** pixels. New pixels default to `pending`; pass `status: approved` to\npublish immediately.\n\n`url` supports the same `{TOKEN}` placeholders as postbacks \u2014 see\n*Create Campaign Postback* for the full token list.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"scope":"global","publisher_id":null,"publisher_name":null,"campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"type":"image","status":"approved","url":"https:\/\/tracker.example.com\/px?cid={UID}","html_content":null,"comment":null,"created_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"scope":{"type":"string","example":"global"},"publisher_id":{"type":"string","example":null,"nullable":true},"publisher_name":{"type":"string","example":null,"nullable":true},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"type":{"type":"string","example":"image"},"status":{"type":"string","example":"approved"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/px?cid={UID}"},"html_content":{"type":"string","example":null,"nullable":true},"comment":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"publisher_id":["publisher_id is not allowed for global pixels: they fire for every publisher."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"publisher_id":{"type":"array","example":["publisher_id is not allowed for global pixels: they fire for every publisher."],"items":{"type":"string"}}}}}}}}}},"tags":["Pixels"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"scope":{"type":"string","description":"Who the pixel fires for. `global` fires for every publisher on the campaign, including publishers added later; `publisher` fires only for the publisher in `publisher_id`.","example":"global","enum":["publisher","global"]},"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local). Required when `scope` is `publisher`, and not allowed for `global`. This field is required when <code>scope<\/code> is <code>publisher<\/code>.","example":null,"nullable":true},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local) the pixel belongs to.","example":42},"event_id":{"type":"integer","description":"Optional campaign event ID (tenant-local) to fire for a single event instead of the base conversion. The event must belong to the given campaign.","example":null,"nullable":true},"type":{"type":"string","description":"How the pixel is rendered: `javascript`, `iframe`, `image` (all take `url`) or `html` (takes `html_content`).","example":"image","enum":["javascript","iframe","image","html"]},"url":{"type":"string","description":"Pixel URL. Required for `javascript`, `iframe` and `image`. Supports the same `{TOKEN}` placeholders as postbacks. This field is required when <code>type<\/code> is <code>javascript<\/code>, <code>iframe<\/code>, or <code>image<\/code>. Must not be greater than 2048 characters.","example":"https:\/\/tracker.example.com\/px?cid={UID}&payout={CPA}","nullable":true},"html_content":{"type":"string","description":"Raw HTML\/JS snippet. Required for `html` pixels, which are served from a hosted URL rather than inlined. This field is required when <code>type<\/code> is <code>html<\/code>.","example":null,"nullable":true},"status":{"type":"string","description":"Review status: `pending` (default) or `approved`. Only approved pixels are rendered by the container.","example":"approved","enum":["pending","approved"],"nullable":true},"comment":{"type":"string","description":"Optional internal note. Must not be greater than 1000 characters.","example":null,"nullable":true}},"required":["scope","campaign_id","type"]}}}}}},"\/api\/v1\/admin\/pixels\/{id}":{"put":{"summary":"Update Pixel","operationId":"updatePixel","description":"Partially updates a tracking pixel \u2014 send only the fields you want to change.\nAnything you omit keeps its current value, and cross-field rules are validated\nagainst the resulting state. `PATCH` and `PUT` are both accepted and behave\nidentically.\n\nThis is also the approval workflow: send `status` as `approved` to publish a pending\npixel so the container starts rendering it, or `rejected` (optionally with a\n`comment` explaining why) to turn it down. Unlike creating, `rejected` is accepted\nhere \u2014 a pixel cannot be created already rejected.\n\nThe `scope` can be changed in either direction. Switching to `global` drops the\npublisher and the pixel starts firing for every publisher on the campaign; switching\nto `publisher` requires a `publisher_id`.\n\nChanging `type` between a URL type (`javascript`, `iframe`, `image`) and `html`\nrequires sending the field the new type uses \u2014 `url` or `html_content` respectively.\nThe other one is cleared.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"scope":"global","publisher_id":null,"publisher_name":null,"campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"type":"image","status":"approved","url":"https:\/\/tracker.example.com\/px?cid={UID}","html_content":null,"comment":null,"created_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"scope":{"type":"string","example":"global"},"publisher_id":{"type":"string","example":null,"nullable":true},"publisher_name":{"type":"string","example":null,"nullable":true},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"type":{"type":"string","example":"image"},"status":{"type":"string","example":"approved"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/px?cid={UID}"},"html_content":{"type":"string","example":null,"nullable":true},"comment":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Pixel not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Pixel not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"html_content":["The html content field is required when type is html."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"html_content":{"type":"array","example":["The html content field is required when type is html."],"items":{"type":"string"}}}}}}}}}},"tags":["Pixels"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"scope":{"type":"string","description":"Who the pixel fires for. `global` fires for every publisher on the campaign, including publishers added later; `publisher` fires only for the publisher in `publisher_id`.","example":"global","enum":["publisher","global"]},"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local). Required when `scope` is `publisher`, and not allowed for `global`. This field is required when <code>scope<\/code> is <code>publisher<\/code>.","example":null,"nullable":true},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local) the pixel belongs to.","example":42},"event_id":{"type":"integer","description":"Optional campaign event ID (tenant-local) to fire for a single event instead of the base conversion. The event must belong to the given campaign.","example":null,"nullable":true},"type":{"type":"string","description":"How the pixel is rendered: `javascript`, `iframe`, `image` (all take `url`) or `html` (takes `html_content`).","example":"image","enum":["javascript","iframe","image","html"]},"url":{"type":"string","description":"Pixel URL. Required for `javascript`, `iframe` and `image`. Supports the same `{TOKEN}` placeholders as postbacks. This field is required when <code>type<\/code> is <code>javascript<\/code>, <code>iframe<\/code>, or <code>image<\/code>. Must not be greater than 2048 characters.","example":"https:\/\/tracker.example.com\/px?cid={UID}&payout={CPA}","nullable":true},"html_content":{"type":"string","description":"Raw HTML\/JS snippet. Required for `html` pixels, which are served from a hosted URL rather than inlined. This field is required when <code>type<\/code> is <code>html<\/code>.","example":null,"nullable":true},"status":{"type":"string","description":"Review status: `pending` (default) or `approved`. Only approved pixels are rendered by the container.","example":"approved","enum":["pending","approved","rejected"]},"comment":{"type":"string","description":"Optional internal note. Must not be greater than 1000 characters.","example":null,"nullable":true}}}}}}},"delete":{"summary":"Delete Pixel","operationId":"deletePixel","description":"Deletes a tracking pixel by its ID. Deleting a `global` pixel stops it firing for\nevery publisher on the campaign.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Pixel deleted."},"properties":{"message":{"type":"string","example":"Pixel deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Pixel not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Pixel not found."}}}}}}},"tags":["Pixels"]},"parameters":[{"in":"path","name":"id","description":"The ID of the pixel.","example":3,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/groups":{"get":{"summary":"List Groups","operationId":"listGroups","description":"Returns a paginated list of the groups in your network. A group labels a set of\ncampaigns, advertisers, publishers or countries, and `type` says which.\n\nNetworks migrated from another platform will find their former labels here as groups of\nthe matching type \u2014 one label that tagged both offers and affiliates becomes one campaign\ngroup and one publisher group of the same name.\n\nUse `GET \/admin\/groups\/{id}\/members` for the full membership of a large group, or filter\nthe campaign, advertiser and publisher list endpoints by `group` \/ `group_id` to get the\nmembers themselves rather than references to them.","parameters":[{"in":"query","name":"name","description":"Partial match on group name (case-insensitive).","example":"Coreg","required":false,"schema":{"type":"string","description":"Partial match on group name (case-insensitive).","example":"Coreg"}},{"in":"query","name":"type","description":"Comma-separated list of types. Allowed: `advertiser`, `campaign`, `publisher`, `country`.","example":"campaign","required":false,"schema":{"type":"string","description":"Comma-separated list of types. Allowed: `advertiser`, `campaign`, `publisher`, `country`.","example":"campaign"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `type`, `created_at`.","example":"name","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `type`, `created_at`.","example":"name"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":9,"name":"Coreg Offers","description":"Offers fed into the co-registration flow.","type":"campaign","member_count":12,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":9,"name":"Coreg Offers","description":"Offers fed into the co-registration flow.","type":"campaign","member_count":12,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9},"name":{"type":"string","example":"Coreg Offers"},"description":{"type":"string","example":"Offers fed into the co-registration flow."},"type":{"type":"string","example":"campaign"},"member_count":{"type":"integer","example":12},"created_at":{"type":"string","example":"2026-09-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-09-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Groups"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"type":{"type":"string","description":"Must not be greater than 100 characters.","example":"n","nullable":true},"sort":{"type":"string","description":"","example":"id","enum":["id","-id","name","-name","type","-type","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":7,"nullable":true}}}}}}},"post":{"summary":"Create Group","operationId":"createGroup","description":"Creates a group and, optionally, its initial members in one call.\n\n`type` fixes what the group can hold and cannot be changed afterwards. Names are unique\nper type, so the same name may exist as a campaign group and a publisher group at once.\n\n`members` is accepted here because a new group has no existing membership to overwrite.\nAfterwards, add and remove members through `\/admin\/groups\/{id}\/members` rather than\nreplacing the set.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"name":"Coreg Offers","description":"Offers fed into the co-registration flow.","type":"campaign","member_count":1,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","members_truncated":false,"members":[{"id":101,"code":null,"name":"Spring Campaign","email":null}]}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"name":{"type":"string","example":"Coreg Offers"},"description":{"type":"string","example":"Offers fed into the co-registration flow."},"type":{"type":"string","example":"campaign"},"member_count":{"type":"integer","example":1},"created_at":{"type":"string","example":"2026-09-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-09-01T12:00:00Z"},"members_truncated":{"type":"boolean","example":false},"members":{"type":"array","example":[{"id":101,"code":null,"name":"Spring Campaign","email":null}],"items":{"type":"object","properties":{"id":{"type":"integer","example":101},"code":{"type":"string","example":null,"nullable":true},"name":{"type":"string","example":"Spring Campaign"},"email":{"type":"string","example":null,"nullable":true}}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"name":["The name has already been taken."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"name":{"type":"array","example":["The name has already been taken."],"items":{"type":"string"}}}}}}}}}},"tags":["Groups"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"What the group holds. Allowed: `advertiser`, `campaign`, `publisher`, `country`. Immutable once set.","example":"campaign","enum":["advertiser","campaign","publisher","country"]},"name":{"type":"string","description":"Group name. Must be unique among your groups of the same type. Must not be greater than 255 characters.","example":"Coreg Offers"},"description":{"type":"string","description":"Optional free-text description. Must not be greater than 255 characters.","example":"Offers fed into the co-registration flow.","nullable":true},"members":{"type":"array","description":"","example":null,"items":{"type":"string"}}},"required":["type","name"]}}}}}},"\/api\/v1\/admin\/groups\/{id}":{"get":{"summary":"Get Group","operationId":"getGroup","description":"Returns a single group with a preview of its members.\n\n`members` carries at most the first 100 entries; when `members_truncated` is true, page\n`GET \/admin\/groups\/{id}\/members` for the rest. Members share one shape across every group\ntype: campaigns, advertisers and publishers are identified by `id`, countries by `code`,\nand the fields that do not apply to a type are null.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"name":"Coreg Offers","description":"Offers fed into the co-registration flow.","type":"campaign","member_count":2,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","members_truncated":false,"members":[{"id":101,"code":null,"name":"Spring Campaign","email":null}]}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"name":{"type":"string","example":"Coreg Offers"},"description":{"type":"string","example":"Offers fed into the co-registration flow."},"type":{"type":"string","example":"campaign"},"member_count":{"type":"integer","example":2},"created_at":{"type":"string","example":"2026-09-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-09-01T12:00:00Z"},"members_truncated":{"type":"boolean","example":false},"members":{"type":"array","example":[{"id":101,"code":null,"name":"Spring Campaign","email":null}],"items":{"type":"object","properties":{"id":{"type":"integer","example":101},"code":{"type":"string","example":null,"nullable":true},"name":{"type":"string","example":"Spring Campaign"},"email":{"type":"string","example":null,"nullable":true}}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Group not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Group not found."}}}}}}},"tags":["Groups"]},"put":{"summary":"Update Group","operationId":"updateGroup","description":"Partially updates a group's name and description. `PATCH` and `PUT` are both accepted and\nbehave identically \u2014 only the fields you send are changed.\n\nA group's `type` cannot be changed, because every existing member would be orphaned. You\nmay echo the current type back (round-tripping a `GET` is convenient); sending a different\none is rejected rather than ignored, so a client cannot believe a change took effect.\n\nMembers are not touched here. Use `\/admin\/groups\/{id}\/members`.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"name":"Coreg Offers (2026)","description":"Offers fed into the co-registration flow.","type":"campaign","member_count":1,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-04T08:30:00Z","members_truncated":false,"members":[{"id":101,"code":null,"name":"Spring Campaign","email":null}]}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"name":{"type":"string","example":"Coreg Offers (2026)"},"description":{"type":"string","example":"Offers fed into the co-registration flow."},"type":{"type":"string","example":"campaign"},"member_count":{"type":"integer","example":1},"created_at":{"type":"string","example":"2026-09-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-09-04T08:30:00Z"},"members_truncated":{"type":"boolean","example":false},"members":{"type":"array","example":[{"id":101,"code":null,"name":"Spring Campaign","email":null}],"items":{"type":"object","properties":{"id":{"type":"integer","example":101},"code":{"type":"string","example":null,"nullable":true},"name":{"type":"string","example":"Spring Campaign"},"email":{"type":"string","example":null,"nullable":true}}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Group not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Group not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"immutable_type","message":"A group's type cannot be changed."},"properties":{"code":{"type":"string","example":"immutable_type"},"message":{"type":"string","example":"A group's type cannot be changed."}}}}}}},"tags":["Groups"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Group name. Must be unique among your groups of the same type. Must not be greater than 255 characters.","example":"Coreg Offers"},"description":{"type":"string","description":"Optional free-text description. Must not be greater than 255 characters.","example":"Offers fed into the co-registration flow.","nullable":true},"type":{"type":"string","description":"Accepted only if it matches the group's current type; a group's type cannot be changed.","example":"campaign"}}}}}}},"delete":{"summary":"Delete Group","operationId":"deleteGroup","description":"Soft-deletes a group. Its members are left untouched \u2014 only the grouping goes away \u2014 and\nthe name becomes available for a new group of the same type.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Group deleted."},"properties":{"message":{"type":"string","example":"Group deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Group not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Group not found."}}}}}}},"tags":["Groups"]},"parameters":[{"in":"path","name":"id","description":"The ID of the group.","example":9,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/groups\/{id}\/members":{"get":{"summary":"List Group Members","operationId":"listGroupMembers","description":"Returns the group's members, paginated. Use this rather than the `members` preview on\n`GET \/admin\/groups\/{id}` whenever `members_truncated` is true.\n\nEvery type returns the same shape: campaigns, advertisers and publishers carry `id`\n(and, for people, `email`); countries carry `code`. Fields that do not apply to the\ngroup's type are null.","parameters":[{"in":"query","name":"per_page","description":"Items per page. Defaults to 25. Max 100.","example":50,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 25. Max 100.","example":50}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":101,"code":null,"name":"Spring Campaign","email":null}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":101,"code":null,"name":"Spring Campaign","email":null}],"items":{"type":"object","properties":{"id":{"type":"integer","example":101},"code":{"type":"string","example":null,"nullable":true},"name":{"type":"string","example":"Spring Campaign"},"email":{"type":"string","example":null,"nullable":true}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Group not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Group not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"untyped_group","message":"This group has no type and cannot hold members."},"properties":{"code":{"type":"string","example":"untyped_group"},"message":{"type":"string","example":"This group has no type and cannot hold members."}}}}}}},"tags":["Groups"]},"post":{"summary":"Add Group Members","operationId":"addGroupMembers","description":"Adds members to a group. Adding one that is already a member is a no-op, so a client\nretrying a request it is unsure about does not have to diff the group first.\n\nCampaign, advertiser and publisher groups take IDs; country groups take ISO 3166-1\nalpha-2 codes, in any case. A member of the wrong kind for the group's type is rejected.\n\nPass `replace: true` to make the request set the membership rather than add to it \u2014\nanything not in `members` is removed. Prefer the default and the `DELETE` route for\nincremental changes, so two clients editing the same group cannot undo each other.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"name":"Coreg Offers","description":"Offers fed into the co-registration flow.","type":"campaign","member_count":2,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","members_truncated":false,"members":[{"id":101,"code":null,"name":"Spring Campaign","email":null}]}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"name":{"type":"string","example":"Coreg Offers"},"description":{"type":"string","example":"Offers fed into the co-registration flow."},"type":{"type":"string","example":"campaign"},"member_count":{"type":"integer","example":2},"created_at":{"type":"string","example":"2026-09-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-09-01T12:00:00Z"},"members_truncated":{"type":"boolean","example":false},"members":{"type":"array","example":[{"id":101,"code":null,"name":"Spring Campaign","email":null}],"items":{"type":"object","properties":{"id":{"type":"integer","example":101},"code":{"type":"string","example":null,"nullable":true},"name":{"type":"string","example":"Spring Campaign"},"email":{"type":"string","example":null,"nullable":true}}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Group not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Group not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"untyped_group","message":"This group has no type and cannot hold members."},"properties":{"code":{"type":"string","example":"untyped_group"},"message":{"type":"string","example":"This group has no type and cannot hold members."}}}}}}},"tags":["Groups"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"members":{"type":"array","description":"","example":null,"items":{"type":"string"}},"replace":{"type":"boolean","description":"When true, the group's membership is replaced by this list instead of added to. Destructive \u2014 anything not listed is removed.","example":false}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the group.","example":9,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/groups\/{id}\/members\/{member_id}":{"delete":{"summary":"Remove Group Member","operationId":"removeGroupMember","description":"Removes one member from a group. The member itself is untouched \u2014 only its membership\ngoes away.\n\n`member_id` is the same identifier the group's members are listed under: an ID for\ncampaign, advertiser and publisher groups, and an ISO 3166-1 alpha-2 code for country\ngroups.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Member removed from group."},"properties":{"message":{"type":"string","example":"Member removed from group."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Member not found in this group."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Member not found in this group."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"untyped_group","message":"This group has no type and cannot hold members."},"properties":{"code":{"type":"string","example":"untyped_group"},"message":{"type":"string","example":"This group has no type and cannot hold members."}}}}}}},"tags":["Groups"]},"parameters":[{"in":"path","name":"id","description":"The ID of the group.","example":9,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"member_id","description":"The member's ID, or ISO country code for a country group.","example":"101","required":true,"schema":{"type":"string"}}]},"\/api\/v1\/admin\/advertisers":{"get":{"summary":"List Advertisers","operationId":"listAdvertisers","description":"Returns a paginated list of advertisers in your network. Filters are flat\nquery parameters.","parameters":[{"in":"query","name":"name","description":"Partial match on first or last name (case-insensitive).","example":"jane","required":false,"schema":{"type":"string","description":"Partial match on first or last name (case-insensitive).","example":"jane"}},{"in":"query","name":"email","description":"Partial match on email address (case-insensitive).","example":"@acme.com","required":false,"schema":{"type":"string","description":"Partial match on email address (case-insensitive).","example":"@acme.com"}},{"in":"query","name":"status","description":"Comma-separated list of statuses. Allowed: `APPROVED`, `DENIED`, `TERMINATED`, `PENDING`.","example":"APPROVED,PENDING","required":false,"schema":{"type":"string","description":"Comma-separated list of statuses. Allowed: `APPROVED`, `DENIED`, `TERMINATED`, `PENDING`.","example":"APPROVED,PENDING"}},{"in":"query","name":"created_after","description":"Return only advertisers created on or after this ISO date.","example":"2026-01-01","required":false,"schema":{"type":"string","description":"Return only advertisers created on or after this ISO date.","example":"2026-01-01"}},{"in":"query","name":"created_before","description":"Return only advertisers created on or before this ISO date.","example":"2026-12-31","required":false,"schema":{"type":"string","description":"Return only advertisers created on or before this ISO date.","example":"2026-12-31"}},{"in":"query","name":"group","description":"Comma-separated list of advertiser group names, matched case-insensitively.","example":"Key Accounts","required":false,"schema":{"type":"string","description":"Comma-separated list of advertiser group names, matched case-insensitively.","example":"Key Accounts"}},{"in":"query","name":"group_id","description":"Comma-separated list of group IDs, as an alternative to `group`. Combining the two selects the union.","example":"4,5","required":false,"schema":{"type":"string","description":"Comma-separated list of group IDs, as an alternative to `group`. Combining the two selects the union.","example":"4,5"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `email`, `first_name`, `last_name`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `email`, `first_name`, `last_name`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":7,"company_name":"Acme Demand Co.","first_name":"Jane","last_name":"Doe","email":"jane@acme.example.com","status":"APPROVED","manager_id":null,"payment_frequency":null,"currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":7,"company_name":"Acme Demand Co.","first_name":"Jane","last_name":"Doe","email":"jane@acme.example.com","status":"APPROVED","manager_id":null,"payment_frequency":null,"currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":7},"company_name":{"type":"string","example":"Acme Demand Co."},"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@acme.example.com"},"status":{"type":"string","example":"APPROVED"},"manager_id":{"type":"string","example":null,"nullable":true},"payment_frequency":{"type":"string","example":null,"nullable":true},"currency":{"type":"string","example":"USD"},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Advertisers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"email":{"type":"string","description":"Must not be greater than 255 characters.","example":"zbailey@example.net","nullable":true},"status":{"type":"string","description":"Must not be greater than 255 characters.","example":"i","nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-11-02T03:04:28","nullable":true},"created_before":{"type":"string","description":"Must be a valid date. Must be a date after or equal to <code>created_after<\/code>.","example":"2052-11-25","nullable":true},"sort":{"type":"string","description":"","example":"last_name","enum":["id","-id","email","-email","first_name","-first_name","last_name","-last_name","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true},"group_id":{"type":"string","description":"Must not be greater than 255 characters.","example":"g","nullable":true},"group":{"type":"string","description":"Must not be greater than 1024 characters.","example":"z","nullable":true}}}}}}},"post":{"summary":"Create Advertiser","operationId":"createAdvertiser","description":"Creates a new advertiser in your network. The new advertiser is assigned\nthe default `advertiser` role for your tenant. A random password is\ngenerated; advertisers cannot log into the dashboard until you reset\ntheir password from the UI.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":7,"company_name":"Acme Demand Co.","first_name":"Jane","last_name":"Doe","email":"jane@acme.example.com","status":"approved","manager_id":null,"payment_frequency":null,"currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z","profile":{"company_title":"Head of Growth","address_line_1":null,"address_line_2":null,"city":"Austin","state":"TX","zip_code":null,"country":"US","phone_number_1":"+1 512 555 0100","phone_number_2":null,"preferred_contact_method":"email","preferred_contact_time":null,"im_type":null,"im_screenname":null},"company":{"url":"https:\/\/acme.example.com","address_line_1":null,"address_line_2":null,"city":null,"state":null,"zip_code":null,"country":null,"phone_number_1":null,"phone_number_2":null,"billing_email":"billing@acme.example.com"},"settings":{"notes":"Prepays monthly.","is_flagged":false,"is_flagged_notes":null,"has_terms":true,"has_terms_notes":"Signed IO on file.","auto_approve_pixel_uploads":false,"default_whitelist":"*"}}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":7},"company_name":{"type":"string","example":"Acme Demand Co."},"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@acme.example.com"},"status":{"type":"string","example":"approved"},"manager_id":{"type":"string","example":null,"nullable":true},"payment_frequency":{"type":"string","example":null,"nullable":true},"currency":{"type":"string","example":"USD"},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"profile":{"type":"object","properties":{"company_title":{"type":"string","example":"Head of Growth"},"address_line_1":{"type":"string","example":null,"nullable":true},"address_line_2":{"type":"string","example":null,"nullable":true},"city":{"type":"string","example":"Austin"},"state":{"type":"string","example":"TX"},"zip_code":{"type":"string","example":null,"nullable":true},"country":{"type":"string","example":"US"},"phone_number_1":{"type":"string","example":"+1 512 555 0100"},"phone_number_2":{"type":"string","example":null,"nullable":true},"preferred_contact_method":{"type":"string","example":"email"},"preferred_contact_time":{"type":"string","example":null,"nullable":true},"im_type":{"type":"string","example":null,"nullable":true},"im_screenname":{"type":"string","example":null,"nullable":true}}},"company":{"type":"object","properties":{"url":{"type":"string","example":"https:\/\/acme.example.com"},"address_line_1":{"type":"string","example":null,"nullable":true},"address_line_2":{"type":"string","example":null,"nullable":true},"city":{"type":"string","example":null,"nullable":true},"state":{"type":"string","example":null,"nullable":true},"zip_code":{"type":"string","example":null,"nullable":true},"country":{"type":"string","example":null,"nullable":true},"phone_number_1":{"type":"string","example":null,"nullable":true},"phone_number_2":{"type":"string","example":null,"nullable":true},"billing_email":{"type":"string","example":"billing@acme.example.com"}}},"settings":{"type":"object","properties":{"notes":{"type":"string","example":"Prepays monthly."},"is_flagged":{"type":"boolean","example":false},"is_flagged_notes":{"type":"string","example":null,"nullable":true},"has_terms":{"type":"boolean","example":true},"has_terms_notes":{"type":"string","example":"Signed IO on file."},"auto_approve_pixel_uploads":{"type":"boolean","example":false},"default_whitelist":{"type":"string","example":"*"}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"company_name":["The company name has already been taken."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"company_name":{"type":"array","example":["The company name has already been taken."],"items":{"type":"string"}}}}}}}}}},"tags":["Advertisers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"company_name":{"type":"string","description":"Advertiser company name (must be unique in your network). Must not be greater than 255 characters.","example":"Acme Demand Co."},"first_name":{"type":"string","description":"Optional first name of the primary contact. Defaults to \"Advertiser\". Must not be greater than 255 characters.","example":"Jane","nullable":true},"last_name":{"type":"string","description":"Optional last name of the primary contact. Defaults to \"User\". Must not be greater than 255 characters.","example":"Doe","nullable":true},"email":{"type":"string","description":"Optional contact email. A placeholder is generated if omitted. Must be a valid email address. Must not be greater than 255 characters.","example":"jane@acme.example.com","nullable":true},"manager_id":{"type":"integer","description":"Optional ID of an advertiser manager to assign. Use the Managers endpoint to retrieve valid IDs.","example":null,"nullable":true},"payment_frequency":{"type":"integer","description":"Optional payment frequency code (integer).","example":null,"nullable":true},"currency":{"type":"string","description":"ISO 4217 code this advertiser's new campaigns start in. `null` follows the network currency.","example":"EUR","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"],"nullable":true},"status":{"type":"string","description":"Initial status. Allowed: `APPROVED` (default), `PENDING`, `DENIED`, `TERMINATED`.","example":"APPROVED","enum":["pending","approved","denied","terminated"]},"profile":{"type":"object","description":"Primary contact details. Send only the fields to change. Fields: `company_title`, `address_line_1`, `address_line_2`, `city`, `state`, `zip_code`, `country`, `phone_number_1`, `phone_number_2`, `preferred_contact_method`, `preferred_contact_time`, `im_type`, `im_screenname`.","example":{"company_title":"Head of Growth","city":"Austin","state":"TX","country":"US","phone_number_1":"+1 512 555 0100","preferred_contact_method":"email"},"properties":{"company_title":{"type":"string","description":"Must not be greater than 255 characters.","example":"Head of Growth","nullable":true},"address_line_1":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"address_line_2":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true},"city":{"type":"string","description":"Must not be greater than 255 characters.","example":"Austin","nullable":true},"state":{"type":"string","description":"Must not be greater than 255 characters.","example":"TX","nullable":true},"zip_code":{"type":"string","description":"Must not be greater than 255 characters.","example":"g","nullable":true},"country":{"type":"string","description":"Must not be greater than 255 characters.","example":"US","nullable":true},"phone_number_1":{"type":"string","description":"Must not be greater than 255 characters.","example":"+1 512 555 0100","nullable":true},"phone_number_2":{"type":"string","description":"Must not be greater than 255 characters.","example":"z","nullable":true},"preferred_contact_method":{"type":"string","description":"Must not be greater than 255 characters.","example":"email","nullable":true},"preferred_contact_time":{"type":"string","description":"Must not be greater than 255 characters.","example":"m","nullable":true},"im_type":{"type":"string","description":"Must not be greater than 255 characters.","example":"i","nullable":true},"im_screenname":{"type":"string","description":"Must not be greater than 255 characters.","example":"y","nullable":true}}},"company":{"type":"object","description":"Company details besides `company_name`. Fields: `url`, `address_line_1`, `address_line_2`, `city`, `state`, `zip_code`, `country`, `phone_number_1`, `phone_number_2`, `billing_email`.","example":{"url":"https:\/\/acme.example.com","billing_email":"billing@acme.example.com"},"properties":{"url":{"type":"string","description":"Must not be greater than 2048 characters.","example":"https:\/\/acme.example.com","nullable":true},"address_line_1":{"type":"string","description":"Must not be greater than 255 characters.","example":"v","nullable":true},"address_line_2":{"type":"string","description":"Must not be greater than 255 characters.","example":"d","nullable":true},"city":{"type":"string","description":"Must not be greater than 255 characters.","example":"l","nullable":true},"state":{"type":"string","description":"Must not be greater than 255 characters.","example":"j","nullable":true},"zip_code":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true},"country":{"type":"string","description":"Must not be greater than 255 characters.","example":"i","nullable":true},"phone_number_1":{"type":"string","description":"Must not be greater than 255 characters.","example":"k","nullable":true},"phone_number_2":{"type":"string","description":"Must not be greater than 255 characters.","example":"h","nullable":true},"billing_email":{"type":"string","description":"Must be a valid email address. Must not be greater than 255 characters.","example":"billing@acme.example.com","nullable":true}}},"settings":{"type":"object","description":"Network-side settings. `notes` are internal; `is_flagged` \/ `has_terms` take optional `*_notes`; `auto_approve_pixel_uploads` approves this advertiser's pixels on upload; `default_whitelist` lists the IPs (one per line or comma-separated, `*` wildcards such as `10.0.*`) postbacks are accepted from, `*` for any.","example":{"notes":"Prepays monthly.","is_flagged":false,"has_terms":true,"has_terms_notes":"Signed IO on file.","auto_approve_pixel_uploads":false,"default_whitelist":"*"},"properties":{"notes":{"type":"string","description":"Must not be greater than 65535 characters.","example":"Prepays monthly.","nullable":true},"is_flagged":{"type":"boolean","description":"","example":false},"is_flagged_notes":{"type":"string","description":"Must not be greater than 65535 characters.","example":"w","nullable":true},"has_terms":{"type":"boolean","description":"","example":true},"has_terms_notes":{"type":"string","description":"Must not be greater than 65535 characters.","example":"Signed IO on file.","nullable":true},"auto_approve_pixel_uploads":{"type":"boolean","description":"","example":false},"default_whitelist":{"type":"string","description":"","example":"*","nullable":true}}}},"required":["company_name"]}}}}}},"\/api\/v1\/admin\/advertisers\/{id}":{"get":{"summary":"Get Advertiser","operationId":"getAdvertiser","description":"Returns a single advertiser by its ID.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":7,"company_name":"Acme Demand Co.","first_name":"Jane","last_name":"Doe","email":"jane@acme.example.com","status":"APPROVED","manager_id":null,"payment_frequency":null,"currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z","profile":{"company_title":"Head of Growth","address_line_1":null,"address_line_2":null,"city":"Austin","state":"TX","zip_code":null,"country":"US","phone_number_1":"+1 512 555 0100","phone_number_2":null,"preferred_contact_method":"email","preferred_contact_time":null,"im_type":null,"im_screenname":null},"company":{"url":"https:\/\/acme.example.com","address_line_1":null,"address_line_2":null,"city":null,"state":null,"zip_code":null,"country":null,"phone_number_1":null,"phone_number_2":null,"billing_email":"billing@acme.example.com"},"settings":{"notes":"Prepays monthly.","is_flagged":false,"is_flagged_notes":null,"has_terms":true,"has_terms_notes":"Signed IO on file.","auto_approve_pixel_uploads":false,"default_whitelist":"*"}}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":7},"company_name":{"type":"string","example":"Acme Demand Co."},"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@acme.example.com"},"status":{"type":"string","example":"APPROVED"},"manager_id":{"type":"string","example":null,"nullable":true},"payment_frequency":{"type":"string","example":null,"nullable":true},"currency":{"type":"string","example":"USD"},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"profile":{"type":"object","properties":{"company_title":{"type":"string","example":"Head of Growth"},"address_line_1":{"type":"string","example":null,"nullable":true},"address_line_2":{"type":"string","example":null,"nullable":true},"city":{"type":"string","example":"Austin"},"state":{"type":"string","example":"TX"},"zip_code":{"type":"string","example":null,"nullable":true},"country":{"type":"string","example":"US"},"phone_number_1":{"type":"string","example":"+1 512 555 0100"},"phone_number_2":{"type":"string","example":null,"nullable":true},"preferred_contact_method":{"type":"string","example":"email"},"preferred_contact_time":{"type":"string","example":null,"nullable":true},"im_type":{"type":"string","example":null,"nullable":true},"im_screenname":{"type":"string","example":null,"nullable":true}}},"company":{"type":"object","properties":{"url":{"type":"string","example":"https:\/\/acme.example.com"},"address_line_1":{"type":"string","example":null,"nullable":true},"address_line_2":{"type":"string","example":null,"nullable":true},"city":{"type":"string","example":null,"nullable":true},"state":{"type":"string","example":null,"nullable":true},"zip_code":{"type":"string","example":null,"nullable":true},"country":{"type":"string","example":null,"nullable":true},"phone_number_1":{"type":"string","example":null,"nullable":true},"phone_number_2":{"type":"string","example":null,"nullable":true},"billing_email":{"type":"string","example":"billing@acme.example.com"}}},"settings":{"type":"object","properties":{"notes":{"type":"string","example":"Prepays monthly."},"is_flagged":{"type":"boolean","example":false},"is_flagged_notes":{"type":"string","example":null,"nullable":true},"has_terms":{"type":"boolean","example":true},"has_terms_notes":{"type":"string","example":"Signed IO on file."},"auto_approve_pixel_uploads":{"type":"boolean","example":false},"default_whitelist":{"type":"string","example":"*"}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"]},"put":{"summary":"Update Advertiser","operationId":"updateAdvertiser","description":"Partially updates an advertiser by its ID. Only\nthe fields you include in the body are updated. Manager assignment\nreplaces (not appends to) any existing manager.\n`PATCH` and `PUT` are both accepted and behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":7,"company_name":"Acme Demand Co. (Renamed)","first_name":"Jane","last_name":"Doe","email":"jane@acme.example.com","status":"APPROVED","manager_id":null,"payment_frequency":2,"currency":"USD","created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T13:00:00Z","profile":{"company_title":"Head of Growth","address_line_1":null,"address_line_2":null,"city":"Austin","state":"TX","zip_code":null,"country":"US","phone_number_1":"+1 512 555 0100","phone_number_2":null,"preferred_contact_method":"email","preferred_contact_time":null,"im_type":null,"im_screenname":null},"company":{"url":"https:\/\/acme.example.com","address_line_1":null,"address_line_2":null,"city":null,"state":null,"zip_code":null,"country":null,"phone_number_1":null,"phone_number_2":null,"billing_email":"billing@acme.example.com"},"settings":{"notes":"Prepays monthly.","is_flagged":false,"is_flagged_notes":null,"has_terms":true,"has_terms_notes":"Signed IO on file.","auto_approve_pixel_uploads":false,"default_whitelist":"*"}}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":7},"company_name":{"type":"string","example":"Acme Demand Co. (Renamed)"},"first_name":{"type":"string","example":"Jane"},"last_name":{"type":"string","example":"Doe"},"email":{"type":"string","example":"jane@acme.example.com"},"status":{"type":"string","example":"APPROVED"},"manager_id":{"type":"string","example":null,"nullable":true},"payment_frequency":{"type":"integer","example":2},"currency":{"type":"string","example":"USD"},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T13:00:00Z"},"profile":{"type":"object","properties":{"company_title":{"type":"string","example":"Head of Growth"},"address_line_1":{"type":"string","example":null,"nullable":true},"address_line_2":{"type":"string","example":null,"nullable":true},"city":{"type":"string","example":"Austin"},"state":{"type":"string","example":"TX"},"zip_code":{"type":"string","example":null,"nullable":true},"country":{"type":"string","example":"US"},"phone_number_1":{"type":"string","example":"+1 512 555 0100"},"phone_number_2":{"type":"string","example":null,"nullable":true},"preferred_contact_method":{"type":"string","example":"email"},"preferred_contact_time":{"type":"string","example":null,"nullable":true},"im_type":{"type":"string","example":null,"nullable":true},"im_screenname":{"type":"string","example":null,"nullable":true}}},"company":{"type":"object","properties":{"url":{"type":"string","example":"https:\/\/acme.example.com"},"address_line_1":{"type":"string","example":null,"nullable":true},"address_line_2":{"type":"string","example":null,"nullable":true},"city":{"type":"string","example":null,"nullable":true},"state":{"type":"string","example":null,"nullable":true},"zip_code":{"type":"string","example":null,"nullable":true},"country":{"type":"string","example":null,"nullable":true},"phone_number_1":{"type":"string","example":null,"nullable":true},"phone_number_2":{"type":"string","example":null,"nullable":true},"billing_email":{"type":"string","example":"billing@acme.example.com"}}},"settings":{"type":"object","properties":{"notes":{"type":"string","example":"Prepays monthly."},"is_flagged":{"type":"boolean","example":false},"is_flagged_notes":{"type":"string","example":null,"nullable":true},"has_terms":{"type":"boolean","example":true},"has_terms_notes":{"type":"string","example":"Signed IO on file."},"auto_approve_pixel_uploads":{"type":"boolean","example":false},"default_whitelist":{"type":"string","example":"*"}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"email":["The email must be a valid email address."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"email":{"type":"array","example":["The email must be a valid email address."],"items":{"type":"string"}}}}}}}}}},"tags":["Advertisers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"company_name":{"type":"string","description":"Advertiser company name. Must not be greater than 255 characters.","example":"Acme Demand Co. (Renamed)"},"first_name":{"type":"string","description":"First name of the primary contact. Must not be greater than 255 characters.","example":"Jane","nullable":true},"last_name":{"type":"string","description":"Last name of the primary contact. Must not be greater than 255 characters.","example":"Doe","nullable":true},"email":{"type":"string","description":"Contact email address. Must be a valid email address. Must not be greater than 255 characters.","example":"jane@acme.example.com","nullable":true},"status":{"type":"string","description":"Advertiser status. Allowed: `APPROVED`, `DENIED`, `PENDING`, `TERMINATED`.","example":"APPROVED","enum":["pending","approved","denied","terminated"]},"manager_id":{"type":"integer","description":"ID of an advertiser manager to assign, or `null` to remove the current manager. Use the Managers endpoint to retrieve valid IDs.","example":null,"nullable":true},"payment_frequency":{"type":"integer","description":"Payment frequency code (integer).","example":2,"nullable":true},"currency":{"type":"string","description":"ISO 4217 code this advertiser's new campaigns start in. `null` follows the network currency.","example":"EUR","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"],"nullable":true},"profile":{"type":"object","description":"Primary contact details. Send only the fields to change. Fields: `company_title`, `address_line_1`, `address_line_2`, `city`, `state`, `zip_code`, `country`, `phone_number_1`, `phone_number_2`, `preferred_contact_method`, `preferred_contact_time`, `im_type`, `im_screenname`.","example":{"company_title":"Head of Growth","city":"Austin","state":"TX","country":"US","phone_number_1":"+1 512 555 0100","preferred_contact_method":"email"},"properties":{"company_title":{"type":"string","description":"Must not be greater than 255 characters.","example":"Head of Growth","nullable":true},"address_line_1":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"address_line_2":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true},"city":{"type":"string","description":"Must not be greater than 255 characters.","example":"Austin","nullable":true},"state":{"type":"string","description":"Must not be greater than 255 characters.","example":"TX","nullable":true},"zip_code":{"type":"string","description":"Must not be greater than 255 characters.","example":"g","nullable":true},"country":{"type":"string","description":"Must not be greater than 255 characters.","example":"US","nullable":true},"phone_number_1":{"type":"string","description":"Must not be greater than 255 characters.","example":"+1 512 555 0100","nullable":true},"phone_number_2":{"type":"string","description":"Must not be greater than 255 characters.","example":"z","nullable":true},"preferred_contact_method":{"type":"string","description":"Must not be greater than 255 characters.","example":"email","nullable":true},"preferred_contact_time":{"type":"string","description":"Must not be greater than 255 characters.","example":"m","nullable":true},"im_type":{"type":"string","description":"Must not be greater than 255 characters.","example":"i","nullable":true},"im_screenname":{"type":"string","description":"Must not be greater than 255 characters.","example":"y","nullable":true}}},"company":{"type":"object","description":"Company details besides `company_name`. Fields: `url`, `address_line_1`, `address_line_2`, `city`, `state`, `zip_code`, `country`, `phone_number_1`, `phone_number_2`, `billing_email`.","example":{"url":"https:\/\/acme.example.com","billing_email":"billing@acme.example.com"},"properties":{"url":{"type":"string","description":"Must not be greater than 2048 characters.","example":"https:\/\/acme.example.com","nullable":true},"address_line_1":{"type":"string","description":"Must not be greater than 255 characters.","example":"v","nullable":true},"address_line_2":{"type":"string","description":"Must not be greater than 255 characters.","example":"d","nullable":true},"city":{"type":"string","description":"Must not be greater than 255 characters.","example":"l","nullable":true},"state":{"type":"string","description":"Must not be greater than 255 characters.","example":"j","nullable":true},"zip_code":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true},"country":{"type":"string","description":"Must not be greater than 255 characters.","example":"i","nullable":true},"phone_number_1":{"type":"string","description":"Must not be greater than 255 characters.","example":"k","nullable":true},"phone_number_2":{"type":"string","description":"Must not be greater than 255 characters.","example":"h","nullable":true},"billing_email":{"type":"string","description":"Must be a valid email address. Must not be greater than 255 characters.","example":"billing@acme.example.com","nullable":true}}},"settings":{"type":"object","description":"Network-side settings. `notes` are internal; `is_flagged` \/ `has_terms` take optional `*_notes`; `auto_approve_pixel_uploads` approves this advertiser's pixels on upload; `default_whitelist` lists the IPs (one per line or comma-separated, `*` wildcards such as `10.0.*`) postbacks are accepted from, `*` for any.","example":{"notes":"Prepays monthly.","is_flagged":false,"has_terms":true,"has_terms_notes":"Signed IO on file.","auto_approve_pixel_uploads":false,"default_whitelist":"*"},"properties":{"notes":{"type":"string","description":"Must not be greater than 65535 characters.","example":"Prepays monthly.","nullable":true},"is_flagged":{"type":"boolean","description":"","example":false},"is_flagged_notes":{"type":"string","description":"Must not be greater than 65535 characters.","example":"w","nullable":true},"has_terms":{"type":"boolean","description":"","example":true},"has_terms_notes":{"type":"string","description":"Must not be greater than 65535 characters.","example":"Signed IO on file.","nullable":true},"auto_approve_pixel_uploads":{"type":"boolean","description":"","example":false},"default_whitelist":{"type":"string","description":"","example":"*","nullable":true}}}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/advertisers\/{id}\/tracking":{"get":{"summary":"Get Advertiser Tracking Setup","operationId":"getAdvertiserTrackingSetup","description":"Returns the advertiser's **global** tracking setup \u2014 a postback and pixel\nthat work across every campaign under this advertiser, mirroring the\n\"Global Postbacks\/Pixels\" tab in the dashboard.\n\nUse this when an advertiser wants one integration for all of their\ncampaigns; the campaign is resolved from the click ID. For per-campaign\nURLs (and the container tag) use\n`GET \/admin\/campaigns\/{id}\/tracking` instead.\n\nPass `optional_params=true` to receive the URLs with the full optional\ntail (`revenue`, `event_id`, `order_id`, `order_total`, sub IDs) appended.","parameters":[{"in":"query","name":"optional_params","description":"Append the optional parameter tail (revenue, event_id, order_id, order_total, sub IDs) to the returned URLs. Defaults to false.","example":false,"required":false,"schema":{"type":"boolean","description":"Append the optional parameter tail (revenue, event_id, order_id, order_total, sub IDs) to the returned URLs. Defaults to false.","example":false}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"postback_url":"https:\/\/track.example.com\/postback\/abc123?uid={CLICK_ID}","pixel_html":"<script src=\"https:\/\/track.example.com\/pixel\/abc123.js?uid={CLICK_ID}\" async><\/script>","sdk_url":"https:\/\/track.example.com\/sdk.js?v=2","components":{"tracking_domain":"track.example.com","conversion_token":"abc123","click_id_param":"uid","revenue_param_name":null,"revenue_param_token":null,"revenue_required":false,"publisher_payout_param_name":null,"publisher_payout_param_token":null,"publisher_payout_required":false}}},"properties":{"data":{"type":"object","properties":{"postback_url":{"type":"string","example":"https:\/\/track.example.com\/postback\/abc123?uid={CLICK_ID}"},"pixel_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/pixel\/abc123.js?uid={CLICK_ID}\" async><\/script>"},"sdk_url":{"type":"string","example":"https:\/\/track.example.com\/sdk.js?v=2"},"components":{"type":"object","properties":{"tracking_domain":{"type":"string","example":"track.example.com"},"conversion_token":{"type":"string","example":"abc123"},"click_id_param":{"type":"string","example":"uid"},"revenue_param_name":{"type":"string","example":null,"nullable":true},"revenue_param_token":{"type":"string","example":null,"nullable":true},"revenue_required":{"type":"boolean","example":false},"publisher_payout_param_name":{"type":"string","example":null,"nullable":true},"publisher_payout_param_token":{"type":"string","example":null,"nullable":true},"publisher_payout_required":{"type":"boolean","example":false}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"no_tracking_domain","message":"No tracking domain is configured for this network."},"properties":{"code":{"type":"string","example":"no_tracking_domain"},"message":{"type":"string","example":"No tracking domain is configured for this network."}}}}}}},"tags":["Advertisers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/advertisers\/{id}\/caps":{"get":{"summary":"Get Advertiser Caps","operationId":"getAdvertiserCaps","description":"The advertiser cap: limits counted across the listed campaigns of the advertiser, and\nwhere each campaign sends traffic once a limit is reached.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"is_active":true,"caps":[{"metric":"lead","window":"day","limit":1000}],"campaigns":[{"id":42,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null}]}},"properties":{"data":{"type":"object","properties":{"is_active":{"type":"boolean","example":true},"caps":{"type":"array","example":[{"metric":"lead","window":"day","limit":1000}],"items":{"type":"object","properties":{"metric":{"type":"string","example":"lead"},"window":{"type":"string","example":"day"},"limit":{"type":"integer","example":1000}}}},"campaigns":{"type":"array","example":[{"id":42,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null}],"items":{"type":"object","properties":{"id":{"type":"integer","example":42},"redirect_campaign_id":{"type":"integer","example":43},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true}}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"]},"put":{"summary":"Update Advertiser Caps","operationId":"updateAdvertiserCaps","description":"Replaces the advertiser cap, as the Caps card on the dashboard does. Send `\"is_active\": false`\nto remove it.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"is_active":true,"caps":[{"metric":"lead","window":"day","limit":1000}],"campaigns":[{"id":42,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null}]}},"properties":{"data":{"type":"object","properties":{"is_active":{"type":"boolean","example":true},"caps":{"type":"array","example":[{"metric":"lead","window":"day","limit":1000}],"items":{"type":"object","properties":{"metric":{"type":"string","example":"lead"},"window":{"type":"string","example":"day"},"limit":{"type":"integer","example":1000}}}},"campaigns":{"type":"array","example":[{"id":42,"redirect_campaign_id":43,"redirect_creative_id":null,"redirect_smarter_link_id":null}],"items":{"type":"object","properties":{"id":{"type":"integer","example":42},"redirect_campaign_id":{"type":"integer","example":43},"redirect_creative_id":{"type":"string","example":null,"nullable":true},"redirect_smarter_link_id":{"type":"string","example":null,"nullable":true}}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"is_advertiser_cap_active":{"type":"boolean","description":"","example":true},"caps":{"type":"array","description":"Every advertiser cap, replacing the current set. Counted across the campaigns in `campaigns`. This field is required when <code>is_advertiser_cap_active<\/code> is <code>true<\/code>.","example":[{"metric":"lead","window":"day","limit":1000}],"items":{"type":"object","properties":{"limit":{"type":"number","description":"This field is required when <code>is_advertiser_cap_active<\/code> is <code>true<\/code>. Must be at least 0.","example":39},"type":{"type":"integer","description":"This field is required when <code>is_advertiser_cap_active<\/code> is <code>true<\/code>.","example":4,"enum":[1,2,3,4]},"metric":{"type":"string","description":"","example":"cpa","enum":["lead","click","cpa","revenue"]}},"required":["metric"]}},"selected_campaigns":{"type":"array","description":"","example":[16],"items":{"type":"integer"}},"redirects":{"type":"array","description":"","example":null,"items":{"type":"object","properties":{"advertiser_cap_redirect_campaign_id":{"type":"integer","description":"","example":16,"nullable":true},"advertiser_cap_redirect_creative_id":{"type":"integer","description":"","example":16,"nullable":true},"advertiser_cap_redirect_smarter_link_id":{"type":"integer","description":"","example":16,"nullable":true}}}},"is_active":{"type":"boolean","description":"Turns the advertiser cap on or off. Defaults to true when `caps` is not empty. Off removes every advertiser cap and redirect.","example":true},"campaigns":{"type":"array","description":"","example":null,"items":{"type":"object","properties":{"id":{"type":"integer","description":"","example":16}},"required":["id"]}}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/advertisers\/{id}\/clickless":{"get":{"summary":"Get Advertiser Clickless Conversions","operationId":"getAdvertiserClicklessConversions","description":"Whether the advertiser accepts conversions that arrive without a click, on which campaigns,\nand how each campaign spots duplicates.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"enabled":true,"all_campaigns":false,"campaigns":[{"id":42,"dedupe_token":"order_id","dedupe_scope":"campaign"}]}},"properties":{"data":{"type":"object","properties":{"enabled":{"type":"boolean","example":true},"all_campaigns":{"type":"boolean","example":false},"campaigns":{"type":"array","example":[{"id":42,"dedupe_token":"order_id","dedupe_scope":"campaign"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":42},"dedupe_token":{"type":"string","example":"order_id"},"dedupe_scope":{"type":"string","example":"campaign"}}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"]},"put":{"summary":"Update Advertiser Clickless Conversions","operationId":"updateAdvertiserClicklessConversions","description":"Replaces the clickless conversion settings, as the dashboard's Clickless card does.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"enabled":true,"all_campaigns":false,"campaigns":[{"id":42,"dedupe_token":"order_id","dedupe_scope":"campaign"}]}},"properties":{"data":{"type":"object","properties":{"enabled":{"type":"boolean","example":true},"all_campaigns":{"type":"boolean","example":false},"campaigns":{"type":"array","example":[{"id":42,"dedupe_token":"order_id","dedupe_scope":"campaign"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":42},"dedupe_token":{"type":"string","example":"order_id"},"dedupe_scope":{"type":"string","example":"campaign"}}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"clickless_conversions_enabled":{"type":"boolean","description":"","example":false},"clickless_all_campaigns":{"type":"boolean","description":"","example":false},"selected_campaigns":{"type":"array","description":"","example":[16],"items":{"type":"integer"}},"dedupe":{"type":"array","description":"","example":null,"items":{"type":"object","nullable":true,"properties":{"token":{"type":"string","description":"","example":"s4","enum":["order_id","s1","s2","s3","s4","s5","s6","s7"]},"scope":{"type":"string","description":"","example":"advertiser","enum":["publisher","campaign","advertiser"]}},"required":["token","scope"]}},"enabled":{"type":"boolean","description":"Accept conversions for this advertiser that arrive without a click. Off clears the campaign list and every dedupe setting.","example":true},"all_campaigns":{"type":"boolean","description":"Apply to every campaign of the advertiser, including future ones, instead of `campaigns`.","example":false},"campaigns":{"type":"array","description":"","example":null,"items":{"type":"object","properties":{"id":{"type":"integer","description":"","example":16}},"required":["id"]}}},"required":["clickless_conversions_enabled","enabled"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/advertisers\/{id}\/products":{"get":{"summary":"List Advertiser Products","operationId":"listAdvertiserProducts","description":"","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":"6c4f1b8e-2a3d-4e5f-9a10-1b2c3d4e5f60","name":"Solar Quotes","url":"https:\/\/acme.example.com\/solar","description":null}]},"properties":{"data":{"type":"array","example":[{"id":"6c4f1b8e-2a3d-4e5f-9a10-1b2c3d4e5f60","name":"Solar Quotes","url":"https:\/\/acme.example.com\/solar","description":null}],"items":{"type":"object","properties":{"id":{"type":"string","example":"6c4f1b8e-2a3d-4e5f-9a10-1b2c3d4e5f60"},"name":{"type":"string","example":"Solar Quotes"},"url":{"type":"string","example":"https:\/\/acme.example.com\/solar"},"description":{"type":"string","example":null,"nullable":true}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"]},"put":{"summary":"Replace Advertiser Products","operationId":"replaceAdvertiserProducts","description":"Sets the advertiser's product list. Send a product's `id` to update it and leave it out to\nadd a new one; products not in the list are removed.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":"6c4f1b8e-2a3d-4e5f-9a10-1b2c3d4e5f60","name":"Solar Quotes","url":"https:\/\/acme.example.com\/solar","description":null}]},"properties":{"data":{"type":"array","example":[{"id":"6c4f1b8e-2a3d-4e5f-9a10-1b2c3d4e5f60","name":"Solar Quotes","url":"https:\/\/acme.example.com\/solar","description":null}],"items":{"type":"object","properties":{"id":{"type":"string","example":"6c4f1b8e-2a3d-4e5f-9a10-1b2c3d4e5f60"},"name":{"type":"string","example":"Solar Quotes"},"url":{"type":"string","example":"https:\/\/acme.example.com\/solar"},"description":{"type":"string","example":null,"nullable":true}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"products":{"type":"array","description":"","example":null,"items":{"type":"object","properties":{"id":{"type":"string","description":"Must be a valid UUID.","example":"6ff8f7f6-1eb3-3525-be4a-3932c805afed","nullable":true},"name":{"type":"string","description":"Must not be greater than 255 characters.","example":"g"},"url":{"type":"string","description":"Must not be greater than 2048 characters.","example":"http:\/\/www.okuneva.com\/fugiat-sunt-nihil-accusantium-harum-mollitia.html","nullable":true},"description":{"type":"string","description":"Must not be greater than 65535 characters.","example":"Deserunt aut ab provident perspiciatis quo omnis nostrum.","nullable":true}},"required":["name"]}}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/advertisers\/{id}\/mark-email-verified":{"post":{"summary":"Mark Advertiser Email Verified","operationId":"markAdvertiserEmailVerified","description":"Marks the advertiser's email address as verified and cancels any pending verification\nemail, as the dashboard's Mark as verified does.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Email address marked as verified.","email_verified_at":"2026-10-19T12:00:00+00:00"},"properties":{"message":{"type":"string","example":"Email address marked as verified."},"email_verified_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/advertisers\/{id}\/events":{"get":{"summary":"List Advertiser Events","operationId":"listAdvertiserEvents","description":"Returns an advertiser's global events. These are the valid values for\n`advertiser_event_id` when creating or updating a campaign event \u2014 link a\ncampaign event to one so a single tracking URL works across every campaign\nof the advertiser.\n\n`linked_campaign_event_count` tells you how many campaign events currently\npoint at each one.","parameters":[{"in":"query","name":"per_page","description":"Items per page. Defaults to 25. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 25. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"event_id":4,"name":"Upsell","advertiser_id":7,"linked_campaign_event_count":2,"reporting_param":"adv_event_id","reporting_id":4,"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"event_id":4,"name":"Upsell","advertiser_id":7,"linked_campaign_event_count":2,"reporting_param":"adv_event_id","reporting_id":4,"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}],"items":{"type":"object","properties":{"event_id":{"type":"integer","example":4},"name":{"type":"string","example":"Upsell"},"advertiser_id":{"type":"integer","example":7},"linked_campaign_event_count":{"type":"integer","example":2},"reporting_param":{"type":"string","example":"adv_event_id"},"reporting_id":{"type":"integer","example":4},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}}},"tags":["Advertisers"]},"post":{"summary":"Create Advertiser Event","operationId":"createAdvertiserEvent","description":"Creates a global event on an advertiser. Link campaign events to it (via\n`advertiser_event_id`) so one tracking URL reports the event across every\ncampaign of that advertiser.\n\nThe returned `event_id` is what you pass as `advertiser_event_id` when\ncreating or updating a campaign event.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"event_id":4,"name":"Upsell","advertiser_id":7,"linked_campaign_event_count":0,"reporting_param":"adv_event_id","reporting_id":4,"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"event_id":{"type":"integer","example":4},"name":{"type":"string","example":"Upsell"},"advertiser_id":{"type":"integer","example":7},"linked_campaign_event_count":{"type":"integer","example":0},"reporting_param":{"type":"string","example":"adv_event_id"},"reporting_id":{"type":"integer","example":4},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"name":["The name field is required."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"name":{"type":"array","example":["The name field is required."],"items":{"type":"string"}}}}}}}}}},"tags":["Advertisers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Event name, shown when linking campaign events to it. Must not be greater than 255 characters.","example":"Upsell"}},"required":["name"]}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/advertisers\/{id}\/events\/{event_id}":{"put":{"summary":"Update Advertiser Event","operationId":"updateAdvertiserEvent","description":"Renames an advertiser's global event. The event ID and its tracking URLs\nare unaffected, so campaign events linked to it keep working.\n\n`PATCH` and `PUT` are both accepted and behave identically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"event_id":4,"name":"Upsell (renamed)","advertiser_id":7,"linked_campaign_event_count":2,"reporting_param":"adv_event_id","reporting_id":4,"created_at":"2026-05-01T12:00:00Z","updated_at":"2026-05-02T09:00:00Z"}},"properties":{"data":{"type":"object","properties":{"event_id":{"type":"integer","example":4},"name":{"type":"string","example":"Upsell (renamed)"},"advertiser_id":{"type":"integer","example":7},"linked_campaign_event_count":{"type":"integer","example":2},"reporting_param":{"type":"string","example":"adv_event_id"},"reporting_id":{"type":"integer","example":4},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"},"updated_at":{"type":"string","example":"2026-05-02T09:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser event not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser event not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"name":["The name field is required."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"name":{"type":"array","example":["The name field is required."],"items":{"type":"string"}}}}}}}}}},"tags":["Advertisers"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Event name, shown when linking campaign events to it. Must not be greater than 255 characters.","example":"Upsell"}},"required":["name"]}}}}},"delete":{"summary":"Delete Advertiser Event","operationId":"deleteAdvertiserEvent","description":"Removes an advertiser's global event. The record is soft-deleted, matching\nthe dashboard.\n\nAn event that still has campaign events linked to it cannot be deleted:\nunlinking them silently would leave those campaign events serving tracking\nURLs that no longer resolve. Unlink them first by clearing\n`advertiser_event_id` on each.\n\nLikewise, an event with global-event postbacks placed on it (from the\ndashboard) cannot be deleted until those postbacks are removed.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Advertiser event deleted."},"properties":{"message":{"type":"string","example":"Advertiser event deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser event not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser event not found."}}}}}},"409":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"event_in_use","message":"This advertiser event still has campaign events linked to it."},"properties":{"code":{"type":"string","example":"event_in_use"},"message":{"type":"string","example":"This advertiser event still has campaign events linked to it."}}}}}}},"tags":["Advertisers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"event_id","description":"The ID of the advertiser event.","example":4,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/advertisers\/{id}\/events\/{event_id}\/tracking":{"get":{"summary":"Get Advertiser Event Tracking Setup","operationId":"getAdvertiserEventTrackingSetup","description":"Returns the postback, pixel and container URLs for an advertiser-level\nevent. These are the URLs to hand to the advertiser once: they fire the\nevent across every campaign of that advertiser, because the click resolves\nthe campaign and whichever campaign event is linked to this advertiser\nevent supplies the payout configuration.\n\nThe same URLs are what `GET \/admin\/campaigns\/{id}\/events\/{event_id}\/tracking`\nreturns for any campaign event linked to this advertiser event.\n\nThe alternative is to fire the advertiser's global postback with\n`reporting_param` \/ `reporting_id` appended.\n\n`sdk_conversion_html` fires this global event from the advertiser's page with\nthe ClickGo SDK (`advEventId`).\n\nPass `optional_params=true` to receive the URLs with the optional tail\n(`revenue`, `order_id`, `order_total`, sub IDs) appended.","parameters":[{"in":"query","name":"optional_params","description":"Append the optional parameter tail (revenue, order_id, order_total, sub IDs) to the returned URLs. Defaults to false.","example":false,"required":false,"schema":{"type":"boolean","description":"Append the optional parameter tail (revenue, order_id, order_total, sub IDs) to the returned URLs. Defaults to false.","example":false}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"postback_url":"https:\/\/track.example.com\/advertiser\/event\/postback\/ae123?uid={CLICK_ID}","pixel_html":"<script src=\"https:\/\/track.example.com\/advertiser\/event\/pixel\/ae123.js?uid={CLICK_ID}\" async><\/script>","container_html":"<script src=\"https:\/\/track.example.com\/advertiser\/event\/container\/ae123.js?uid={CLICK_ID}\" async><\/script>","clickless_postback_url":null,"clickless_enabled":false,"reporting_param":"adv_event_id","reporting_id":4,"sdk_url":"https:\/\/track.example.com\/sdk.js?v=2","sdk_conversion_html":"<script src=\"https:\/\/track.example.com\/sdk.js?v=2\"><\/script>\n<script>\n  ClickGo.trackEvent({\n    advEventId: 4\n  });\n<\/script>","components":{"tracking_domain":"track.example.com","conversion_token":"ae123","click_id_param":"uid","revenue_param_name":null,"revenue_param_token":null,"revenue_required":false,"publisher_payout_param_name":null,"publisher_payout_param_token":null,"publisher_payout_required":false}}},"properties":{"data":{"type":"object","properties":{"postback_url":{"type":"string","example":"https:\/\/track.example.com\/advertiser\/event\/postback\/ae123?uid={CLICK_ID}"},"pixel_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/advertiser\/event\/pixel\/ae123.js?uid={CLICK_ID}\" async><\/script>"},"container_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/advertiser\/event\/container\/ae123.js?uid={CLICK_ID}\" async><\/script>"},"clickless_postback_url":{"type":"string","example":null,"nullable":true},"clickless_enabled":{"type":"boolean","example":false},"reporting_param":{"type":"string","example":"adv_event_id"},"reporting_id":{"type":"integer","example":4},"sdk_url":{"type":"string","example":"https:\/\/track.example.com\/sdk.js?v=2"},"sdk_conversion_html":{"type":"string","example":"<script src=\"https:\/\/track.example.com\/sdk.js?v=2\"><\/script>\n<script>\n  ClickGo.trackEvent({\n    advEventId: 4\n  });\n<\/script>"},"components":{"type":"object","properties":{"tracking_domain":{"type":"string","example":"track.example.com"},"conversion_token":{"type":"string","example":"ae123"},"click_id_param":{"type":"string","example":"uid"},"revenue_param_name":{"type":"string","example":null,"nullable":true},"revenue_param_token":{"type":"string","example":null,"nullable":true},"revenue_required":{"type":"boolean","example":false},"publisher_payout_param_name":{"type":"string","example":null,"nullable":true},"publisher_payout_param_token":{"type":"string","example":null,"nullable":true},"publisher_payout_required":{"type":"boolean","example":false}}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Advertiser event not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Advertiser event not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"no_tracking_domain","message":"No tracking domain is configured for this network."},"properties":{"code":{"type":"string","example":"no_tracking_domain"},"message":{"type":"string","example":"No tracking domain is configured for this network."}}}}}}},"tags":["Advertisers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the advertiser.","example":7,"required":true,"schema":{"type":"integer"}},{"in":"path","name":"event_id","description":"The ID of the advertiser event.","example":4,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/creatives":{"get":{"summary":"List Creatives","operationId":"listCreatives","description":"Returns a paginated list of creatives in your network. Filters are flat\nquery parameters.","parameters":[{"in":"query","name":"name","description":"Partial match on creative name (case-insensitive).","example":"banner","required":false,"schema":{"type":"string","description":"Partial match on creative name (case-insensitive).","example":"banner"}},{"in":"query","name":"campaign_id","description":"Return only the creatives of this campaign. An ID that does not exist in your network answers `422`.","example":12,"required":false,"schema":{"type":"integer","description":"Return only the creatives of this campaign. An ID that does not exist in your network answers `422`.","example":12}},{"in":"query","name":"type","description":"Filter by creative type. Allowed: `TEXT`, `DPLY`, `EMAIL`.","example":"TEXT","required":false,"schema":{"type":"string","description":"Filter by creative type. Allowed: `TEXT`, `DPLY`, `EMAIL`.","example":"TEXT"}},{"in":"query","name":"is_active","description":"Filter by activation flag.","example":true,"required":false,"schema":{"type":"boolean","description":"Filter by activation flag.","example":true}},{"in":"query","name":"with_content","description":"Include the HTML body of email creatives in `details.content`. Off by default to keep pages small; the single-creative GET always includes it.","example":false,"required":false,"schema":{"type":"boolean","description":"Include the HTML body of email creatives in `details.content`. Off by default to keep pages small; the single-creative GET always includes it.","example":false}},{"in":"query","name":"created_after","description":"Return only creatives created on or after this ISO date.","example":"2026-01-01","required":false,"schema":{"type":"string","description":"Return only creatives created on or after this ISO date.","example":"2026-01-01"}},{"in":"query","name":"created_before","description":"Return only creatives created on or before this ISO date.","example":"2026-12-31","required":false,"schema":{"type":"string","description":"Return only creatives created on or before this ISO date.","example":"2026-12-31"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `type`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `type`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":7,"campaign_id":12,"name":"Spring Banner 728x90","destination_url":"https:\/\/...","type":"TEXT","is_active":true,"creative_redirect_id":null,"redirect_to_invalid":false,"is_private":false,"publisher_ids":[],"details":null,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":7,"campaign_id":12,"name":"Spring Banner 728x90","destination_url":"https:\/\/...","type":"TEXT","is_active":true,"creative_redirect_id":null,"redirect_to_invalid":false,"is_private":false,"publisher_ids":[],"details":null,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":7},"campaign_id":{"type":"integer","example":12},"name":{"type":"string","example":"Spring Banner 728x90"},"destination_url":{"type":"string","example":"https:\/\/..."},"type":{"type":"string","example":"TEXT"},"is_active":{"type":"boolean","example":true},"creative_redirect_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":false},"is_private":{"type":"boolean","example":false},"publisher_ids":{"type":"array","example":[]},"details":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The selected type is invalid.","errors":{"type":["The selected type is invalid."]}},"properties":{"message":{"type":"string","example":"The selected type is invalid."},"errors":{"type":"object","properties":{"type":{"type":"array","example":["The selected type is invalid."],"items":{"type":"string"}}}}}}}}}},"tags":["Creatives"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"campaign_id":{"type":"integer","description":"","example":16,"nullable":true},"type":{"type":"string","description":"","example":"FILES","enum":["DPLY","EMAIL","TEXT","FILES"],"nullable":true},"is_active":{"type":"boolean","description":"","example":false,"nullable":true},"with_content":{"type":"string","description":"","example":"true","enum":["0","1","true","false"],"nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-11-02T03:04:28","nullable":true},"created_before":{"type":"string","description":"Must be a valid date. Must be a date after or equal to <code>created_after<\/code>.","example":"2052-11-25","nullable":true},"sort":{"type":"string","description":"","example":"-type","enum":["id","-id","name","-name","type","-type","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true}}}}}}},"post":{"summary":"Create Creative","operationId":"createCreative","description":"Creates a new text creative attached to a campaign. The `campaign_id`\nfield accepts a campaign ID. Display and email creatives\n(which require image\/file uploads) must be created via the dashboard.\n\n**Destination URL tokens** \u2014 `destination_url` may contain `{TOKEN}`\nplaceholders that are replaced with real values at click time:\n\n| Token | Description |\n|-------|-------------|\n| `{CLICK_ID}` | Unique click ID (use this to receive conversions back) |\n| `{CAMPAIGN_ID}` | Campaign ID |\n| `{CREATIVE_ID}` | Creative ID |\n| `{CREATIVE_NAME}` | Creative name (URL-encoded) |\n| `{PUBLISHER_ID}` | Publisher ID (`{AFFILIATE_ID}` is a legacy alias) |\n| `{PUBLISHER_NAME}` | Publisher name (URL-encoded) |\n| `{PUBLISHER_COMPANY}` | Publisher company name (URL-encoded) |\n| `{DEVICE}` | Device type of the click (mobile \/ desktop) |\n| `{OS}` | Operating system of the click |\n| `{DEVICE_OS_VERSION}` | Operating system version of the click (URL-encoded) |\n| `{DEVICE_MODEL}` | Device model of the click, e.g. `iPhone` (URL-encoded). Desktop user agents carry no model, so these resolve to a label matching the reporting UI: `Macintosh`, `Windows PC`, `Generic Android` \u2026 |\n| `{DEVICE_BROWSER}` | Browser name of the click (URL-encoded) |\n| `{BROWSER_VERSION}` | Browser version of the click (URL-encoded) |\n| `{USER_IP}` | IP address the click came from |\n| `{RISK}` | Proxy-risk tier of the click IP: `CLEAN`, `STANDARD`, `MONITOR` or `ELEVATED` |\n| `{s1}` \u2026 `{s7}` | Sub IDs passed on the tracking link (aliases: `{subid_1}`\u2026`{subid_7}`, `{SUBID_1}`\u2026`{SUBID_7}`) |\n| `{ANDROID_ID}`, `{ANDROID_ID_MD5}`, `{ANDROID_ID_SHA1}` | Android device identifiers |\n| `{IDFA}`, `{IDFA_MD5}`, `{IDFA_SHA1}` | iOS advertising identifiers |\n| `{GOOGLE_AID}` | Google advertising ID |\n| `{FBCLID}`, `{GCLID}` | Facebook \/ Google click IDs |\n\nToken names are matched case-insensitively, so `{user_ip}` and `{USER_IP}`\nare the same token. Tokens without a value for a given click resolve to an\nempty string.\n\n**Pre-pop parameters** \u2014 any other `{name}` placeholder is filled from the\nquery parameter of the same name on the publisher's tracking link, letting you\npre-populate fields on your landing page. A `destination_url` of\n`https:\/\/example.com\/form?first_name={firstname}` clicked through\n`https:\/\/track.example.com\/c\/AbC123?firstname=Rod` sends\n`https:\/\/example.com\/form?first_name=Rod`.\n\nPre-pop names are matched case-insensitively like the tokens above, so `{FirstName}`\nis filled by `?firstname=`. They cannot be any of the tokens above \u2014 those always\nresolve to their own value, so a publisher cannot forge them. Values are\nURL-encoded, and a parameter the link omits resolves to an empty string.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":7,"campaign_id":12,"name":"Spring Banner 728x90","destination_url":"https:\/\/...","type":"text","is_active":true,"creative_redirect_id":null,"redirect_to_invalid":false,"is_private":false,"publisher_ids":[],"details":null,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":7},"campaign_id":{"type":"integer","example":12},"name":{"type":"string","example":"Spring Banner 728x90"},"destination_url":{"type":"string","example":"https:\/\/..."},"type":{"type":"string","example":"text"},"is_active":{"type":"boolean","example":true},"creative_redirect_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":false},"is_private":{"type":"boolean","example":false},"publisher_ids":{"type":"array","example":[]},"details":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"campaign_id":["The selected campaign id is invalid."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"campaign_id":{"type":"array","example":["The selected campaign id is invalid."],"items":{"type":"string"}}}}}}}}}},"tags":["Creatives"],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"Public campaign ID (tenant-local) this creative belongs to.","example":12},"name":{"type":"string","description":"Internal name of the creative. Must not be greater than 255 characters.","example":"Spring Banner 728x90"},"destination_url":{"type":"string","description":"Final landing URL the creative will direct traffic to. Supports `{TOKEN}` placeholders (e.g. `{CLICK_ID}`, `{s1}`) that are resolved at click time \u2014 see the endpoint description for the full token list. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/landing?click={CLICK_ID}&sub1={s1}"},"type":{"type":"string","description":"Creative type: `text`, `display` (banner; returned as `dply`, which is also accepted) or `email`. File, HTML and archive creatives are uploaded with `POST \/admin\/creatives\/files`. Send `multipart\/form-data` to upload `image` or `feature_image`.","example":"text","enum":["text","display","dply","email"]},"image":{"type":"string","format":"binary","description":"Display only. Banner image to upload (JPEG, PNG, GIF or WebP, up to 5 MB). Send this or `image_url`. This field is required when <code>image_url<\/code> is not present. Must be a file. Must be an image. Must not be greater than 5120 kilobytes."},"image_url":{"type":"string","description":"Display only. URL of a hosted banner image. Send this or `image`. This field is required when <code>image<\/code> is not present. Must not be greater than 500 characters.","example":null},"image_width":{"type":"integer","description":"Display only. Banner width in pixels. Must be at least 1.","example":null},"image_height":{"type":"integer","description":"Display only. Banner height in pixels. Must be at least 1.","example":null},"format":{"type":"string","description":"Email only. `html` (default) or `text`.","example":null,"enum":["text","html"]},"content":{"type":"string","description":"Email only. The email body. The campaign needs email settings first.","example":null},"feature_image":{"type":"string","format":"binary","description":"Email only. Feature image to upload, up to 5 MB. Must be a file. Must be an image. Must not be greater than 5120 kilobytes.","nullable":true},"feature_image_url":{"type":"string","description":"Email only. URL of a hosted feature image. Must not be greater than 500 characters.","example":null,"nullable":true},"is_private":{"type":"boolean","description":"Only the publishers in `publisher_ids` may run the creative.","example":false},"publisher_ids":{"type":"array","description":"","example":[16],"items":{"type":"integer"}},"is_active":{"type":"boolean","description":"Whether the creative is enabled. Defaults to true.","example":true,"nullable":true},"creative_redirect_id":{"type":"integer","description":"Optional fallback creative ID (tenant-local).","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","description":"Dead-end traffic on this creative to the invalid page instead of redirecting to another creative. Mutually exclusive with `creative_redirect_id`.","example":false,"nullable":true}},"required":["campaign_id","name","destination_url","type","image_width","image_height","content"]}}}}}},"\/api\/v1\/admin\/creatives\/files":{"post":{"summary":"Upload File Creatives","operationId":"uploadFileCreatives","description":"Creates one Files creative per uploaded file, as the dashboard's Files upload does: images,\nvideos, text files, HTML (single file or zip) and archives. Send `multipart\/form-data`.\nThe batch is all or nothing: if one file is refused, none is created, and the error names\nthe file.\n\nLimited to 30 uploads a minute per user, like the dashboard.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":31,"campaign_id":12,"name":"Spring banner","destination_url":null,"type":"files","is_active":true,"creative_redirect_id":null,"redirect_to_invalid":false,"is_private":false,"publisher_ids":[],"details":{"file_type":"image","file_name":"Spring banner","mime_type":"image\/png","file_size":48213},"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":31,"campaign_id":12,"name":"Spring banner","destination_url":null,"type":"files","is_active":true,"creative_redirect_id":null,"redirect_to_invalid":false,"is_private":false,"publisher_ids":[],"details":{"file_type":"image","file_name":"Spring banner","mime_type":"image\/png","file_size":48213},"created_at":"2026-10-19T12:00:00+00:00","updated_at":"2026-10-19T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":31},"campaign_id":{"type":"integer","example":12},"name":{"type":"string","example":"Spring banner"},"destination_url":{"type":"string","example":null,"nullable":true},"type":{"type":"string","example":"files"},"is_active":{"type":"boolean","example":true},"creative_redirect_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":false},"is_private":{"type":"boolean","example":false},"publisher_ids":{"type":"array","example":[]},"details":{"type":"object","properties":{"file_type":{"type":"string","example":"image"},"file_name":{"type":"string","example":"Spring banner"},"mime_type":{"type":"string","example":"image\/png"},"file_size":{"type":"integer","example":48213}}},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"},"updated_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"files.0":["banner.exe: File type not allowed."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"files.0":{"type":"array","example":["banner.exe: File type not allowed."],"items":{"type":"string"}}}}}}}}}},"tags":["Creatives"],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"Campaign the creatives belong to.","example":12},"file_type":{"type":"string","description":"What the files are: `archive`, `html`, `image`, `text`, `video`. `html` takes an `.html` file or a `.zip` with its assets, whose images are rehosted.","example":"image","enum":["archive","html","image","text","video"]},"files":{"type":"array","description":"Must be a file. Must not be greater than 20480 kilobytes.","items":{"type":"string","format":"binary"}},"names":{"type":"array","description":"Must not be greater than 255 characters.","example":["b"],"items":{"type":"string","nullable":true}},"is_private":{"type":"boolean","description":"Make every creative in the batch private to `publisher_ids`.","example":false},"publisher_ids":{"type":"array","description":"","example":[16],"items":{"type":"integer"}}},"required":["campaign_id","file_type","files"]}}}}}},"\/api\/v1\/admin\/creatives\/{id}":{"get":{"summary":"Get Creative","operationId":"getCreative","description":"Returns a single creative by its ID.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":7,"campaign_id":12,"name":"Spring Banner 728x90","destination_url":"https:\/\/...","type":"text","is_active":true,"creative_redirect_id":null,"redirect_to_invalid":false,"is_private":false,"publisher_ids":[],"details":null,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":7},"campaign_id":{"type":"integer","example":12},"name":{"type":"string","example":"Spring Banner 728x90"},"destination_url":{"type":"string","example":"https:\/\/..."},"type":{"type":"string","example":"text"},"is_active":{"type":"boolean","example":true},"creative_redirect_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":false},"is_private":{"type":"boolean","example":false},"publisher_ids":{"type":"array","example":[]},"details":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Creative not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Creative not found."}}}}}}},"tags":["Creatives"]},"put":{"summary":"Update Creative","operationId":"updateCreative","description":"Partially updates a creative by its ID. The\nparent `campaign_id` cannot be changed via this endpoint.\n`PATCH` and `PUT` are both accepted and behave identically.\n\n`destination_url` supports the same `{TOKEN}` placeholders accepted by\nthe Create Creative endpoint (e.g. `{CLICK_ID}`, `{PUBLISHER_ID}`,\n`{s1}`\u2026`{s7}`) \u2014 see Create Creative for the full token list.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":7,"campaign_id":12,"name":"Spring Banner v2","destination_url":"https:\/\/...","type":"text","is_active":true,"creative_redirect_id":null,"redirect_to_invalid":false,"is_private":false,"publisher_ids":[],"details":null,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T13:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":7},"campaign_id":{"type":"integer","example":12},"name":{"type":"string","example":"Spring Banner v2"},"destination_url":{"type":"string","example":"https:\/\/..."},"type":{"type":"string","example":"text"},"is_active":{"type":"boolean","example":true},"creative_redirect_id":{"type":"string","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","example":false},"is_private":{"type":"boolean","example":false},"publisher_ids":{"type":"array","example":[]},"details":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-30T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-30T13:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Creative not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Creative not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"destination_url":["The destination url must be a valid URL."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"destination_url":{"type":"array","example":["The destination url must be a valid URL."],"items":{"type":"string"}}}}}}}}}},"tags":["Creatives"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Internal name of the creative. Must not be greater than 255 characters.","example":"Spring Banner v2"},"destination_url":{"type":"string","description":"Final landing URL. Supports `{TOKEN}` placeholders (e.g. `{CLICK_ID}`, `{s1}`) that are resolved at click time \u2014 see the Create Creative endpoint description for the full token list. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/spring-v2?click={CLICK_ID}&sub1={s1}"},"is_active":{"type":"boolean","description":"Whether the creative is enabled.","example":true},"creative_redirect_id":{"type":"integer","description":"Optional fallback creative ID (tenant-local).","example":null,"nullable":true},"redirect_to_invalid":{"type":"boolean","description":"Dead-end traffic on this creative to the invalid page instead of redirecting to another creative. Mutually exclusive with `creative_redirect_id`.","example":false},"is_private":{"type":"boolean","description":"Only the publishers in `publisher_ids` may run the creative.","example":false},"publisher_ids":{"type":"array","description":"","example":[16],"items":{"type":"integer"}}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the creative.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/managers":{"get":{"summary":"List Managers","operationId":"listManagers","description":"Returns a list of users who can be assigned as managers to publishers\nand\/or advertisers. Use the returned `id` when setting `manager_id` on\na publisher or advertiser.","parameters":[{"in":"query","name":"type","description":"Filter by manager type. Allowed: `publisher`, `advertiser`, `both`.","example":"publisher","required":false,"schema":{"type":"string","description":"Filter by manager type. Allowed: `publisher`, `advertiser`, `both`.","example":"publisher"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `first_name`, `last_name`, `email`, `created_at`.","example":"first_name","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `first_name`, `last_name`, `email`, `created_at`.","example":"first_name"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 100. Max 100.","example":100,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 100. Max 100.","example":100}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":3,"first_name":"Alice","last_name":"Smith","email":"alice@example.com","type":"publisher"},{"id":4,"first_name":"Bob","last_name":"Jones","email":"bob@example.com","type":"both"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":100,"to":2,"total":2}},"properties":{"data":{"type":"array","example":[{"id":3,"first_name":"Alice","last_name":"Smith","email":"alice@example.com","type":"publisher"},{"id":4,"first_name":"Bob","last_name":"Jones","email":"bob@example.com","type":"both"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":3},"first_name":{"type":"string","example":"Alice"},"last_name":{"type":"string","example":"Smith"},"email":{"type":"string","example":"alice@example.com"},"type":{"type":"string","example":"publisher"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":100},"to":{"type":"integer","example":2},"total":{"type":"integer","example":2}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Managers"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"","example":"advertiser","enum":["publisher","advertiser","both"],"nullable":true},"sort":{"type":"string","description":"","example":"first_name","enum":["id","-id","first_name","-first_name","last_name","-last_name","email","-email","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":1,"nullable":true}}}}}}}},"\/api\/v1\/admin\/managers\/{id}":{"get":{"summary":"Get Manager","operationId":"getManager","description":"Returns a single manager by its ID \u2014 the same shape as an entry from\n`GET \/admin\/managers`. Use it to resolve a `manager_id` returned on a\npublisher or advertiser into a name, email and manager type.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"first_name":"Alice","last_name":"Smith","email":"alice@example.com","type":"publisher"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"first_name":{"type":"string","example":"Alice"},"last_name":{"type":"string","example":"Smith"},"email":{"type":"string","example":"alice@example.com"},"type":{"type":"string","example":"publisher"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Manager not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Manager not found."}}}}}}},"tags":["Managers"]},"parameters":[{"in":"path","name":"id","description":"The ID of the manager.","example":3,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/admin\/tracking-links":{"get":{"summary":"List Tracking Links","operationId":"listTrackingLinks","description":"Returns tracking links for a publisher's eligible creatives. Each record\nincludes a ready-to-use `tracking_url` (alias `click_url`) plus the\nnegotiated rates for the campaign\/publisher pair:\n\n- `cpa` \/ `revshare` \u2014 what you pay the publisher. Custom per-publisher\n  rates (payout changes, then margin tiers) take precedence over the campaign base rate;\n  `has_custom_rate` tells you when a payout change applies.\n- `sale_share`: on a campaign that takes its revenue from each sale, the percentage of each\n  sale the publisher's margin tier pays them; `cpa` is then null.\n- `advertiser_payout` \u2014 what the advertiser pays you for a conversion.\n- `is_rev_share` \/ `is_cpc` \u2014 the campaign's pricing model.\n- `advanced_custom_rates` \u2014 the publisher's conditioned rates (by country, subid,\n  or both) on the main conversion, exactly as the publisher sees them.\n\nUse `tracking_domain_id` (see `GET \/admin\/tracking-domains`) to override\nthe default tracking domain in the generated URL. Use `link_type` to\nchoose which URLs are emitted.","parameters":[{"in":"query","name":"publisher_id","description":"ID of the publisher whose eligible creatives to list. Required.","example":15,"required":true,"schema":{"type":"integer","description":"ID of the publisher whose eligible creatives to list. Required.","example":15}},{"in":"query","name":"campaign_id","description":"Restrict results to a single campaign ID.","example":42,"required":false,"schema":{"type":"integer","description":"Restrict results to a single campaign ID.","example":42,"nullable":true}},{"in":"query","name":"creative_id","description":"Restrict results to a single creative ID.","example":7,"required":false,"schema":{"type":"integer","description":"Restrict results to a single creative ID.","example":7,"nullable":true}},{"in":"query","name":"creative_name","description":"Partial, case-insensitive match on the creative name. Must not be greater than 255 characters.","example":"Banner 300x250","required":false,"schema":{"type":"string","description":"Partial, case-insensitive match on the creative name. Must not be greater than 255 characters.","example":"Banner 300x250","nullable":true}},{"in":"query","name":"category_id","description":"Filter creatives whose campaign belongs to this category ID.","example":3,"required":false,"schema":{"type":"integer","description":"Filter creatives whose campaign belongs to this category ID.","example":3,"nullable":true}},{"in":"query","name":"country","description":"Comma-separated ISO 3166-1 alpha-2 country codes; matches creatives whose campaign targets at least one of the listed countries.","example":"US,CA","required":false,"schema":{"type":"string","description":"Comma-separated ISO 3166-1 alpha-2 country codes; matches creatives whose campaign targets at least one of the listed countries.","example":"US,CA","nullable":true}},{"in":"query","name":"tracking_domain_id","description":"Override the default tracking domain in the generated `tracking_url`. Use the IDs returned by `GET \/admin\/tracking-domains`.","example":2,"required":false,"schema":{"type":"integer","description":"Override the default tracking domain in the generated `tracking_url`. Use the IDs returned by `GET \/admin\/tracking-domains`.","example":2,"nullable":true}},{"in":"query","name":"link_type","description":"Which URL fields to populate. `tracking` (default) returns `tracking_url`\/`click_url`; `preview` returns only `preview_url`; `all` returns both.","example":"tracking","required":false,"schema":{"type":"string","description":"Which URL fields to populate. `tracking` (default) returns `tracking_url`\/`click_url`; `preview` returns only `preview_url`; `all` returns both.","example":"tracking","enum":["tracking","preview","all"],"nullable":true}},{"in":"query","name":"with_assets","description":"Fill `assets` with the banner or the email body. Off by default, since an email body can be hundreds of KB per row.","example":"false","required":false,"schema":{"type":"string","description":"Fill `assets` with the banner or the email body. Off by default, since an email body can be hundreds of KB per row.","example":"false","enum":["0","1","true","false"],"nullable":true}},{"in":"query","name":"type","description":"Filter by creative type. Allowed: `DPLY`, `EMAIL`, `TEXT`.","example":"TEXT","required":false,"schema":{"type":"string","description":"Filter by creative type. Allowed: `DPLY`, `EMAIL`, `TEXT`.","example":"TEXT","enum":["DPLY","EMAIL","TEXT"],"nullable":true}},{"in":"query","name":"per_page","description":"Items per page (1\u2013100). Must be at least 1. Must not be greater than 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page (1\u2013100). Must be at least 1. Must not be greater than 100.","example":25,"nullable":true}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":7,"type":"TEXT","creative_name":"Banner 300x250","creative_category":"Finance","creative_countries":["US","CA"],"campaign_id":42,"publisher_id":15,"is_rev_share":false,"is_cpc":false,"cpa":12.5,"revshare":null,"sale_share":null,"has_custom_rate":true,"advanced_custom_rates":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}],"advertiser_payout":18,"tracking_url":"https:\/\/track.example.com\/c\/abc123","click_url":"https:\/\/track.example.com\/c\/abc123","redirectless_url":null,"preview_url":null,"assets":null,"download_url":null}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":7,"type":"TEXT","creative_name":"Banner 300x250","creative_category":"Finance","creative_countries":["US","CA"],"campaign_id":42,"publisher_id":15,"is_rev_share":false,"is_cpc":false,"cpa":12.5,"revshare":null,"sale_share":null,"has_custom_rate":true,"advanced_custom_rates":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}],"advertiser_payout":18,"tracking_url":"https:\/\/track.example.com\/c\/abc123","click_url":"https:\/\/track.example.com\/c\/abc123","redirectless_url":null,"preview_url":null,"assets":null,"download_url":null}],"items":{"type":"object","properties":{"id":{"type":"integer","example":7},"type":{"type":"string","example":"TEXT"},"creative_name":{"type":"string","example":"Banner 300x250"},"creative_category":{"type":"string","example":"Finance"},"creative_countries":{"type":"array","example":["US","CA"],"items":{"type":"string"}},"campaign_id":{"type":"integer","example":42},"publisher_id":{"type":"integer","example":15},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"cpa":{"type":"number","example":12.5},"revshare":{"type":"string","example":null,"nullable":true},"sale_share":{"type":"string","example":null,"nullable":true},"has_custom_rate":{"type":"boolean","example":true},"advanced_custom_rates":{"type":"array","example":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}],"items":{"type":"object","properties":{"event_name":{"type":"string","example":null,"nullable":true},"rate_type":{"type":"string","example":"cpa"},"rate":{"type":"number","example":15},"base_rate":{"type":"number","example":12.5},"condition_mode":{"type":"string","example":null,"nullable":true},"filters":{"type":"array","example":[]},"country_mode":{"type":"string","example":"include"},"countries":{"type":"array","example":[{"code":"GB","name":"United Kingdom"}],"items":{"type":"object","properties":{"code":{"type":"string","example":"GB"},"name":{"type":"string","example":"United Kingdom"}}}}}}},"advertiser_payout":{"type":"number","example":18},"tracking_url":{"type":"string","example":"https:\/\/track.example.com\/c\/abc123"},"click_url":{"type":"string","example":"https:\/\/track.example.com\/c\/abc123"},"redirectless_url":{"type":"string","example":null,"nullable":true},"preview_url":{"type":"string","example":null,"nullable":true},"assets":{"type":"string","example":null,"nullable":true},"download_url":{"type":"string","example":null,"nullable":true}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Publisher not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Publisher not found."}}}}}}},"tags":["Tracking Links"]}},"\/api\/v1\/admin\/tracking-domains":{"get":{"summary":"List Tracking Domains","operationId":"listTrackingDomains","description":"Returns the tracking domains configured for your tenant. Use the\nreturned `id` value with the `tracking_domain_id` query parameter on\nthe tracking-links endpoint to override the default domain in the\ngenerated click URLs. The domain marked `is_default: true` is the one\nused when no override is provided.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":1,"hostname":"track.example.com","is_default":true},{"id":2,"hostname":"go.example.com","is_default":false}]},"properties":{"data":{"type":"array","example":[{"id":1,"hostname":"track.example.com","is_default":true},{"id":2,"hostname":"go.example.com","is_default":false}],"items":{"type":"object","properties":{"id":{"type":"integer","example":1},"hostname":{"type":"string","example":"track.example.com"},"is_default":{"type":"boolean","example":true}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Tracking Domains"]}},"\/api\/v1\/admin\/countries":{"get":{"summary":"List Countries","operationId":"listCountries","description":"Returns the list of countries supported by the platform. Use the\nreturned ISO `code` values when assigning countries to a campaign.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"code":"US","name":"United States"},{"code":"CA","name":"Canada"},{"code":"BR","name":"Brazil"}]},"properties":{"data":{"type":"array","example":[{"code":"US","name":"United States"},{"code":"CA","name":"Canada"},{"code":"BR","name":"Brazil"}],"items":{"type":"object","properties":{"code":{"type":"string","example":"US"},"name":{"type":"string","example":"United States"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reference Data"]}},"\/api\/v1\/admin\/categories":{"get":{"summary":"List Categories","operationId":"listCategories","description":"Every campaign category in your network, by name. Use the `id` as a campaign's `category_id`.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":3,"name":"Finance","description":"Loans, cards and insurance.","campaigns_count":12,"created_at":"2026-04-01T12:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":3,"name":"Finance","description":"Loans, cards and insurance.","campaigns_count":12,"created_at":"2026-04-01T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":3},"name":{"type":"string","example":"Finance"},"description":{"type":"string","example":"Loans, cards and insurance."},"campaigns_count":{"type":"integer","example":12},"created_at":{"type":"string","example":"2026-04-01T12:00:00+00:00"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reference Data"]},"post":{"summary":"Create Category","operationId":"createCategory","description":"","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"name":"Finance","description":"Loans, cards and insurance.","campaigns_count":0,"created_at":"2026-04-01T12:00:00+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"name":{"type":"string","example":"Finance"},"description":{"type":"string","example":"Loans, cards and insurance."},"campaigns_count":{"type":"integer","example":0},"created_at":{"type":"string","example":"2026-04-01T12:00:00+00:00"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"name":["A category with this name already exists."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"name":{"type":"array","example":["A category with this name already exists."],"items":{"type":"string"}}}}}}}}}},"tags":["Reference Data"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Category name, unique in your network. Must not be greater than 255 characters.","example":"Finance"},"description":{"type":"string","description":"Optional description, up to 1000 characters. Must not be greater than 1000 characters.","example":"Loans, cards and insurance.","nullable":true}},"required":["name"]}}}}}},"\/api\/v1\/admin\/converts-on":{"get":{"summary":"List Conversion Points","operationId":"listConversionPoints","description":"The values a campaign's `converts_on` accepts, with the label the dashboard shows. `other`\ntakes a free-text `converts_on_other`; `unique_click` is the conversion point of CPC campaigns.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"code":"valid_cc_submit","label":"Valid CC Submit"},{"code":"valid_lead_submit","label":"Valid Lead Submit"},{"code":"valid_trial_entry","label":"Valid Trial Entry"},{"code":"install","label":"Install"},{"code":"1st_page_submit","label":"1st Page Submit"},{"code":"2nd_page_submit","label":"2nd Page Submit"},{"code":"unique_click","label":"Unique Click (CPC)"},{"code":"other","label":"Other"}]},"properties":{"data":{"type":"array","example":[{"code":"valid_cc_submit","label":"Valid CC Submit"},{"code":"valid_lead_submit","label":"Valid Lead Submit"},{"code":"valid_trial_entry","label":"Valid Trial Entry"},{"code":"install","label":"Install"},{"code":"1st_page_submit","label":"1st Page Submit"},{"code":"2nd_page_submit","label":"2nd Page Submit"},{"code":"unique_click","label":"Unique Click (CPC)"},{"code":"other","label":"Other"}],"items":{"type":"object","properties":{"code":{"type":"string","example":"valid_cc_submit"},"label":{"type":"string","example":"Valid CC Submit"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reference Data"]}},"\/api\/v1\/admin\/urls\/validate":{"post":{"summary":"Validate URL","operationId":"validateURL","description":"Checks a destination URL with the same rule campaign `url`, creative `destination_url` and\nemail `unsubscribe_link` are saved with, without saving anything. `tokens` lists the\n`{TOKEN}` and `{{TAG}}` placeholders found, in order.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"valid":true,"errors":[],"tokens":["{UID}","{PUBLISHER_ID}"]},"properties":{"valid":{"type":"boolean","example":true},"errors":{"type":"array","example":[]},"tokens":{"type":"array","example":["{UID}","{PUBLISHER_ID}"],"items":{"type":"string"}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reference Data"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"","example":null}}}}}}}},"\/api\/v1\/admin\/counts":{"get":{"summary":"Get Counts","operationId":"getCounts","description":"How many of each object your network holds, to reconcile an import without paging through\nevery list. Creatives are also broken down by `type`, as the creative endpoints report it.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"advertisers":134,"publishers":2210,"campaigns":1875,"campaign_events":412,"categories":18,"creatives":5320,"creatives_by_type":{"text":1200,"dply":3000,"email":900,"files":220},"email_meta":640}},"properties":{"data":{"type":"object","properties":{"advertisers":{"type":"integer","example":134},"publishers":{"type":"integer","example":2210},"campaigns":{"type":"integer","example":1875},"campaign_events":{"type":"integer","example":412},"categories":{"type":"integer","example":18},"creatives":{"type":"integer","example":5320},"creatives_by_type":{"type":"object","properties":{"text":{"type":"integer","example":1200},"dply":{"type":"integer","example":3000},"email":{"type":"integer","example":900},"files":{"type":"integer","example":220}}},"email_meta":{"type":"integer","example":640}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reference Data"]}},"\/api\/v1\/admin\/tracking-requests\/trigger-postbacks":{"post":{"summary":"Re-trigger Outgoing Postbacks","operationId":"reTriggerOutgoingPostbacks","description":"Re-fires the outgoing publisher postbacks for a set of leads \u2014 the API\nequivalent of the \"Trigger Postbacks\" batch action on the leads screen.\nUse it when a publisher's endpoint was down and their postbacks need to be\nreplayed.\n\nOnly leads that are actually payable are re-fired: revoked leads are\nskipped, and a lead must have been credited or already paid. The response\nreports how many were eligible, which can be fewer than the IDs you sent.\nLeads outside your manager scope are never re-fired.\n\nPostbacks are queued rather than sent inline, so the call returns\nimmediately even for a large batch. The batch is capped at 2000 leads.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"triggered_count":2,"requested_count":3},"properties":{"triggered_count":{"type":"integer","example":2},"requested_count":{"type":"integer","example":3}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"lead_ids":["The lead ids field is required."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"lead_ids":{"type":"array","example":["The lead ids field is required."],"items":{"type":"string"}}}}}}}}}},"tags":["Leads"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"lead_ids":{"type":"array","description":"Must be a valid UUID.","example":["6ff8f7f6-1eb3-3525-be4a-3932c805afed"],"items":{"type":"string"}}},"required":["lead_ids"]}}}}}},"\/api\/v1\/admin\/leads":{"post":{"summary":"Credit Leads Manually","operationId":"creditLeadsManually","description":"Creates credited leads with no click behind them \u2014 the API equivalent of\n\"Manual Credit\" on the leads screen. Each lead is payable immediately and its\npublisher postbacks are queued, as for a tracked conversion.\n\nPass `event_id` to credit one of the campaign's events instead of the base\nconversion. The response lists the new lead IDs, which can be passed to the revoke\nand bulk update endpoints.\n\nSend an `Idempotency-Key` header so a retried request cannot credit twice.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"created_count":1,"lead_ids":["9b2f6c1e-3d4a-4f7e-8a51-0c2d9e7f1a3b"]},"properties":{"created_count":{"type":"integer","example":1},"lead_ids":{"type":"array","example":["9b2f6c1e-3d4a-4f7e-8a51-0c2d9e7f1a3b"],"items":{"type":"string"}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"event_id":["The selected event does not belong to the selected campaign."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"event_id":{"type":"array","example":["The selected event does not belong to the selected campaign."],"items":{"type":"string"}}}}}}}}}},"tags":["Leads"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"publisher_id":{"type":"integer","description":"The ID of the publisher to credit.","example":15},"campaign_id":{"type":"integer","description":"The ID of the campaign the leads are credited on.","example":42},"event_id":{"type":"integer","description":"The ID of one of the campaign's events, to credit event conversions instead of base conversions. Must be at least 1.","example":null,"nullable":true},"cpa":{"type":"number","description":"Amount paid to the publisher per lead. Must be at least 0.","example":9},"payout":{"type":"number","description":"Amount the advertiser pays per lead (revenue). Must be at least 0.","example":12.5},"date_credited":{"type":"string","description":"ISO 8601 credit time. Also used as the lead's creation time, since there is no click behind it. Must be a valid date.","example":"2026-10-20T14:00:00Z"},"quantity":{"type":"integer","description":"How many identical leads to create. Defaults to 1. Max 100. Must be at least 1. Must not be greater than 100.","example":1},"subid_1":{"type":"string","description":"Sub ID 1 recorded on each lead. Must not be greater than 255 characters.","example":"src-fb","nullable":true},"subid_2":{"type":"string","description":"Sub ID 2 recorded on each lead. Must not be greater than 255 characters.","example":null,"nullable":true},"subid_3":{"type":"string","description":"Sub ID 3 recorded on each lead. Must not be greater than 255 characters.","example":null,"nullable":true},"subid_4":{"type":"string","description":"Sub ID 4 recorded on each lead. Must not be greater than 255 characters.","example":null,"nullable":true},"subid_5":{"type":"string","description":"Sub ID 5 recorded on each lead. Must not be greater than 255 characters.","example":null,"nullable":true},"subid_6":{"type":"string","description":"Sub ID 6 recorded on each lead. Must not be greater than 255 characters.","example":null,"nullable":true},"subid_7":{"type":"string","description":"Sub ID 7 recorded on each lead. Must not be greater than 255 characters.","example":null,"nullable":true}},"required":["publisher_id","campaign_id","cpa","payout","date_credited"]}}}}}},"\/api\/v1\/admin\/leads\/bulk-update":{"post":{"summary":"Bulk Update Leads","operationId":"bulkUpdateLeads","description":"Updates a list of leads at once \u2014 the API equivalent of the \"Update Leads\" batch\naction on the leads screen. Send any combination of `cpa`, `payout` and\n`date_credited`; omitted fields keep each lead's current value.\n\n`date_credited` credits pending leads (they become payable) and queues their\npublisher postbacks. Up to 500 leads per call.\n\nPaid, revoked, blocked and non-payable leads are never changed. They are listed\nin `skipped` with the reason, along with `unchanged` (the values already matched),\n`credited_before_click` (`date_credited` is earlier than the click) and\n`not_found` (unknown or outside your manager scope).","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"updated_count":1,"requested_count":2,"skipped":[{"id":"5d7c1a2b-8e9f-4a3b-9c1d-2e3f4a5b6c7d","reason":"paid"}]},"properties":{"updated_count":{"type":"integer","example":1},"requested_count":{"type":"integer","example":2},"skipped":{"type":"array","example":[{"id":"5d7c1a2b-8e9f-4a3b-9c1d-2e3f4a5b6c7d","reason":"paid"}],"items":{"type":"object","properties":{"id":{"type":"string","example":"5d7c1a2b-8e9f-4a3b-9c1d-2e3f4a5b6c7d"},"reason":{"type":"string","example":"paid"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"cpa":["Send at least one of cpa, payout or date_credited."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"cpa":{"type":"array","example":["Send at least one of cpa, payout or date_credited."],"items":{"type":"string"}}}}}}}}}},"tags":["Leads"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"lead_ids":{"type":"array","description":"Must be a valid UUID.","example":["6ff8f7f6-1eb3-3525-be4a-3932c805afed"],"items":{"type":"string"}},"cpa":{"type":"number","description":"New amount paid to the publisher per lead. Omit to keep each lead's current value. Must be at least 0.","example":9.5,"nullable":true},"payout":{"type":"number","description":"New amount the advertiser pays per lead (revenue). Omit to keep each lead's current value. Must be at least 0.","example":14,"nullable":true},"date_credited":{"type":"string","description":"ISO 8601 credit time. Credits pending leads, which fires their publisher postbacks; on already-credited leads it moves the credit date. Must not be earlier than the click. Must be a valid date.","example":"2026-10-20T14:00:00Z","nullable":true}},"required":["lead_ids"]}}}}}},"\/api\/v1\/admin\/leads\/revoke":{"post":{"summary":"Revoke Leads","operationId":"revokeLeads","description":"Revokes (voids) credited conversions by lead ID \u2014 the API equivalent of the\n\"Revoke Credits\" batch action on the leads screen. A revoked lead no longer counts\nas payable revenue or payout, and no postback is fired for it.\n\nOnly payable leads are revoked. Every other ID is listed in `skipped` with the\nreason: `paid` (already on a payment), `revoked`, `blocked`, `pending` (not credited),\n`not_payable` or `not_found` (unknown or outside your manager scope).\n\nA conversion and each of its events are separate leads: revoking a conversion does\nnot revoke its events. Send the event conversions' IDs too to void them.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"revoked_count":1,"requested_count":2,"skipped":[{"id":"5d7c1a2b-8e9f-4a3b-9c1d-2e3f4a5b6c7d","reason":"paid"}]},"properties":{"revoked_count":{"type":"integer","example":1},"requested_count":{"type":"integer","example":2},"skipped":{"type":"array","example":[{"id":"5d7c1a2b-8e9f-4a3b-9c1d-2e3f4a5b6c7d","reason":"paid"}],"items":{"type":"object","properties":{"id":{"type":"string","example":"5d7c1a2b-8e9f-4a3b-9c1d-2e3f4a5b6c7d"},"reason":{"type":"string","example":"paid"}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"lead_ids.0":["The lead_ids.0 field must be a valid UUID."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"lead_ids.0":{"type":"array","example":["The lead_ids.0 field must be a valid UUID."],"items":{"type":"string"}}}}}}}}}},"tags":["Leads"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"lead_ids":{"type":"array","description":"Must be a valid UUID.","example":["6ff8f7f6-1eb3-3525-be4a-3932c805afed"],"items":{"type":"string"}},"reason":{"type":"string","description":"Why the leads are revoked. Stored on each revoked lead. Must not be greater than 255 characters.","example":"Advertiser chargeback","nullable":true}},"required":["lead_ids"]}}}}}},"\/api\/v1\/admin\/tracking-requests":{"get":{"summary":"List Tracking Requests","operationId":"listTrackingRequests","description":"Returns the postback and pixel logs \u2014 both the conversions advertisers\nreport to you (`incoming`) and the notifications you send to publishers\n(`outgoing`). This is the API equivalent of the four log screens in the\ndashboard, unified behind filters:\n\n- `direction=incoming|outgoing`\n- `kind=postback|pixel|sdk` (pixel also covers container requests; sdk is JavaScript SDK conversions)\n- `type=` for an exact log type, e.g. `INCOMING_CLICKLESS_POSTBACK`\n- `accepted=false` to list only failures\n\nEach entry reports `accepted` (no errors logged), the `errors` array when\nit failed, and `can_reprocess` \u2014 whether the failure can be recovered with\nthe dashboard's reprocess action. `order_total` and `payout` are as the\nadvertiser sent them, in `reported_currency` (`null` when it named none, so\nin the campaign's `currency`).","parameters":[{"in":"query","name":"direction","description":"Filter by direction: `incoming` (conversions reported to you) or `outgoing` (notifications sent to publishers).","example":"incoming","required":false,"schema":{"type":"string","description":"Filter by direction: `incoming` (conversions reported to you) or `outgoing` (notifications sent to publishers).","example":"incoming","enum":["incoming","outgoing"]}},{"in":"query","name":"kind","description":"Filter by transport: `postback`, `pixel` (pixels include container requests) or `sdk` (JavaScript SDK conversions).","example":"postback","required":false,"schema":{"type":"string","description":"Filter by transport: `postback`, `pixel` (pixels include container requests) or `sdk` (JavaScript SDK conversions).","example":"postback","enum":["postback","pixel","sdk"]}},{"in":"query","name":"type","description":"Filter by the exact log type, e.g. `INCOMING_POSTBACK`, `OUTGOING_GLOBAL_POSTBACK`. Must not be greater than 64 characters.","example":"INCOMING_POSTBACK","required":false,"schema":{"type":"string","description":"Filter by the exact log type, e.g. `INCOMING_POSTBACK`, `OUTGOING_GLOBAL_POSTBACK`. Must not be greater than 64 characters.","example":"INCOMING_POSTBACK"}},{"in":"query","name":"lead_id","description":"Filter by the lead \/ click ID the request carried. Must not be greater than 64 characters.","example":"01HV8XKP...","required":false,"schema":{"type":"string","description":"Filter by the lead \/ click ID the request carried. Must not be greater than 64 characters.","example":"01HV8XKP..."}},{"in":"query","name":"campaign_id","description":"Filter by campaign ID (tenant-local).","example":42,"required":false,"schema":{"type":"integer","description":"Filter by campaign ID (tenant-local).","example":42}},{"in":"query","name":"publisher_id","description":"Filter by publisher ID (tenant-local).","example":55,"required":false,"schema":{"type":"integer","description":"Filter by publisher ID (tenant-local).","example":55}},{"in":"query","name":"accepted","description":"True returns only requests that logged no errors; false returns only failures.","example":false,"required":false,"schema":{"type":"boolean","description":"True returns only requests that logged no errors; false returns only failures.","example":false}},{"in":"query","name":"from","description":"Only requests logged on or after this date\/time. Must be a valid date.","example":"2026-08-01","required":false,"schema":{"type":"string","description":"Only requests logged on or after this date\/time. Must be a valid date.","example":"2026-08-01"}},{"in":"query","name":"to","description":"Only requests logged on or before this date\/time. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-08-31","required":false,"schema":{"type":"string","description":"Only requests logged on or before this date\/time. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-08-31"}},{"in":"query","name":"sort","description":"Sort by `created_at`. Prefix with `-` for descending.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by `created_at`. Prefix with `-` for descending.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page (max 100). Defaults to 25. Must be at least 1. Must not be greater than 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page (max 100). Defaults to 25. Must be at least 1. Must not be greater than 100.","example":25}},{"in":"query","name":"page","description":"Must be at least 1.","example":16,"required":false,"schema":{"type":"integer","description":"Must be at least 1.","example":16}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":9001,"type":"INCOMING_POSTBACK","direction":"incoming","lead_id":"01HV8XKP...","campaign_id":42,"campaign_name":"Spring Promo","publisher_id":55,"advertiser_id":7,"event_id":null,"url":"https:\/\/track.example.com\/postback\/abc?uid=01HV8XKP","ip":"203.0.113.4","ip_whitelisted":true,"order_id":"ORD-1001","order_total":"49.99","payout":null,"currency":"USD","reported_currency":null,"subid_1":"src-fb","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"device":"mobile","os":"ios","accepted":true,"errors":[],"is_retry":false,"can_reprocess":false,"created_at":"2026-08-20T10:18:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":9001,"type":"INCOMING_POSTBACK","direction":"incoming","lead_id":"01HV8XKP...","campaign_id":42,"campaign_name":"Spring Promo","publisher_id":55,"advertiser_id":7,"event_id":null,"url":"https:\/\/track.example.com\/postback\/abc?uid=01HV8XKP","ip":"203.0.113.4","ip_whitelisted":true,"order_id":"ORD-1001","order_total":"49.99","payout":null,"currency":"USD","reported_currency":null,"subid_1":"src-fb","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"device":"mobile","os":"ios","accepted":true,"errors":[],"is_retry":false,"can_reprocess":false,"created_at":"2026-08-20T10:18:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9001},"type":{"type":"string","example":"INCOMING_POSTBACK"},"direction":{"type":"string","example":"incoming"},"lead_id":{"type":"string","example":"01HV8XKP..."},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"publisher_id":{"type":"integer","example":55},"advertiser_id":{"type":"integer","example":7},"event_id":{"type":"string","example":null,"nullable":true},"url":{"type":"string","example":"https:\/\/track.example.com\/postback\/abc?uid=01HV8XKP"},"ip":{"type":"string","example":"203.0.113.4"},"ip_whitelisted":{"type":"boolean","example":true},"order_id":{"type":"string","example":"ORD-1001"},"order_total":{"type":"string","example":"49.99"},"payout":{"type":"string","example":null,"nullable":true},"currency":{"type":"string","example":"USD"},"reported_currency":{"type":"string","example":null,"nullable":true},"subid_1":{"type":"string","example":"src-fb"},"subid_2":{"type":"string","example":null,"nullable":true},"subid_3":{"type":"string","example":null,"nullable":true},"subid_4":{"type":"string","example":null,"nullable":true},"subid_5":{"type":"string","example":null,"nullable":true},"subid_6":{"type":"string","example":null,"nullable":true},"subid_7":{"type":"string","example":null,"nullable":true},"device":{"type":"string","example":"mobile"},"os":{"type":"string","example":"ios"},"accepted":{"type":"boolean","example":true},"errors":{"type":"array","example":[]},"is_retry":{"type":"boolean","example":false},"can_reprocess":{"type":"boolean","example":false},"created_at":{"type":"string","example":"2026-08-20T10:18:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reporting"]}},"\/api\/v1\/admin\/reporting\/entity":{"get":{"summary":"Entity Report","operationId":"entityReport","description":"Returns aggregated performance metrics (clicks, conversions, revenue, CPA,\nprofit) grouped by `publisher`, `advertiser` or `campaign` for the given\ndate window. The response is paginated and ordered by total revenue\n(descending). Every amount is in `meta.currency`: the `currency` asked for, else your network\ncurrency. Each campaign's amounts convert at the latest completed UTC day's rate (`meta.rates_date`).\n\nPer-unit figures: `rpc` is revenue \u00f7 unique clicks, `effective_cpa` is CPA \u00f7\nconversions and `effective_revenue` is revenue \u00f7 conversions (conversions =\n`converted_leads`, events excluded). `earnings_per_click` is CPA \u00f7 unique\nclicks \u2014 what the publisher earns per click, as on the admin reports.\n\nClick quality and orders: `dup_clicks` (non-blocked clicks beyond the unique\nones), `proxy_blocked_clicks`, `order_total` (the order totals advertisers sent\nwith their conversions, events included), `avg_order_total` (order_total \u00f7 the\nsame conversions `effective_revenue` divides by \u2014 ones that sent no order total\ncount as zero) and `avg_click_to_conversion_seconds` (base conversions only,\n`null` when none was timed).\n\nPublisher and campaign rows also carry `raw_clicks` (every click that reached\nthe tracker: non-blocked, proxy-blocked and invalid), `invalid_clicks` and\n`shield_bots` (bot requests ClickShield discarded before they became clicks,\nso they are not part of `raw_clicks`; bots that never reached a campaign, such\nas Smarter Link probes, are not counted). Advertiser rows leave these three out.\nAn entity is listed when it had clicks or conversions in the window; one with\nonly invalid traffic is not.","parameters":[{"in":"query","name":"from","description":"Start of the reporting window in `YYYY-MM-DD` (interpreted in `timezone`). Defaults to today. Must be a valid date.","example":"2026-04-01","required":false,"schema":{"type":"string","description":"Start of the reporting window in `YYYY-MM-DD` (interpreted in `timezone`). Defaults to today. Must be a valid date.","example":"2026-04-01","nullable":true}},{"in":"query","name":"to","description":"End of the reporting window in `YYYY-MM-DD` (interpreted in `timezone`). Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","required":false,"schema":{"type":"string","description":"End of the reporting window in `YYYY-MM-DD` (interpreted in `timezone`). Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","nullable":true}},{"in":"query","name":"timezone","description":"IANA timezone identifier. Defaults to your network timezone. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","required":false,"schema":{"type":"string","description":"IANA timezone identifier. Defaults to your network timezone. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","nullable":true}},{"in":"query","name":"campaign_id","description":"Restrict the report to a single campaign ID.","example":42,"required":false,"schema":{"type":"integer","description":"Restrict the report to a single campaign ID.","example":42,"nullable":true}},{"in":"query","name":"publisher_id","description":"Restrict the report to a single publisher ID.","example":15,"required":false,"schema":{"type":"integer","description":"Restrict the report to a single publisher ID.","example":15,"nullable":true}},{"in":"query","name":"advertiser_id","description":"Restrict the report to a single advertiser ID.","example":7,"required":false,"schema":{"type":"integer","description":"Restrict the report to a single advertiser ID.","example":7,"nullable":true}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 25. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 25. Max 100.","example":25,"nullable":true}},{"in":"query","name":"currency","description":"ISO 4217 code to report every amount in (e.g. `EUR`). Each campaign's amounts convert at the latest completed UTC day's rate. Defaults to your network currency. The response's `meta.currency` names it.","example":"USD","required":false,"schema":{"type":"string","description":"ISO 4217 code to report every amount in (e.g. `EUR`). Each campaign's amounts convert at the latest completed UTC day's rate. Defaults to your network currency. The response's `meta.currency` names it.","example":"USD","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"],"nullable":true}},{"in":"query","name":"group_by","description":"Entity to aggregate by. One of: publisher, advertiser, campaign.","example":"publisher","required":true,"schema":{"type":"string","description":"Entity to aggregate by. One of: publisher, advertiser, campaign.","example":"publisher","enum":["publisher","advertiser","campaign"]}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":15,"name":"Acme Publisher","unique_clicks":5230,"converted_leads":312,"event_leads":18,"total_revenue_payout":12480.5,"total_cpa":9123,"total_profit":3357.5,"profit_margin":0.269,"conversion_rate":0.0596,"earnings_per_click":1.7444,"rpc":2.3863,"effective_cpa":29.2404,"effective_revenue":40.0016,"dup_clicks":214,"proxy_blocked_clicks":37,"order_total":18744,"avg_order_total":60.08,"avg_click_to_conversion_seconds":1340,"raw_clicks":5512,"invalid_clicks":31,"shield_bots":96}],"links":{"first":"https:\/\/example.test\/api\/v1\/admin\/reporting\/entity?page=1","last":"https:\/\/example.test\/api\/v1\/admin\/reporting\/entity?page=1","prev":null,"next":null},"meta":{"currency":"USD","rates_date":"2026-04-29","current_page":1,"from":1,"last_page":1,"path":"https:\/\/example.test\/api\/v1\/admin\/reporting\/entity","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":15,"name":"Acme Publisher","unique_clicks":5230,"converted_leads":312,"event_leads":18,"total_revenue_payout":12480.5,"total_cpa":9123,"total_profit":3357.5,"profit_margin":0.269,"conversion_rate":0.0596,"earnings_per_click":1.7444,"rpc":2.3863,"effective_cpa":29.2404,"effective_revenue":40.0016,"dup_clicks":214,"proxy_blocked_clicks":37,"order_total":18744,"avg_order_total":60.08,"avg_click_to_conversion_seconds":1340,"raw_clicks":5512,"invalid_clicks":31,"shield_bots":96}],"items":{"type":"object","properties":{"id":{"type":"integer","example":15},"name":{"type":"string","example":"Acme Publisher"},"unique_clicks":{"type":"integer","example":5230},"converted_leads":{"type":"integer","example":312},"event_leads":{"type":"integer","example":18},"total_revenue_payout":{"type":"number","example":12480.5},"total_cpa":{"type":"number","example":9123},"total_profit":{"type":"number","example":3357.5},"profit_margin":{"type":"number","example":0.269},"conversion_rate":{"type":"number","example":0.0596},"earnings_per_click":{"type":"number","example":1.7444},"rpc":{"type":"number","example":2.3863},"effective_cpa":{"type":"number","example":29.2404},"effective_revenue":{"type":"number","example":40.0016},"dup_clicks":{"type":"integer","example":214},"proxy_blocked_clicks":{"type":"integer","example":37},"order_total":{"type":"number","example":18744},"avg_order_total":{"type":"number","example":60.08},"avg_click_to_conversion_seconds":{"type":"integer","example":1340},"raw_clicks":{"type":"integer","example":5512},"invalid_clicks":{"type":"integer","example":31},"shield_bots":{"type":"integer","example":96}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"https:\/\/example.test\/api\/v1\/admin\/reporting\/entity?page=1"},"last":{"type":"string","example":"https:\/\/example.test\/api\/v1\/admin\/reporting\/entity?page=1"},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"currency":{"type":"string","example":"USD"},"rates_date":{"type":"string","example":"2026-04-29"},"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"https:\/\/example.test\/api\/v1\/admin\/reporting\/entity"},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"group_by":["The selected group_by is invalid."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"group_by":{"type":"array","example":["The selected group_by is invalid."],"items":{"type":"string"}}}}}}}}}},"tags":["Reporting"]}},"\/api\/v1\/admin\/reporting\/conversions":{"get":{"summary":"List Conversions","operationId":"listConversions","description":"Returns a paginated list of credited conversions (leads with a\n`date_credited` value) inside the given window. By default returns both\nevent and non-event conversions; use `event_only` to scope. Use `status`\nto filter by derived status (PAYABLE, PAID, PENDING, REVOKED, NOT_PAYABLE,\nBLOCKED). `event_id` is the event's ID as shown in the dashboard, and `null`\non base conversions. `payout` and `cpa` are in the campaign's `currency`.","parameters":[{"in":"query","name":"from","description":"Start of the conversion window. Defaults to today. Must be a valid date.","example":"2026-04-01","required":false,"schema":{"type":"string","description":"Start of the conversion window. Defaults to today. Must be a valid date.","example":"2026-04-01","nullable":true}},{"in":"query","name":"to","description":"End of the conversion window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","required":false,"schema":{"type":"string","description":"End of the conversion window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","nullable":true}},{"in":"query","name":"timezone","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","required":false,"schema":{"type":"string","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","nullable":true}},{"in":"query","name":"campaign_id","description":"Public campaign ID to filter by.","example":42,"required":false,"schema":{"type":"integer","description":"Public campaign ID to filter by.","example":42,"nullable":true}},{"in":"query","name":"publisher_id","description":"Public publisher ID to filter by.","example":15,"required":false,"schema":{"type":"integer","description":"Public publisher ID to filter by.","example":15,"nullable":true}},{"in":"query","name":"advertiser_id","description":"Public advertiser ID to filter by.","example":7,"required":false,"schema":{"type":"integer","description":"Public advertiser ID to filter by.","example":7,"nullable":true}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 25. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 25. Max 100.","example":25,"nullable":true}},{"in":"query","name":"status","description":"Filter by derived status. One of: PAYABLE, PAID, PENDING, REVOKED, NOT_PAYABLE, BLOCKED.","example":"PAYABLE","required":false,"schema":{"type":"string","description":"Filter by derived status. One of: PAYABLE, PAID, PENDING, REVOKED, NOT_PAYABLE, BLOCKED.","example":"PAYABLE","enum":["PAYABLE","PAID","PENDING","REVOKED","NOT_PAYABLE","BLOCKED"],"nullable":true}},{"in":"query","name":"event_only","description":"When true, only event conversions are returned. When false, only non-event conversions.","example":false,"required":false,"schema":{"type":"boolean","description":"When true, only event conversions are returned. When false, only non-event conversions.","example":false,"nullable":true}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":"01HV8XKP...","campaign_id":42,"publisher_id":15,"creative_id":7,"event_id":null,"is_event":false,"status":"PAYABLE","payout":12.5,"cpa":9,"currency":"USD","subid_1":"src-fb","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"ip_country_code":"US","ip_region_name":"California","created_at":"2026-04-20T10:15:00Z","date_credited":"2026-04-20T10:18:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":"01HV8XKP...","campaign_id":42,"publisher_id":15,"creative_id":7,"event_id":null,"is_event":false,"status":"PAYABLE","payout":12.5,"cpa":9,"currency":"USD","subid_1":"src-fb","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"ip_country_code":"US","ip_region_name":"California","created_at":"2026-04-20T10:15:00Z","date_credited":"2026-04-20T10:18:00Z"}],"items":{"type":"object","properties":{"id":{"type":"string","example":"01HV8XKP..."},"campaign_id":{"type":"integer","example":42},"publisher_id":{"type":"integer","example":15},"creative_id":{"type":"integer","example":7},"event_id":{"type":"string","example":null,"nullable":true},"is_event":{"type":"boolean","example":false},"status":{"type":"string","example":"PAYABLE"},"payout":{"type":"number","example":12.5},"cpa":{"type":"number","example":9},"currency":{"type":"string","example":"USD"},"subid_1":{"type":"string","example":"src-fb"},"subid_2":{"type":"string","example":null,"nullable":true},"subid_3":{"type":"string","example":null,"nullable":true},"subid_4":{"type":"string","example":null,"nullable":true},"subid_5":{"type":"string","example":null,"nullable":true},"subid_6":{"type":"string","example":null,"nullable":true},"subid_7":{"type":"string","example":null,"nullable":true},"ip_country_code":{"type":"string","example":"US"},"ip_region_name":{"type":"string","example":"California"},"created_at":{"type":"string","example":"2026-04-20T10:15:00Z"},"date_credited":{"type":"string","example":"2026-04-20T10:18:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reporting"]}},"\/api\/v1\/admin\/reporting\/clicks":{"get":{"summary":"List Clicks","operationId":"listClicks","description":"Returns a paginated list of click rows (non-event leads) created inside\nthe given window. Use this endpoint for traffic-quality analysis,\ngeo\/device breakdowns or fraud review. Blocked clicks are\nincluded so you can audit them.","parameters":[{"in":"query","name":"from","description":"Start of the click window. Defaults to today. Must be a valid date.","example":"2026-04-01","required":false,"schema":{"type":"string","description":"Start of the click window. Defaults to today. Must be a valid date.","example":"2026-04-01","nullable":true}},{"in":"query","name":"to","description":"End of the click window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","required":false,"schema":{"type":"string","description":"End of the click window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","nullable":true}},{"in":"query","name":"timezone","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","required":false,"schema":{"type":"string","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","nullable":true}},{"in":"query","name":"campaign_id","description":"Public campaign ID to filter by.","example":42,"required":false,"schema":{"type":"integer","description":"Public campaign ID to filter by.","example":42,"nullable":true}},{"in":"query","name":"publisher_id","description":"Public publisher ID to filter by.","example":15,"required":false,"schema":{"type":"integer","description":"Public publisher ID to filter by.","example":15,"nullable":true}},{"in":"query","name":"advertiser_id","description":"Public advertiser ID to filter by.","example":7,"required":false,"schema":{"type":"integer","description":"Public advertiser ID to filter by.","example":7,"nullable":true}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 25. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 25. Max 100.","example":25,"nullable":true}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":"01HV8XKP...","campaign_id":42,"publisher_id":15,"creative_id":7,"subid_1":"src-fb","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"ip_country_code":"US","ip_region_name":"California","device":"desktop","os":"mac","is_blocked":false,"is_thr":false,"created_at":"2026-04-20T10:15:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":"01HV8XKP...","campaign_id":42,"publisher_id":15,"creative_id":7,"subid_1":"src-fb","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"ip_country_code":"US","ip_region_name":"California","device":"desktop","os":"mac","is_blocked":false,"is_thr":false,"created_at":"2026-04-20T10:15:00Z"}],"items":{"type":"object","properties":{"id":{"type":"string","example":"01HV8XKP..."},"campaign_id":{"type":"integer","example":42},"publisher_id":{"type":"integer","example":15},"creative_id":{"type":"integer","example":7},"subid_1":{"type":"string","example":"src-fb"},"subid_2":{"type":"string","example":null,"nullable":true},"subid_3":{"type":"string","example":null,"nullable":true},"subid_4":{"type":"string","example":null,"nullable":true},"subid_5":{"type":"string","example":null,"nullable":true},"subid_6":{"type":"string","example":null,"nullable":true},"subid_7":{"type":"string","example":null,"nullable":true},"ip_country_code":{"type":"string","example":"US"},"ip_region_name":{"type":"string","example":"California"},"device":{"type":"string","example":"desktop"},"os":{"type":"string","example":"mac"},"is_blocked":{"type":"boolean","example":false},"is_thr":{"type":"boolean","example":false},"created_at":{"type":"string","example":"2026-04-20T10:15:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reporting"]}},"\/api\/v1\/admin\/reporting\/daily":{"get":{"summary":"Daily Time Series","operationId":"dailyTimeSeries","description":"Returns one row per day for the given window with aggregated metrics\n(unique clicks, converted leads, event leads, revenue, CPA, profit).\nDays are emitted in the requested timezone and labelled `YYYY-MM-DD`.\n\nClick quality and orders: `dup_clicks` (non-blocked clicks beyond the unique\nones), `proxy_blocked_clicks`, `order_total` (the order totals advertisers sent\nwith their conversions, events included), `avg_order_total` (order_total \u00f7 the\nsame conversions `effective_revenue` divides by \u2014 ones that sent no order total\ncount as zero) and `avg_click_to_conversion_seconds` (base conversions only,\n`null` when none was timed). Raw and invalid clicks are not available here.\n\nEvery amount is in `meta.currency`: the `currency` asked for, else your network currency,\nconverted at the latest completed UTC day's rate (`meta.rates_date`).","parameters":[{"in":"query","name":"from","description":"Start of the reporting window. Defaults to today. Must be a valid date.","example":"2026-04-01","required":false,"schema":{"type":"string","description":"Start of the reporting window. Defaults to today. Must be a valid date.","example":"2026-04-01","nullable":true}},{"in":"query","name":"to","description":"End of the reporting window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","required":false,"schema":{"type":"string","description":"End of the reporting window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","nullable":true}},{"in":"query","name":"timezone","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","required":false,"schema":{"type":"string","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","nullable":true}},{"in":"query","name":"campaign_id","description":"Public campaign ID to filter by.","example":42,"required":false,"schema":{"type":"integer","description":"Public campaign ID to filter by.","example":42,"nullable":true}},{"in":"query","name":"publisher_id","description":"Public publisher ID to filter by.","example":15,"required":false,"schema":{"type":"integer","description":"Public publisher ID to filter by.","example":15,"nullable":true}},{"in":"query","name":"advertiser_id","description":"Public advertiser ID to filter by.","example":7,"required":false,"schema":{"type":"integer","description":"Public advertiser ID to filter by.","example":7,"nullable":true}},{"in":"query","name":"per_page","description":"Must be at least 1. Must not be greater than 100.","example":1,"required":false,"schema":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":1,"nullable":true}},{"in":"query","name":"currency","description":"ISO 4217 code to report every amount in (e.g. `EUR`). Each campaign's amounts convert at the latest completed UTC day's rate. Defaults to your network currency. The response's `meta.currency` names it.","example":"USD","required":false,"schema":{"type":"string","description":"ISO 4217 code to report every amount in (e.g. `EUR`). Each campaign's amounts convert at the latest completed UTC day's rate. Defaults to your network currency. The response's `meta.currency` names it.","example":"USD","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"],"nullable":true}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"label":"2026-04-29","unique_clicks":1820,"converted_leads":94,"event_leads":6,"total_revenue_payout":3760.5,"total_cpa":2740,"total_profit":1020.5,"rpc":2.0662,"effective_cpa":29.1489,"effective_revenue":40.0053,"dup_clicks":71,"proxy_blocked_clicks":12,"order_total":5640,"avg_order_total":60,"avg_click_to_conversion_seconds":1285},{"label":"2026-04-30","unique_clicks":2103,"converted_leads":118,"event_leads":9,"total_revenue_payout":4724,"total_cpa":3415,"total_profit":1309,"rpc":2.2463,"effective_cpa":28.9407,"effective_revenue":40.0339,"dup_clicks":88,"proxy_blocked_clicks":9,"order_total":7080,"avg_order_total":60,"avg_click_to_conversion_seconds":1402}],"meta":{"currency":"USD","rates_date":"2026-04-29"}},"properties":{"data":{"type":"array","example":[{"label":"2026-04-29","unique_clicks":1820,"converted_leads":94,"event_leads":6,"total_revenue_payout":3760.5,"total_cpa":2740,"total_profit":1020.5,"rpc":2.0662,"effective_cpa":29.1489,"effective_revenue":40.0053,"dup_clicks":71,"proxy_blocked_clicks":12,"order_total":5640,"avg_order_total":60,"avg_click_to_conversion_seconds":1285},{"label":"2026-04-30","unique_clicks":2103,"converted_leads":118,"event_leads":9,"total_revenue_payout":4724,"total_cpa":3415,"total_profit":1309,"rpc":2.2463,"effective_cpa":28.9407,"effective_revenue":40.0339,"dup_clicks":88,"proxy_blocked_clicks":9,"order_total":7080,"avg_order_total":60,"avg_click_to_conversion_seconds":1402}],"items":{"type":"object","properties":{"label":{"type":"string","example":"2026-04-29"},"unique_clicks":{"type":"integer","example":1820},"converted_leads":{"type":"integer","example":94},"event_leads":{"type":"integer","example":6},"total_revenue_payout":{"type":"number","example":3760.5},"total_cpa":{"type":"number","example":2740},"total_profit":{"type":"number","example":1020.5},"rpc":{"type":"number","example":2.0662},"effective_cpa":{"type":"number","example":29.1489},"effective_revenue":{"type":"number","example":40.0053},"dup_clicks":{"type":"integer","example":71},"proxy_blocked_clicks":{"type":"integer","example":12},"order_total":{"type":"number","example":5640},"avg_order_total":{"type":"number","example":60},"avg_click_to_conversion_seconds":{"type":"integer","example":1285}}}},"meta":{"type":"object","properties":{"currency":{"type":"string","example":"USD"},"rates_date":{"type":"string","example":"2026-04-29"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reporting"]}},"\/api\/v1\/admin\/reporting\/hourly":{"get":{"summary":"Hourly Time Series","operationId":"hourlyTimeSeries","description":"Returns one row per hour for the given window with aggregated metrics\n(unique clicks, converted leads, event leads, revenue, CPA, profit).\nHours are emitted in the requested timezone and labelled\n`YYYY-MM-DDTHH:00:00\u00b1HH:MM`. Defaults to today (00:00 \u2192 23:00) so a\ncall without parameters returns 24 buckets.\n\nClick quality and orders: `dup_clicks` (non-blocked clicks beyond the unique\nones), `proxy_blocked_clicks`, `order_total` (the order totals advertisers sent\nwith their conversions, events included), `avg_order_total` (order_total \u00f7 the\nsame conversions `effective_revenue` divides by \u2014 ones that sent no order total\ncount as zero) and `avg_click_to_conversion_seconds` (base conversions only,\n`null` when none was timed). Raw and invalid clicks are not available here.\n\nEvery amount is in `meta.currency`: the `currency` asked for, else your network currency,\nconverted at the latest completed UTC day's rate (`meta.rates_date`).","parameters":[{"in":"query","name":"from","description":"Start of the reporting window. Defaults to today. Must be a valid date.","example":"2026-04-01","required":false,"schema":{"type":"string","description":"Start of the reporting window. Defaults to today. Must be a valid date.","example":"2026-04-01","nullable":true}},{"in":"query","name":"to","description":"End of the reporting window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","required":false,"schema":{"type":"string","description":"End of the reporting window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","nullable":true}},{"in":"query","name":"timezone","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","required":false,"schema":{"type":"string","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","nullable":true}},{"in":"query","name":"campaign_id","description":"Public campaign ID to filter by.","example":42,"required":false,"schema":{"type":"integer","description":"Public campaign ID to filter by.","example":42,"nullable":true}},{"in":"query","name":"publisher_id","description":"Public publisher ID to filter by.","example":15,"required":false,"schema":{"type":"integer","description":"Public publisher ID to filter by.","example":15,"nullable":true}},{"in":"query","name":"advertiser_id","description":"Public advertiser ID to filter by.","example":7,"required":false,"schema":{"type":"integer","description":"Public advertiser ID to filter by.","example":7,"nullable":true}},{"in":"query","name":"per_page","description":"Must be at least 1. Must not be greater than 100.","example":1,"required":false,"schema":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":1,"nullable":true}},{"in":"query","name":"currency","description":"ISO 4217 code to report every amount in (e.g. `EUR`). Each campaign's amounts convert at the latest completed UTC day's rate. Defaults to your network currency. The response's `meta.currency` names it.","example":"USD","required":false,"schema":{"type":"string","description":"ISO 4217 code to report every amount in (e.g. `EUR`). Each campaign's amounts convert at the latest completed UTC day's rate. Defaults to your network currency. The response's `meta.currency` names it.","example":"USD","enum":["USD","EUR","GBP","CAD","AUD","NZD","JPY","CHF","SEK","NOK","DKK","PLN","CZK","HUF","RON","BGN","TRY","ILS","AED","SAR","ZAR","NGN","EGP","KES","INR","PKR","IDR","MYR","SGD","HKD","CNY","KRW","THB","PHP","VND","MXN","BRL","ARS","CLP","COP","PEN","XCD"],"nullable":true}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"label":"2026-04-30T00:00:00-04:00","unique_clicks":42,"converted_leads":3,"event_leads":0,"total_revenue_payout":120,"total_cpa":87,"total_profit":33,"rpc":2.8571,"effective_cpa":29,"effective_revenue":40,"dup_clicks":2,"proxy_blocked_clicks":0,"order_total":180,"avg_order_total":60,"avg_click_to_conversion_seconds":960}],"meta":{"currency":"USD","rates_date":"2026-04-29"}},"properties":{"data":{"type":"array","example":[{"label":"2026-04-30T00:00:00-04:00","unique_clicks":42,"converted_leads":3,"event_leads":0,"total_revenue_payout":120,"total_cpa":87,"total_profit":33,"rpc":2.8571,"effective_cpa":29,"effective_revenue":40,"dup_clicks":2,"proxy_blocked_clicks":0,"order_total":180,"avg_order_total":60,"avg_click_to_conversion_seconds":960}],"items":{"type":"object","properties":{"label":{"type":"string","example":"2026-04-30T00:00:00-04:00"},"unique_clicks":{"type":"integer","example":42},"converted_leads":{"type":"integer","example":3},"event_leads":{"type":"integer","example":0},"total_revenue_payout":{"type":"number","example":120},"total_cpa":{"type":"number","example":87},"total_profit":{"type":"number","example":33},"rpc":{"type":"number","example":2.8571},"effective_cpa":{"type":"number","example":29},"effective_revenue":{"type":"number","example":40},"dup_clicks":{"type":"integer","example":2},"proxy_blocked_clicks":{"type":"integer","example":0},"order_total":{"type":"number","example":180},"avg_order_total":{"type":"number","example":60},"avg_click_to_conversion_seconds":{"type":"integer","example":960}}}},"meta":{"type":"object","properties":{"currency":{"type":"string","example":"USD"},"rates_date":{"type":"string","example":"2026-04-29"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reporting"]}},"\/api\/v1\/admin\/reporting\/leads":{"get":{"summary":"List Lead Snapshots","operationId":"listLeadSnapshots","description":"Returns a paginated list of full lead snapshots inside the given click\nwindow. Each item contains five nested blocks: `lead` (core attributes,\nIDs, financials, URLs), `conversion` (postback params captured at\nconversion time \u2014 order_id, order_total, postback subids \u2014 plus device \/\nadvertising identifiers such as gclid\/idfa), `user_details` (device,\nbrowser, language), `ip_intelligence` (residential\/proxy\/VPN signals,\nISP, geo) and `lifecycle` (the tracking timeline, described below).\nFinancial fields (`cpa`, `revenue`, `profit`) are in the campaign's `currency`\nand zeroed for non-payable statuses. `conversion.order_total` is as the\nadvertiser sent it, in `conversion.reported_currency` (`null` when it named\nnone, so in the campaign's). Conversion fields are null when the conversion\ndid not carry that value.\n\n**The `lifecycle` block**\n\nThe same postback\/pixel history the dashboard's lead snapshot shows:\n\n- `clicked_at` \u2014 when the click happened (ISO 8601, UTC).\n- `converted_at` \u2014 when the lead was credited (ISO 8601, UTC).\n- `click_to_conversion_seconds` \u2014 integer seconds between the two, or\n  `null` when either timestamp is missing. Never negative.\n- `requests[]` \u2014 every incoming conversion request and every outgoing\n  publisher notification, oldest first, each with `id`, `type`,\n  `direction` (`incoming`\/`outgoing`), `url`, `accepted`, `errors[]`,\n  `is_retry` and `created_at`.\n\n**Which click anchors the timer** \u2014 an event lead is a replica of its base\nlead and carries its own click row, but the meaningful elapsed time runs\nfrom the click the end user actually made, i.e. the *base* lead's click.\nSo for an event lead both `clicked_at` and `click_to_conversion_seconds`\nare anchored to `original_lead_id`'s click, matching the dashboard.\n\n**Traversing event leads** \u2014 `lead.original_lead_id` is the base lead an\nevent lead was replicated from (`null` on base leads). `lead.event_id` is the\nevent's ID as shown in the dashboard. Filter by\n`original_lead_id` to list every event lead of a given base lead, or by\n`lead_id` to fetch one lead directly. Both identity filters ignore the\ndate window: a lead ID is already unique, so requiring the caller to also\nguess which day it landed on would defeat the point.\n\n**Lead Status Guide**\n\n- `PAYABLE` \u2014 lead is approved and pending payment.\n- `PAID` \u2014 lead has been paid out.\n- `PENDING` \u2014 lead is awaiting advertiser approval (window not yet expired).\n- `REVOKED` \u2014 advertiser revoked the lead after initial approval.\n- `NOT_PAYABLE` \u2014 lead was not approved.\n- `BLOCKED` \u2014 lead was blocked at click time (e.g. fraud or compliance).","parameters":[{"in":"query","name":"from","description":"date Start of the click window. Defaults to today.","example":"2026-04-01","required":false,"schema":{"type":"string","description":"date Start of the click window. Defaults to today.","example":"2026-04-01","nullable":true}},{"in":"query","name":"to","description":"date End of the click window. Defaults to today.","example":"2026-04-30","required":false,"schema":{"type":"string","description":"date End of the click window. Defaults to today.","example":"2026-04-30","nullable":true}},{"in":"query","name":"timezone","description":"IANA timezone identifier.","example":"America\/New_York","required":false,"schema":{"type":"string","description":"IANA timezone identifier.","example":"America\/New_York","nullable":true}},{"in":"query","name":"campaign_id","description":"Public campaign ID.","example":42,"required":false,"schema":{"type":"integer","description":"Public campaign ID.","example":42,"nullable":true}},{"in":"query","name":"publisher_id","description":"Public publisher ID.","example":15,"required":false,"schema":{"type":"integer","description":"Public publisher ID.","example":15,"nullable":true}},{"in":"query","name":"advertiser_id","description":"Public advertiser ID.","example":7,"required":false,"schema":{"type":"integer","description":"Public advertiser ID.","example":7,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page (1\u2013100). Defaults to 25.","example":25,"required":false,"schema":{"type":"integer","description":"Rows per page (1\u2013100). Defaults to 25.","example":25,"nullable":true}},{"in":"query","name":"lead_id","description":"Return a single lead by its ID. Overrides the date window.","example":"01a04386-2d30-721c-87fc-a61672f60b17","required":false,"schema":{"type":"string","description":"Return a single lead by its ID. Overrides the date window.","example":"01a04386-2d30-721c-87fc-a61672f60b17","nullable":true}},{"in":"query","name":"original_lead_id","description":"Return the event leads produced by this base lead. Overrides the date window.","example":"01a04385-1fa8-7000-8000-000000000000","required":false,"schema":{"type":"string","description":"Return the event leads produced by this base lead. Overrides the date window.","example":"01a04385-1fa8-7000-8000-000000000000","nullable":true}},{"in":"query","name":"status","description":"Filter by derived status. One of: PAYABLE, PAID, PENDING, REVOKED, NOT_PAYABLE, BLOCKED.","example":"PAYABLE","required":false,"schema":{"type":"string","description":"Filter by derived status. One of: PAYABLE, PAID, PENDING, REVOKED, NOT_PAYABLE, BLOCKED.","example":"PAYABLE","nullable":true}},{"in":"query","name":"event_only","description":"When true, only event leads.","example":false,"required":false,"schema":{"type":"boolean","description":"When true, only event leads.","example":false,"nullable":true}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"lead":{"id":"01HV8XKP...","original_lead_id":null,"campaign_id":42,"campaign_name":"Demo","advertiser_id":7,"advertiser_name":"Acme","publisher_id":15,"publisher_name":"Pub Co","creative_id":3,"event_id":null,"event_name":null,"category_name":"Finance","click_time":"2026-04-20T10:15:00Z","date_credited":"2026-04-20T10:18:00Z","ip_address":"203.0.113.4","subid_1":"src-fb","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"status":"PAYABLE","trigger":"postback","original_url":"https:\/\/...","original_url_creative":"https:\/\/...","final_url":"https:\/\/...","final_url_creative":"https:\/\/...","cpa":9,"revenue":12.5,"profit":3.5,"currency":"USD"},"conversion":{"order_id":"ORD-1001","order_total":"49.99","reported_currency":null,"postback_subid_1":"pb-src","postback_subid_2":null,"postback_subid_3":null,"postback_subid_4":null,"postback_subid_5":null,"postback_subid_6":null,"postback_subid_7":null,"android_id":null,"android_id_md5":null,"android_id_sha1":null,"google_aid":null,"idfa":null,"idfa_md5":null,"idfa_sha1":null,"fbclid":null,"gclid":"Cj0KCQ...","fbp":null,"fbc":null},"user_details":{"device":"Mobile","brand":"Apple iPhone","os":"iOS","browser_name":"Safari","browser_version":"17.4","referrer":"https:\/\/...","language":"English","user_agent":"Mozilla\/5.0..."},"ip_intelligence":{"ip_status":false,"is_residential":true,"is_mobile":true,"is_corporate":false,"is_edu":false,"is_public":false,"is_vpn":false,"is_proxy":false,"is_hosting":false,"is_hosting_cloud":false,"is_hosting_cloud_security":false,"is_hosting_web_browser":false,"is_darknet":false,"is_consumer_privacy":false,"ip_owner":"Verizon","conn_type":"Mobile","conn_speed":"high","city":"New York","region_name":"New York","country_name":"United States","latitude":40.7128,"longitude":-74.006,"time_zone":"America\/New_York","zip_code":"10001"},"lifecycle":{"clicked_at":"2026-04-20T10:15:00Z","converted_at":"2026-04-20T10:18:00Z","click_to_conversion_seconds":180,"requests":[{"id":9001,"type":"postback","direction":"incoming","url":"https:\/\/track.example.com\/postback\/abc123?uid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:00Z"},{"id":9002,"type":"publisher_postback","direction":"outgoing","url":"https:\/\/publisher.example.com\/cb?cid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:01Z"}]}}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"lead":{"id":"01HV8XKP...","original_lead_id":null,"campaign_id":42,"campaign_name":"Demo","advertiser_id":7,"advertiser_name":"Acme","publisher_id":15,"publisher_name":"Pub Co","creative_id":3,"event_id":null,"event_name":null,"category_name":"Finance","click_time":"2026-04-20T10:15:00Z","date_credited":"2026-04-20T10:18:00Z","ip_address":"203.0.113.4","subid_1":"src-fb","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"status":"PAYABLE","trigger":"postback","original_url":"https:\/\/...","original_url_creative":"https:\/\/...","final_url":"https:\/\/...","final_url_creative":"https:\/\/...","cpa":9,"revenue":12.5,"profit":3.5,"currency":"USD"},"conversion":{"order_id":"ORD-1001","order_total":"49.99","reported_currency":null,"postback_subid_1":"pb-src","postback_subid_2":null,"postback_subid_3":null,"postback_subid_4":null,"postback_subid_5":null,"postback_subid_6":null,"postback_subid_7":null,"android_id":null,"android_id_md5":null,"android_id_sha1":null,"google_aid":null,"idfa":null,"idfa_md5":null,"idfa_sha1":null,"fbclid":null,"gclid":"Cj0KCQ...","fbp":null,"fbc":null},"user_details":{"device":"Mobile","brand":"Apple iPhone","os":"iOS","browser_name":"Safari","browser_version":"17.4","referrer":"https:\/\/...","language":"English","user_agent":"Mozilla\/5.0..."},"ip_intelligence":{"ip_status":false,"is_residential":true,"is_mobile":true,"is_corporate":false,"is_edu":false,"is_public":false,"is_vpn":false,"is_proxy":false,"is_hosting":false,"is_hosting_cloud":false,"is_hosting_cloud_security":false,"is_hosting_web_browser":false,"is_darknet":false,"is_consumer_privacy":false,"ip_owner":"Verizon","conn_type":"Mobile","conn_speed":"high","city":"New York","region_name":"New York","country_name":"United States","latitude":40.7128,"longitude":-74.006,"time_zone":"America\/New_York","zip_code":"10001"},"lifecycle":{"clicked_at":"2026-04-20T10:15:00Z","converted_at":"2026-04-20T10:18:00Z","click_to_conversion_seconds":180,"requests":[{"id":9001,"type":"postback","direction":"incoming","url":"https:\/\/track.example.com\/postback\/abc123?uid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:00Z"},{"id":9002,"type":"publisher_postback","direction":"outgoing","url":"https:\/\/publisher.example.com\/cb?cid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:01Z"}]}}],"items":{"type":"object","properties":{"lead":{"type":"object","properties":{"id":{"type":"string","example":"01HV8XKP..."},"original_lead_id":{"type":"string","example":null,"nullable":true},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Demo"},"advertiser_id":{"type":"integer","example":7},"advertiser_name":{"type":"string","example":"Acme"},"publisher_id":{"type":"integer","example":15},"publisher_name":{"type":"string","example":"Pub Co"},"creative_id":{"type":"integer","example":3},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"category_name":{"type":"string","example":"Finance"},"click_time":{"type":"string","example":"2026-04-20T10:15:00Z"},"date_credited":{"type":"string","example":"2026-04-20T10:18:00Z"},"ip_address":{"type":"string","example":"203.0.113.4"},"subid_1":{"type":"string","example":"src-fb"},"subid_2":{"type":"string","example":null,"nullable":true},"subid_3":{"type":"string","example":null,"nullable":true},"subid_4":{"type":"string","example":null,"nullable":true},"subid_5":{"type":"string","example":null,"nullable":true},"subid_6":{"type":"string","example":null,"nullable":true},"subid_7":{"type":"string","example":null,"nullable":true},"status":{"type":"string","example":"PAYABLE"},"trigger":{"type":"string","example":"postback"},"original_url":{"type":"string","example":"https:\/\/..."},"original_url_creative":{"type":"string","example":"https:\/\/..."},"final_url":{"type":"string","example":"https:\/\/..."},"final_url_creative":{"type":"string","example":"https:\/\/..."},"cpa":{"type":"number","example":9},"revenue":{"type":"number","example":12.5},"profit":{"type":"number","example":3.5},"currency":{"type":"string","example":"USD"}}},"conversion":{"type":"object","properties":{"order_id":{"type":"string","example":"ORD-1001"},"order_total":{"type":"string","example":"49.99"},"reported_currency":{"type":"string","example":null,"nullable":true},"postback_subid_1":{"type":"string","example":"pb-src"},"postback_subid_2":{"type":"string","example":null,"nullable":true},"postback_subid_3":{"type":"string","example":null,"nullable":true},"postback_subid_4":{"type":"string","example":null,"nullable":true},"postback_subid_5":{"type":"string","example":null,"nullable":true},"postback_subid_6":{"type":"string","example":null,"nullable":true},"postback_subid_7":{"type":"string","example":null,"nullable":true},"android_id":{"type":"string","example":null,"nullable":true},"android_id_md5":{"type":"string","example":null,"nullable":true},"android_id_sha1":{"type":"string","example":null,"nullable":true},"google_aid":{"type":"string","example":null,"nullable":true},"idfa":{"type":"string","example":null,"nullable":true},"idfa_md5":{"type":"string","example":null,"nullable":true},"idfa_sha1":{"type":"string","example":null,"nullable":true},"fbclid":{"type":"string","example":null,"nullable":true},"gclid":{"type":"string","example":"Cj0KCQ..."},"fbp":{"type":"string","example":null,"nullable":true},"fbc":{"type":"string","example":null,"nullable":true}}},"user_details":{"type":"object","properties":{"device":{"type":"string","example":"Mobile"},"brand":{"type":"string","example":"Apple iPhone"},"os":{"type":"string","example":"iOS"},"browser_name":{"type":"string","example":"Safari"},"browser_version":{"type":"string","example":"17.4"},"referrer":{"type":"string","example":"https:\/\/..."},"language":{"type":"string","example":"English"},"user_agent":{"type":"string","example":"Mozilla\/5.0..."}}},"ip_intelligence":{"type":"object","properties":{"ip_status":{"type":"boolean","example":false},"is_residential":{"type":"boolean","example":true},"is_mobile":{"type":"boolean","example":true},"is_corporate":{"type":"boolean","example":false},"is_edu":{"type":"boolean","example":false},"is_public":{"type":"boolean","example":false},"is_vpn":{"type":"boolean","example":false},"is_proxy":{"type":"boolean","example":false},"is_hosting":{"type":"boolean","example":false},"is_hosting_cloud":{"type":"boolean","example":false},"is_hosting_cloud_security":{"type":"boolean","example":false},"is_hosting_web_browser":{"type":"boolean","example":false},"is_darknet":{"type":"boolean","example":false},"is_consumer_privacy":{"type":"boolean","example":false},"ip_owner":{"type":"string","example":"Verizon"},"conn_type":{"type":"string","example":"Mobile"},"conn_speed":{"type":"string","example":"high"},"city":{"type":"string","example":"New York"},"region_name":{"type":"string","example":"New York"},"country_name":{"type":"string","example":"United States"},"latitude":{"type":"number","example":40.7128},"longitude":{"type":"number","example":-74.006},"time_zone":{"type":"string","example":"America\/New_York"},"zip_code":{"type":"string","example":"10001"}}},"lifecycle":{"type":"object","properties":{"clicked_at":{"type":"string","example":"2026-04-20T10:15:00Z"},"converted_at":{"type":"string","example":"2026-04-20T10:18:00Z"},"click_to_conversion_seconds":{"type":"integer","example":180},"requests":{"type":"array","example":[{"id":9001,"type":"postback","direction":"incoming","url":"https:\/\/track.example.com\/postback\/abc123?uid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:00Z"},{"id":9002,"type":"publisher_postback","direction":"outgoing","url":"https:\/\/publisher.example.com\/cb?cid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:01Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9001},"type":{"type":"string","example":"postback"},"direction":{"type":"string","example":"incoming"},"url":{"type":"string","example":"https:\/\/track.example.com\/postback\/abc123?uid=01HV8XKP"},"accepted":{"type":"boolean","example":true},"errors":{"type":"array","example":[]},"is_retry":{"type":"boolean","example":false},"created_at":{"type":"string","example":"2026-04-20T10:18:00Z"}}}}}}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Reporting"]}},"\/api\/v1\/publisher\/campaigns":{"get":{"summary":"Publisher Campaigns","operationId":"publisherCampaigns","description":"Returns a paginated list of offers available to the authenticated publisher,\nhonouring publisher restrictions and private offer access. Filters are flat\nquery parameters.\n\nEach campaign includes your payable rate: `cpa` (amount you earn per\nconversion) or `revshare` (your percentage on revenue-share campaigns).\nCustom rates negotiated for you take precedence over the campaign base\nrate \u2014 `has_custom_rate` tells you when that applies.\n\nOn a campaign that takes its revenue from each sale, a margin tier pays `sale_share`: the\npercentage of each sale you earn. `cpa` is then null.\n\n`advanced_custom_rates` lists rates that apply only to some of your traffic \u2014 by\ncountry, by subid, or both \u2014 for the campaign's main conversion. A country rate\nlists each country under the rate that actually pays there; `country_mode`\n`exclude` means every accepted country except those listed. `base_rate` is what\ntraffic matching no condition earns, a margin tier included; it is null when that traffic\nearns `sale_share` of each sale instead.","parameters":[{"in":"query","name":"name","description":"Partial match on campaign name (case-insensitive).","example":"spring","required":false,"schema":{"type":"string","description":"Partial match on campaign name (case-insensitive).","example":"spring"}},{"in":"query","name":"offer_type","description":"Comma-separated list of offer types. Allowed: `public`, `private`, `approval`.","example":"public","required":false,"schema":{"type":"string","description":"Comma-separated list of offer types. Allowed: `public`, `private`, `approval`.","example":"public"}},{"in":"query","name":"created_after","description":"Return only campaigns created on or after this ISO date.","example":"2026-01-01","required":false,"schema":{"type":"string","description":"Return only campaigns created on or after this ISO date.","example":"2026-01-01"}},{"in":"query","name":"created_before","description":"Return only campaigns created on or before this ISO date.","example":"2026-12-31","required":false,"schema":{"type":"string","description":"Return only campaigns created on or before this ISO date.","example":"2026-12-31"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":44,"name":"Publisher Accessible Campaign","category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","transaction_type":"cpa","is_rev_share":false,"is_cpc":false,"currency":"USD","expiration_date":null,"created_at":"2026-04-20T12:00:00Z","updated_at":"2026-04-20T12:00:00Z","cpa":12.5,"revshare":null,"sale_share":null,"dynamic_payout":false,"has_custom_rate":false,"advanced_custom_rates":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}]}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":44,"name":"Publisher Accessible Campaign","category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","transaction_type":"cpa","is_rev_share":false,"is_cpc":false,"currency":"USD","expiration_date":null,"created_at":"2026-04-20T12:00:00Z","updated_at":"2026-04-20T12:00:00Z","cpa":12.5,"revshare":null,"sale_share":null,"dynamic_payout":false,"has_custom_rate":false,"advanced_custom_rates":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}]}],"items":{"type":"object","properties":{"id":{"type":"integer","example":44},"name":{"type":"string","example":"Publisher Accessible Campaign"},"category_id":{"type":"integer","example":3},"category_name":{"type":"string","example":"Finance"},"offer_type":{"type":"string","example":"public"},"status":{"type":"string","example":"ACTIVE"},"transaction_type":{"type":"string","example":"cpa"},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"currency":{"type":"string","example":"USD"},"expiration_date":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-20T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-20T12:00:00Z"},"cpa":{"type":"number","example":12.5},"revshare":{"type":"string","example":null,"nullable":true},"sale_share":{"type":"string","example":null,"nullable":true},"dynamic_payout":{"type":"boolean","example":false},"has_custom_rate":{"type":"boolean","example":false},"advanced_custom_rates":{"type":"array","example":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}],"items":{"type":"object","properties":{"event_name":{"type":"string","example":null,"nullable":true},"rate_type":{"type":"string","example":"cpa"},"rate":{"type":"number","example":15},"base_rate":{"type":"number","example":12.5},"condition_mode":{"type":"string","example":null,"nullable":true},"filters":{"type":"array","example":[]},"country_mode":{"type":"string","example":"include"},"countries":{"type":"array","example":[{"code":"GB","name":"United Kingdom"}],"items":{"type":"object","properties":{"code":{"type":"string","example":"GB"},"name":{"type":"string","example":"United Kingdom"}}}}}}}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publisher Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"offer_type":{"type":"string","description":"Must not be greater than 20 characters.","example":"ngzmiyvdljnikhwa","nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-11-02T03:04:27","nullable":true},"created_before":{"type":"string","description":"Must be a valid date. Must be a date after or equal to <code>created_after<\/code>.","example":"2052-11-25","nullable":true},"sort":{"type":"string","description":"","example":"-created_at","enum":["id","-id","name","-name","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true}}}}}}}},"\/api\/v1\/publisher\/campaigns\/{id}\/events":{"get":{"summary":"List My Campaign Events","operationId":"listMyCampaignEvents","description":"Returns the active events on a campaign you have access to, with the rate\n**you** earn for each one.\n\n- `cpa` \u2014 amount you earn per event conversion. A custom rate negotiated\n  for you takes precedence over the event's base rate; `has_custom_rate`\n  tells you when that applies. `null` on rev-share events.\n- `revshare_percentage` \u2014 your share on rev-share events.\n- `reporting_param` \/ `reporting_id` \u2014 how this event is reported on a\n  postback.\n\nPrivate (admin-only) events are never listed.","parameters":[{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"event_id":3,"name":"Deposit","status":"active","payable_status":"cpa","cpa":7.5,"revshare_percentage":null,"has_custom_rate":true,"track_multiple":false,"reporting_param":"event_id","reporting_id":3}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"event_id":3,"name":"Deposit","status":"active","payable_status":"cpa","cpa":7.5,"revshare_percentage":null,"has_custom_rate":true,"track_multiple":false,"reporting_param":"event_id","reporting_id":3}],"items":{"type":"object","properties":{"event_id":{"type":"integer","example":3},"name":{"type":"string","example":"Deposit"},"status":{"type":"string","example":"active"},"payable_status":{"type":"string","example":"cpa"},"cpa":{"type":"number","example":7.5},"revshare_percentage":{"type":"string","example":null,"nullable":true},"has_custom_rate":{"type":"boolean","example":true},"track_multiple":{"type":"boolean","example":false},"reporting_param":{"type":"string","example":"event_id"},"reporting_id":{"type":"integer","example":3}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Campaign not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Campaign not found."}}}}}}},"tags":["Publisher Campaigns"]},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/publisher\/postbacks":{"get":{"summary":"List My Postbacks","operationId":"listMyPostbacks","description":"Returns a paginated list of your postbacks \u2014 both global (fire on every\nconversion of yours) and campaign-specific.\n\n`delivery_method` says how each one delivers: `url` calls `url`; `meta` sends the\nconversion to your Meta pixel through the Conversions API, using your Meta `business`\nand the settings in `meta` (both null on a URL postback).","parameters":[{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":9,"type":"campaign","delivery_method":"url","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}","http_method":"GET","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":null,"meta":null,"created_at":"2026-05-01T12:00:00Z"},{"id":10,"type":"global","delivery_method":"meta","url":null,"http_method":"GET","campaign_id":null,"campaign_name":null,"event_id":null,"event_name":null,"conversion_type":"campaign_only","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":2,"total":2}},"properties":{"data":{"type":"array","example":[{"id":9,"type":"campaign","delivery_method":"url","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}","http_method":"GET","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"business":null,"meta":null,"created_at":"2026-05-01T12:00:00Z"},{"id":10,"type":"global","delivery_method":"meta","url":null,"http_method":"GET","campaign_id":null,"campaign_name":null,"event_id":null,"event_name":null,"conversion_type":"campaign_only","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"campaign"},"delivery_method":{"type":"string","example":"url"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}"},"http_method":{"type":"string","example":"GET"},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Spring Promo"},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"all"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"string","example":null,"nullable":true},"meta":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":2},"total":{"type":"integer","example":2}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publisher Postbacks"]},"post":{"summary":"Create My Postback","operationId":"createMyPostback","description":"Creates a postback for your account. Two scopes are supported via `type`:\n\n- `global` \u2014 fires for every conversion of yours. Use `conversion_type`\n  to limit it to base conversions (`campaign_only`, the default), event\n  conversions (`event_only`) or both (`all`).\n- `campaign` \u2014 fires only for conversions of the given `campaign_id`\n  (the campaign must be accessible to you). Optionally scope to a single\n  event with `event_id`.\n\n**Postback URL tokens** \u2014 `url` may contain `{TOKEN}` placeholders that\nare replaced with real values when the postback fires. Tokens are\ncase-insensitive and the URL-encoded form (`%7BTOKEN%7D`) is also\naccepted. Recognized tokens with no value resolve to an empty string;\nunrecognized placeholders are left untouched.\n\n| Token | Description |\n|-------|-------------|\n| `{UID}` | Unique conversion\/click ID |\n| `{CAMPAIGN_ID}` | Campaign ID (aliases: `{OFFER_ID}`, `{OFFER}`, `{CAMPAIGN}`) |\n| `{CREATIVE_ID}` | Creative ID (alias: `{CREATIVE}`) |\n| `{PUBLISHER_ID}` | Publisher ID (aliases: `{AFFILIATE_ID}`, `{AFFILIATE}`, `{PUBLISHER}`) |\n| `{s1}` \u2026 `{s7}` | Sub IDs passed on the tracking link (aliases: `{sub1}`\u2026`{sub7}`, `{SUBID_1}`\u2026`{SUBID_7}`) |\n| `{DEVICE}` | Device type of the click |\n| `{OS}` | Operating system of the click |\n| `{CPA}` | Payout amount of the conversion (two decimals, or three for a fractional cent: `10.00`, `0.015`) |\n| `{ORDER_ID}` | Order\/transaction ID reported on the conversion (aliases: `{TRANSACTION_ID}`, `{TXN_ID}`, `{ORDER}`) |\n| `{ORDER_TOTAL}` | Order total reported on the conversion, in the campaign's currency (alias: `{TOTAL}`) |\n| `{CURRENCY}` | The campaign's currency, which every amount in the postback is in (alias: `{OFFER_CURRENCY}`) |\n| `{TIMESTAMP}` | Unix timestamp of the conversion (aliases: `{TS}`, `{TIME}`) |\n| `{EVENT_ID}` | Event ID (0 for base conversions; alias: `{EVENT}`) |\n| `{EVENT_NAME}` | Event name (`base` for base conversions) |\n| `{USER_AGENT}` | User agent of the click (URL-encoded) |\n| `{USER_IP}` | IP of the click\/conversion (URL-encoded; alias: `{CONVERSION_IP}`) |\n| `{GEO_CITY_NAME}` | City of the click (URL-encoded) |\n| `{GEO_REGION_CODE}` | 2-letter region code of the click (URL-encoded) |\n| `{ANDROID_ID}`, `{ANDROID_ID_MD5}`, `{ANDROID_ID_SHA1}` | Android device identifiers |\n| `{IDFA}`, `{IDFA_MD5}`, `{IDFA_SHA1}` | iOS advertising identifiers |\n| `{GOOGLE_AID}` | Google advertising ID |\n| `{FBCLID}`, `{GCLID}` | Facebook \/ Google click IDs (URL-encoded) |\n\n**Meta delivery**: set `delivery_method` to `meta` to send the conversions to your Meta\npixel through the Conversions API instead of calling a URL. Name one of your Meta\nbusinesses in `business_id` (`GET \/publisher\/integrations`) and the pixel, event and data\nmapping in `meta`, and leave `url` out. `meta.custom_data` and `meta.user_data` values\ntake the same tokens as a URL. The page URL sent to Meta is set by your network.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":10,"type":"global","delivery_method":"meta","url":null,"http_method":"GET","campaign_id":null,"campaign_name":null,"event_id":null,"event_name":null,"conversion_type":"campaign_only","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":10},"type":{"type":"string","example":"global"},"delivery_method":{"type":"string","example":"meta"},"url":{"type":"string","example":null,"nullable":true},"http_method":{"type":"string","example":"GET"},"campaign_id":{"type":"string","example":null,"nullable":true},"campaign_name":{"type":"string","example":null,"nullable":true},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"campaign_only"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"object","properties":{"id":{"type":"integer","example":3},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"}}},"meta":{"type":"object","properties":{"pixel_id":{"type":"string","example":"931612345678901"},"pixel_name":{"type":"string","example":"Acme Pixel"},"event_name":{"type":"string","example":"Lead"},"custom_event":{"type":"boolean","example":false},"event_id":{"type":"string","example":null,"nullable":true},"action_source":{"type":"string","example":"website"},"meta_clicks_only":{"type":"boolean","example":true},"paused":{"type":"boolean","example":false},"custom_data":{"type":"array","example":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"items":{"type":"object","properties":{"field":{"type":"string","example":"value"},"name":{"type":"string","example":null,"nullable":true},"value":{"type":"string","example":"{CPA}"}}}},"user_data":{"type":"array","example":[{"field":"external_id","value":"{s1}"}],"items":{"type":"object","properties":{"field":{"type":"string","example":"external_id"},"value":{"type":"string","example":"{s1}"}}}}}},"created_at":{"type":"string","example":"2026-05-02T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"url":["The url must use HTTPS (https:\/\/)."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"url":{"type":"array","example":["The url must use HTTPS (https:\/\/)."],"items":{"type":"string"}}}}}}}}}},"tags":["Publisher Postbacks"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Postback scope. `global` fires for all of the publisher's conversions; `campaign` fires only for the given campaign.","example":"campaign","enum":["global","campaign"]},"url":{"type":"string","description":"Postback URL. Required unless `delivery_method` is `meta`, and not allowed for a Meta postback. Supports `{TOKEN}` placeholders resolved at conversion time: see the endpoint description for the full token list. Must not be greater than 2048 characters.","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}&s1={s1}"},"http_method":{"type":"string","description":"HTTP verb used to fire the postback: `GET` (default) or `POST`. Parameters are sent in the query string either way. Omit to use the default.","example":"GET","enum":["GET","POST"],"nullable":true},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local). Required when `type` is `campaign`. This field is required when <code>type<\/code> is <code>campaign<\/code>.","example":42,"nullable":true},"event_id":{"type":"integer","description":"Optional campaign event ID (tenant-local) to scope the postback to a single event. Only for `campaign` type.","example":null,"nullable":true},"conversion_type":{"type":"string","description":"Which conversions fire a global postback: `all`, `campaign_only` (default) or `event_only`. Only for `global` type.","example":"campaign_only","enum":["all","campaign_only","event_only"],"nullable":true},"include_non_payable":{"type":"boolean","description":"Whether non-payable event conversions also fire the postback. Defaults to false.","example":false,"nullable":true},"delivery_method":{"type":"string","description":"How the postback delivers: `url` (default) calls `url`; `meta` sends the conversion to a Meta pixel through the Conversions API, using one of the publisher's Meta businesses (`business_id`) and the settings in `meta`.","example":"url","enum":["url","meta"],"nullable":true},"business_id":{"type":"integer","description":"The ID of the Meta business to send through, one of your integrations. Required when `delivery_method` is `meta`.","example":3},"meta":{"type":"object","description":"The Meta settings. Required when `delivery_method` is `meta`.","example":[],"properties":{"pixel_id":{"type":"string","description":"The Meta pixel (dataset) ID, digits only.","example":"931612345678901"},"pixel_name":{"type":"string","description":"The pixel's name, for display only.","example":"Acme Pixel"},"event_name":{"type":"string","description":"One of Meta's standard events (`Lead`, `Purchase`, `CompleteRegistration`, `Subscribe`, ...), or, with `custom_event`, a custom event name of up to 50 letters, numbers, spaces, dots, dashes and underscores.","example":"Lead"},"custom_event":{"type":"boolean","description":"Send `event_name` as a custom event. Defaults to false.","example":false},"event_id":{"type":"string","description":"A token template for the event ID Meta deduplicates on. Leave empty to send the conversion's own ID.","example":"{UID}"},"action_source":{"type":"string","description":"Where the conversion happened: `website`, `email`, `phone_call`, `chat`, `physical_store`, `system_generated` or `other`.","example":"website"},"meta_clicks_only":{"type":"boolean","description":"Send only conversions whose click came from Facebook or Instagram (it carries an `fbclid` or a valid `fbc`). Defaults to true.","example":true},"paused":{"type":"boolean","description":"Keep the postback but send nothing. Defaults to false.","example":false},"custom_data":{"type":"array","description":"Meta custom_data, one row per field, up to 20 rows. Omitted means none.","example":[[]],"items":{"type":"object","properties":{"field":{"type":"string","description":"`value`, `currency`, `order_id`, `predicted_ltv`, `num_items`, `search_string`, `status`, `content_name`, `content_category`, `content_ids` (comma-separated, sent as a list), `content_type`, `delivery_category`, `item_number`, `net_revenue`, or `custom` for a custom property.","example":"value"},"name":{"type":"string","description":"The property's name (lowercase letters, digits and underscores) when `field` is `custom`.","example":"plan_tier"},"value":{"type":"string","description":"The value, as a token template.","example":"{CPA}"}},"required":["field","value"]}},"user_data":{"type":"array","description":"Meta user_data, one row per field, up to 20 rows. Omitted means none.","example":[[]],"items":{"type":"object","properties":{"field":{"type":"string","description":"`em`, `ph`, `fn`, `ln`, `ge`, `db`, `ct`, `st`, `zp`, `country` or `external_id` (normalized and SHA-256 hashed before sending), or `fbc`, `fbp`, `subscription_id`, `fb_login_id`, `lead_id` (sent as is).","example":"external_id"},"value":{"type":"string","description":"The value, as a token template.","example":"{s1}"}},"required":["field","value"]}}},"required":["pixel_id","event_name","action_source"]}},"required":["type","url"]}}}}}},"\/api\/v1\/publisher\/postbacks\/{postback_id}":{"put":{"summary":"Update Postback","operationId":"updatePostback","description":"Partially updates one of your own postbacks \u2014 send only the fields you want to\nchange. Anything you omit keeps its current value, and cross-field rules are\nvalidated against the resulting state. `PATCH` and `PUT` are both accepted and\nbehave identically.\n\nThe `type` can be changed in either direction. Switching to `global` drops the\ncampaign and event; switching to `campaign` requires a `campaign_id` you have access\nto.\n\nOmitting `http_method` keeps the stored verb \u2014 including the implicit `POST` of a\npostback created before the option existed. It does not fall back to the `GET`\ndefault used when creating.\n\nAn omitted `delivery_method` keeps the stored one. Switching to `meta` needs `business_id`\nand `meta` and drops the URL; switching back to `url` needs a `url`. On a Meta postback,\nthe keys you send in `meta` replace those stored and the rest are kept, so\n`{\"meta\":{\"paused\":true}}` pauses it. A list you send (`custom_data`, `user_data`)\nreplaces the stored list. The page URL sent to Meta stays as your network set it.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":10,"type":"global","delivery_method":"meta","url":null,"http_method":"GET","campaign_id":null,"campaign_name":null,"event_id":null,"event_name":null,"conversion_type":"campaign_only","include_non_payable":false,"business":{"id":3,"name":"Acme Ads","status":"connected"},"meta":{"pixel_id":"931612345678901","pixel_name":"Acme Pixel","event_name":"Lead","custom_event":false,"event_id":null,"action_source":"website","meta_clicks_only":true,"paused":false,"custom_data":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"user_data":[{"field":"external_id","value":"{s1}"}]},"created_at":"2026-05-02T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":10},"type":{"type":"string","example":"global"},"delivery_method":{"type":"string","example":"meta"},"url":{"type":"string","example":null,"nullable":true},"http_method":{"type":"string","example":"GET"},"campaign_id":{"type":"string","example":null,"nullable":true},"campaign_name":{"type":"string","example":null,"nullable":true},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"conversion_type":{"type":"string","example":"campaign_only"},"include_non_payable":{"type":"boolean","example":false},"business":{"type":"object","properties":{"id":{"type":"integer","example":3},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"}}},"meta":{"type":"object","properties":{"pixel_id":{"type":"string","example":"931612345678901"},"pixel_name":{"type":"string","example":"Acme Pixel"},"event_name":{"type":"string","example":"Lead"},"custom_event":{"type":"boolean","example":false},"event_id":{"type":"string","example":null,"nullable":true},"action_source":{"type":"string","example":"website"},"meta_clicks_only":{"type":"boolean","example":true},"paused":{"type":"boolean","example":false},"custom_data":{"type":"array","example":[{"field":"value","name":null,"value":"{CPA}"},{"field":"currency","name":null,"value":"{CURRENCY}"}],"items":{"type":"object","properties":{"field":{"type":"string","example":"value"},"name":{"type":"string","example":null,"nullable":true},"value":{"type":"string","example":"{CPA}"}}}},"user_data":{"type":"array","example":[{"field":"external_id","value":"{s1}"}],"items":{"type":"object","properties":{"field":{"type":"string","example":"external_id"},"value":{"type":"string","example":"{s1}"}}}}}},"created_at":{"type":"string","example":"2026-05-02T12:00:00Z"}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Postback not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Postback not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"The given data was invalid.","errors":{"campaign_id":["The selected campaign id is invalid."]}},"properties":{"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"campaign_id":{"type":"array","example":["The selected campaign id is invalid."],"items":{"type":"string"}}}}}}}}}},"tags":["Publisher Postbacks"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Postback scope. `global` fires for all of the publisher's conversions; `campaign` fires only for the given campaign.","example":"campaign","enum":["global","campaign"]},"url":{"type":"string","description":"Postback URL. Required unless `delivery_method` is `meta`, and not allowed for a Meta postback. Supports `{TOKEN}` placeholders resolved at conversion time: see the endpoint description for the full token list. Must not be greater than 2048 characters.","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}&s1={s1}","nullable":true},"http_method":{"type":"string","description":"HTTP verb used to fire the postback: `GET` (default) or `POST`. Parameters are sent in the query string either way. Omit to use the default.","example":"GET","enum":["GET","POST"],"nullable":true},"campaign_id":{"type":"integer","description":"Campaign ID (tenant-local). Required when `type` is `campaign`. This field is required when <code>type<\/code> is <code>campaign<\/code>.","example":42,"nullable":true},"event_id":{"type":"integer","description":"Optional campaign event ID (tenant-local) to scope the postback to a single event. Only for `campaign` type.","example":null,"nullable":true},"conversion_type":{"type":"string","description":"Which conversions fire a global postback: `all`, `campaign_only` (default) or `event_only`. Only for `global` type.","example":"campaign_only","enum":["all","campaign_only","event_only"],"nullable":true},"include_non_payable":{"type":"boolean","description":"Whether non-payable event conversions also fire the postback. Defaults to false.","example":false,"nullable":true},"delivery_method":{"type":"string","description":"How the postback delivers: `url` (default) calls `url`; `meta` sends the conversion to a Meta pixel through the Conversions API, using one of the publisher's Meta businesses (`business_id`) and the settings in `meta`.","example":"url","enum":["url","meta"],"nullable":true},"business_id":{"type":"integer","description":"The ID of the Meta business to send through, one of your integrations. Required when `delivery_method` is `meta`.","example":3},"meta":{"type":"object","description":"The Meta settings. Required when `delivery_method` is `meta`.","example":[],"properties":{"pixel_id":{"type":"string","description":"The Meta pixel (dataset) ID, digits only.","example":"931612345678901"},"pixel_name":{"type":"string","description":"The pixel's name, for display only.","example":"Acme Pixel"},"event_name":{"type":"string","description":"One of Meta's standard events (`Lead`, `Purchase`, `CompleteRegistration`, `Subscribe`, ...), or, with `custom_event`, a custom event name of up to 50 letters, numbers, spaces, dots, dashes and underscores.","example":"Lead"},"custom_event":{"type":"boolean","description":"Send `event_name` as a custom event. Defaults to false.","example":false},"event_id":{"type":"string","description":"A token template for the event ID Meta deduplicates on. Leave empty to send the conversion's own ID.","example":"{UID}"},"action_source":{"type":"string","description":"Where the conversion happened: `website`, `email`, `phone_call`, `chat`, `physical_store`, `system_generated` or `other`.","example":"website"},"meta_clicks_only":{"type":"boolean","description":"Send only conversions whose click came from Facebook or Instagram (it carries an `fbclid` or a valid `fbc`). Defaults to true.","example":true},"paused":{"type":"boolean","description":"Keep the postback but send nothing. Defaults to false.","example":false},"custom_data":{"type":"array","description":"Meta custom_data, one row per field, up to 20 rows. Omitted means none.","example":[[]],"items":{"type":"object","properties":{"field":{"type":"string","description":"`value`, `currency`, `order_id`, `predicted_ltv`, `num_items`, `search_string`, `status`, `content_name`, `content_category`, `content_ids` (comma-separated, sent as a list), `content_type`, `delivery_category`, `item_number`, `net_revenue`, or `custom` for a custom property.","example":"value"},"name":{"type":"string","description":"The property's name (lowercase letters, digits and underscores) when `field` is `custom`.","example":"plan_tier"},"value":{"type":"string","description":"The value, as a token template.","example":"{CPA}"}},"required":["field","value"]}},"user_data":{"type":"array","description":"Meta user_data, one row per field, up to 20 rows. Omitted means none.","example":[[]],"items":{"type":"object","properties":{"field":{"type":"string","description":"`em`, `ph`, `fn`, `ln`, `ge`, `db`, `ct`, `st`, `zp`, `country` or `external_id` (normalized and SHA-256 hashed before sending), or `fbc`, `fbp`, `subscription_id`, `fb_login_id`, `lead_id` (sent as is).","example":"external_id"},"value":{"type":"string","description":"The value, as a token template.","example":"{s1}"}},"required":["field","value"]}}},"required":["pixel_id","event_name","action_source"]}}}}}}},"delete":{"summary":"Delete My Postback","operationId":"deleteMyPostback","description":"Deletes one of your postbacks by its ID.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Postback deleted."},"properties":{"message":{"type":"string","example":"Postback deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Postback not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Postback not found."}}}}}}},"tags":["Publisher Postbacks"]},"parameters":[{"in":"path","name":"postback_id","description":"The ID of the postback.","example":9,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/publisher\/integrations":{"get":{"summary":"List My Integrations","operationId":"listMyIntegrations","description":"Returns your connected ad platform businesses, as on Tools, then Integrations. Today that is\nMeta: a business is a name plus the Conversions API access token you generated, and your\npostbacks with `delivery_method: meta` send through one (`business_id`).\n\nThe token itself is never returned: `has_token` and `token_last4` say whether one is stored.\n`status` is `connected`, `unverified` (Meta couldn't be reached to check the token; sends\nstill go), `needs_attention` (Meta rejected the token, see `status_message`) or\n`awaiting_token` (imported without a token; nothing is sent until you add one).","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":3,"platform":"meta","name":"Acme Ads","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":"2026-05-02T08:30:00+00:00","created_at":"2026-05-01T12:00:00+00:00","postbacks_count":2}]},"properties":{"data":{"type":"array","example":[{"id":3,"platform":"meta","name":"Acme Ads","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":"2026-05-02T08:30:00+00:00","created_at":"2026-05-01T12:00:00+00:00","postbacks_count":2}],"items":{"type":"object","properties":{"id":{"type":"integer","example":3},"platform":{"type":"string","example":"meta"},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"},"status_label":{"type":"string","example":"Connected"},"status_message":{"type":"string","example":null,"nullable":true},"has_token":{"type":"boolean","example":true},"token_last4":{"type":"string","example":"x9Zq"},"meta_account_name":{"type":"string","example":"Acme Conversions"},"imported_from_everflow":{"type":"boolean","example":false},"checked_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"last_sent_at":{"type":"string","example":"2026-05-02T08:30:00+00:00"},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"postbacks_count":{"type":"integer","example":2}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publisher Integrations"]},"post":{"summary":"Connect My Integration","operationId":"connectMyIntegration","description":"Connects a Meta business: a name and the Conversions API access token you generated in Meta\nEvents Manager (your pixel, then Settings, then Conversions API). The token belongs to a\nsystem user with access to that pixel.\n\nMeta is asked whether the token works. A token Meta rejects answers `422` on `access_token`;\nwhen Meta can't be reached, the business is saved as `unverified` and its first send\nconfirms it. The token is write-only: responses show only its last four characters.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"platform":"meta","name":"Acme Ads","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":null,"created_at":"2026-05-01T12:00:00+00:00","postbacks_count":0}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"platform":{"type":"string","example":"meta"},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"},"status_label":{"type":"string","example":"Connected"},"status_message":{"type":"string","example":null,"nullable":true},"has_token":{"type":"boolean","example":true},"token_last4":{"type":"string","example":"x9Zq"},"meta_account_name":{"type":"string","example":"Acme Conversions"},"imported_from_everflow":{"type":"boolean","example":false},"checked_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"last_sent_at":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"postbacks_count":{"type":"integer","example":0}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"access_token":["Meta didn't accept this access token: Invalid OAuth access token."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"access_token":{"type":"array","example":["Meta didn't accept this access token: Invalid OAuth access token."],"items":{"type":"string"}}}}}}}}}},"tags":["Publisher Integrations"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"A name for the business, unique among your Meta businesses (any case). Must not be greater than 255 characters.","example":"Acme Ads"},"access_token":{"type":"string","description":"The Conversions API access token you generated in Meta Events Manager (your pixel, then Settings, then Conversions API). Write-only: responses show only its last four characters. Meta is asked whether it works; one Meta rejects answers 422, and one Meta can't be asked about is saved as `unverified`. Must be at least 20 characters. Must not be greater than 2048 characters.","example":"EAAGm0PX4ZCpsBAxxxxxxxxxxxxxxxx"}},"required":["name","access_token"]}}}}}},"\/api\/v1\/publisher\/integrations\/{integration_id}":{"get":{"summary":"Get My Integration","operationId":"getMyIntegration","description":"Returns one of your ad platform businesses. The access token is never returned.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"platform":"meta","name":"Acme Ads","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":"2026-05-02T08:30:00+00:00","created_at":"2026-05-01T12:00:00+00:00","postbacks_count":2}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"platform":{"type":"string","example":"meta"},"name":{"type":"string","example":"Acme Ads"},"status":{"type":"string","example":"connected"},"status_label":{"type":"string","example":"Connected"},"status_message":{"type":"string","example":null,"nullable":true},"has_token":{"type":"boolean","example":true},"token_last4":{"type":"string","example":"x9Zq"},"meta_account_name":{"type":"string","example":"Acme Conversions"},"imported_from_everflow":{"type":"boolean","example":false},"checked_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"last_sent_at":{"type":"string","example":"2026-05-02T08:30:00+00:00"},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"postbacks_count":{"type":"integer","example":2}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Integration not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Integration not found."}}}}}}},"tags":["Publisher Integrations"]},"put":{"summary":"Update My Integration","operationId":"updateMyIntegration","description":"Renames one of your Meta businesses and\/or replaces its access token. Send only what\nchanges: an omitted name keeps the current one, and an omitted or empty `access_token`\nkeeps the stored token. A new token is checked with Meta as on create, and connects a\nbusiness that was imported without one. `PATCH` and `PUT` are both accepted and behave\nidentically.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":3,"platform":"meta","name":"Acme Ads (EU)","status":"connected","status_label":"Connected","status_message":null,"has_token":true,"token_last4":"x9Zq","meta_account_name":"Acme Conversions","imported_from_everflow":false,"checked_at":"2026-05-01T12:00:00+00:00","last_sent_at":"2026-05-02T08:30:00+00:00","created_at":"2026-05-01T12:00:00+00:00","postbacks_count":2}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":3},"platform":{"type":"string","example":"meta"},"name":{"type":"string","example":"Acme Ads (EU)"},"status":{"type":"string","example":"connected"},"status_label":{"type":"string","example":"Connected"},"status_message":{"type":"string","example":null,"nullable":true},"has_token":{"type":"boolean","example":true},"token_last4":{"type":"string","example":"x9Zq"},"meta_account_name":{"type":"string","example":"Acme Conversions"},"imported_from_everflow":{"type":"boolean","example":false},"checked_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"last_sent_at":{"type":"string","example":"2026-05-02T08:30:00+00:00"},"created_at":{"type":"string","example":"2026-05-01T12:00:00+00:00"},"postbacks_count":{"type":"integer","example":2}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Integration not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Integration not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"name":["A Meta business with this name already exists."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"name":{"type":"array","example":["A Meta business with this name already exists."],"items":{"type":"string"}}}}}}}}}},"tags":["Publisher Integrations"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"A new name, unique among your Meta businesses (any case). Omit to keep the current one. Must not be greater than 255 characters.","example":"Acme Ads (EU)"},"access_token":{"type":"string","description":"A new Conversions API access token. Omit it or send it empty to keep the current token. A new token is checked with Meta like on create, and connects a business imported without one. Must be at least 20 characters. Must not be greater than 2048 characters.","example":null,"nullable":true}}}}}}},"delete":{"summary":"Delete My Integration","operationId":"deleteMyIntegration","description":"Removes one of your Meta businesses and erases its access token. Refused with `422` while\npostbacks send through it: delete those postbacks or move them to another business first.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Integration deleted."},"properties":{"message":{"type":"string","example":"Integration deleted."}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Integration not found."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Integration not found."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"integration":["This business is used by 1 postback(s) (#9). Delete them or switch them to another business first."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"integration":{"type":"array","example":["This business is used by 1 postback(s) (#9). Delete them or switch them to another business first."],"items":{"type":"string"}}}}}}}}}},"tags":["Publisher Integrations"]},"parameters":[{"in":"path","name":"integration_id","description":"The ID of the integration.","example":3,"required":true,"schema":{"type":"integer"}}]},"\/api\/v1\/publisher\/tracking-links":{"get":{"summary":"List My Tracking Links","operationId":"listMyTrackingLinks","description":"Returns the tracking links available to the authenticated publisher.\nEach item includes the obfuscated `tracking_url` (alias `click_url`)\nready to be served, plus your payable rate for the campaign:\n\n- `cpa` \u2014 the amount you earn per conversion. When a custom rate has\n  been agreed for you it takes precedence over the campaign base rate\n  (`has_custom_rate` tells you when that applies).\n- `revshare` \u2014 your revenue-share percentage on `is_rev_share` campaigns.\n- `sale_share`: on a campaign that takes its revenue from each sale, the percentage of\n  each sale your margin tier pays you; `cpa` is then null.\n- `is_cpc` \u2014 whether the campaign pays per click.\n- `advanced_custom_rates` \u2014 rates that apply only to some of your traffic (by\n  country, subid, or both) on the campaign's main conversion. `country_mode`\n  `exclude` means every accepted country except those listed.\n\nHonours restricted advertisers\/campaigns, private\/approval offer access and private\ncreatives.\n\n`assets` gives the banner image or the email body (with `[LINK]` already replaced by\n`tracking_url`); `download_url` downloads the creative as the dashboard does. File creatives\nhave no tracking link and are listed by `GET \/publisher\/file-creatives`.\n\nUse `tracking_domain_id` (see `GET \/publisher\/tracking-domains`) to\noverride the resolved tracking domain in the generated URL. Use\n`link_type` to choose which URLs are emitted.","parameters":[{"in":"query","name":"campaign_id","description":"Restrict results to a single campaign ID.","example":42,"required":false,"schema":{"type":"integer","description":"Restrict results to a single campaign ID.","example":42,"nullable":true}},{"in":"query","name":"creative_id","description":"Restrict results to a single creative ID.","example":7,"required":false,"schema":{"type":"integer","description":"Restrict results to a single creative ID.","example":7,"nullable":true}},{"in":"query","name":"creative_name","description":"Partial, case-insensitive match on the creative name. Must not be greater than 255 characters.","example":"Banner 300x250","required":false,"schema":{"type":"string","description":"Partial, case-insensitive match on the creative name. Must not be greater than 255 characters.","example":"Banner 300x250","nullable":true}},{"in":"query","name":"category_id","description":"Filter creatives whose campaign belongs to this category ID.","example":3,"required":false,"schema":{"type":"integer","description":"Filter creatives whose campaign belongs to this category ID.","example":3,"nullable":true}},{"in":"query","name":"country","description":"Comma-separated ISO 3166-1 alpha-2 country codes; matches creatives whose campaign targets at least one of the listed countries.","example":"US,CA","required":false,"schema":{"type":"string","description":"Comma-separated ISO 3166-1 alpha-2 country codes; matches creatives whose campaign targets at least one of the listed countries.","example":"US,CA","nullable":true}},{"in":"query","name":"tracking_domain_id","description":"Override the resolved tracking domain in the generated `tracking_url`. Use the IDs returned by `GET \/publisher\/tracking-domains`.","example":2,"required":false,"schema":{"type":"integer","description":"Override the resolved tracking domain in the generated `tracking_url`. Use the IDs returned by `GET \/publisher\/tracking-domains`.","example":2,"nullable":true}},{"in":"query","name":"link_type","description":"Which URL fields to populate. `tracking` (default) returns `tracking_url`\/`click_url`; `preview` returns only `preview_url`; `all` returns both.","example":"tracking","required":false,"schema":{"type":"string","description":"Which URL fields to populate. `tracking` (default) returns `tracking_url`\/`click_url`; `preview` returns only `preview_url`; `all` returns both.","example":"tracking","enum":["tracking","preview","all"],"nullable":true}},{"in":"query","name":"with_assets","description":"Fill `assets` with the banner or the email body, `[LINK]` replaced by your tracking link. Off by default, since an email body can be hundreds of KB per row; `download_url` is always present.","example":"false","required":false,"schema":{"type":"string","description":"Fill `assets` with the banner or the email body, `[LINK]` replaced by your tracking link. Off by default, since an email body can be hundreds of KB per row; `download_url` is always present.","example":"false","enum":["0","1","true","false"],"nullable":true}},{"in":"query","name":"type","description":"Filter by creative type. Allowed: `DPLY`, `EMAIL`, `TEXT`.","example":"TEXT","required":false,"schema":{"type":"string","description":"Filter by creative type. Allowed: `DPLY`, `EMAIL`, `TEXT`.","example":"TEXT","enum":["DPLY","EMAIL","TEXT"],"nullable":true}},{"in":"query","name":"per_page","description":"Items per page (1\u2013100). Must be at least 1. Must not be greater than 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page (1\u2013100). Must be at least 1. Must not be greater than 100.","example":25,"nullable":true}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":7,"type":"TEXT","creative_name":"Banner 300x250","creative_category":"Finance","creative_countries":["US","CA"],"campaign_id":42,"publisher_id":15,"is_rev_share":false,"is_cpc":false,"cpa":12.5,"revshare":null,"sale_share":null,"has_custom_rate":true,"advanced_custom_rates":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}],"tracking_url":"https:\/\/track.example.com\/c\/abc123","click_url":"https:\/\/track.example.com\/c\/abc123","preview_url":null,"assets":null,"download_url":"https:\/\/api.example.com\/api\/v1\/publisher\/creatives\/download?ids=7"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":7,"type":"TEXT","creative_name":"Banner 300x250","creative_category":"Finance","creative_countries":["US","CA"],"campaign_id":42,"publisher_id":15,"is_rev_share":false,"is_cpc":false,"cpa":12.5,"revshare":null,"sale_share":null,"has_custom_rate":true,"advanced_custom_rates":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}],"tracking_url":"https:\/\/track.example.com\/c\/abc123","click_url":"https:\/\/track.example.com\/c\/abc123","preview_url":null,"assets":null,"download_url":"https:\/\/api.example.com\/api\/v1\/publisher\/creatives\/download?ids=7"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":7},"type":{"type":"string","example":"TEXT"},"creative_name":{"type":"string","example":"Banner 300x250"},"creative_category":{"type":"string","example":"Finance"},"creative_countries":{"type":"array","example":["US","CA"],"items":{"type":"string"}},"campaign_id":{"type":"integer","example":42},"publisher_id":{"type":"integer","example":15},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"cpa":{"type":"number","example":12.5},"revshare":{"type":"string","example":null,"nullable":true},"sale_share":{"type":"string","example":null,"nullable":true},"has_custom_rate":{"type":"boolean","example":true},"advanced_custom_rates":{"type":"array","example":[{"event_name":null,"rate_type":"cpa","rate":15,"base_rate":12.5,"condition_mode":null,"filters":[],"country_mode":"include","countries":[{"code":"GB","name":"United Kingdom"}]}],"items":{"type":"object","properties":{"event_name":{"type":"string","example":null,"nullable":true},"rate_type":{"type":"string","example":"cpa"},"rate":{"type":"number","example":15},"base_rate":{"type":"number","example":12.5},"condition_mode":{"type":"string","example":null,"nullable":true},"filters":{"type":"array","example":[]},"country_mode":{"type":"string","example":"include"},"countries":{"type":"array","example":[{"code":"GB","name":"United Kingdom"}],"items":{"type":"object","properties":{"code":{"type":"string","example":"GB"},"name":{"type":"string","example":"United Kingdom"}}}}}}},"tracking_url":{"type":"string","example":"https:\/\/track.example.com\/c\/abc123"},"click_url":{"type":"string","example":"https:\/\/track.example.com\/c\/abc123"},"preview_url":{"type":"string","example":null,"nullable":true},"assets":{"type":"string","example":null,"nullable":true},"download_url":{"type":"string","example":"https:\/\/api.example.com\/api\/v1\/publisher\/creatives\/download?ids=7"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"tracking_domain_id":["This tracking domain is not available for this publisher."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"tracking_domain_id":{"type":"array","example":["This tracking domain is not available for this publisher."],"items":{"type":"string"}}}}}}}}}},"tags":["Publisher Tracking Links"]}},"\/api\/v1\/publisher\/file-creatives":{"get":{"summary":"List My File Creatives","operationId":"listMyFileCreatives","description":"File creatives (images, videos, documents, HTML and archives) on the campaigns you can run.\nThey have no tracking link; download them with `download_url`. An HTML file has its\n`[LINK]` placeholder replaced by your tracking link on download.","parameters":[{"in":"query","name":"campaign_id","description":"Restrict results to a single campaign ID.","example":42,"required":false,"schema":{"type":"integer","description":"Restrict results to a single campaign ID.","example":42,"nullable":true}},{"in":"query","name":"file_type","description":"Filter by file type. Allowed: `archive`, `html`, `image`, `text`, `video`.","example":"image","required":false,"schema":{"type":"string","description":"Filter by file type. Allowed: `archive`, `html`, `image`, `text`, `video`.","example":"image","enum":["archive","html","image","text","video"],"nullable":true}},{"in":"query","name":"per_page","description":"Items per page (1\u2013100). Defaults to 25. Must be at least 1. Must not be greater than 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page (1\u2013100). Defaults to 25. Must be at least 1. Must not be greater than 100.","example":25,"nullable":true}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":31,"campaign_id":42,"name":"Spring banner pack","file_type":"archive","file_name":"spring-banners.zip","mime_type":"application\/zip","file_size":482133,"download_url":"https:\/\/api.example.com\/api\/v1\/publisher\/creatives\/download?ids=31","created_at":"2026-10-19T12:00:00+00:00"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":31,"campaign_id":42,"name":"Spring banner pack","file_type":"archive","file_name":"spring-banners.zip","mime_type":"application\/zip","file_size":482133,"download_url":"https:\/\/api.example.com\/api\/v1\/publisher\/creatives\/download?ids=31","created_at":"2026-10-19T12:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":31},"campaign_id":{"type":"integer","example":42},"name":{"type":"string","example":"Spring banner pack"},"file_type":{"type":"string","example":"archive"},"file_name":{"type":"string","example":"spring-banners.zip"},"mime_type":{"type":"string","example":"application\/zip"},"file_size":{"type":"integer","example":482133},"download_url":{"type":"string","example":"https:\/\/api.example.com\/api\/v1\/publisher\/creatives\/download?ids=31"},"created_at":{"type":"string","example":"2026-10-19T12:00:00+00:00"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publisher Tracking Links"]}},"\/api\/v1\/publisher\/creatives\/download":{"get":{"summary":"Download Creatives","operationId":"downloadCreatives","description":"Downloads creatives the way the dashboard's Download does. A single file creative comes back\nas the file itself. Anything else is a zip with a folder per creative: the banner image, the\nemail body with `[LINK]` replaced by your tracking link, files with their assets, and a\n`creative_info.txt` with each creative's tracking link.\n\nEvery ID must be a creative you can run; otherwise nothing is downloaded and the response is\n`404` listing the IDs that were not found.\n\nLimited to 10 downloads a minute per API key.","parameters":[{"in":"query","name":"ids","description":"Comma-separated creative IDs, up to 50. Use the `id` from `GET \/publisher\/tracking-links` or `GET \/publisher\/file-creatives`. Must match the regex \/^\\d+(,\\d+)*$\/.","example":"7,12","required":true,"schema":{"type":"string","description":"Comma-separated creative IDs, up to 50. Use the `id` from `GET \/publisher\/tracking-links` or `GET \/publisher\/file-creatives`. Must match the regex \/^\\d+(,\\d+)*$\/.","example":"7,12"}},{"in":"query","name":"tracking_domain_id","description":"Tracking domain to build the links in the download on. Use the IDs returned by `GET \/publisher\/tracking-domains`. Defaults to the domain each campaign resolves to for you.","example":2,"required":false,"schema":{"type":"integer","description":"Tracking domain to build the links in the download on. Use the IDs returned by `GET \/publisher\/tracking-domains`. Defaults to the domain each campaign resolves to for you.","example":2,"nullable":true}}],"responses":{"200":{"description":"The file itself for a single file creative, otherwise a zip (`application\/zip`).","content":{"application\/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}},"404":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"not_found","message":"Creatives not found: 99."},"properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Creatives not found: 99."}}}}}},"422":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"validation_failed","message":"The given data was invalid.","errors":{"tracking_domain_id":["This tracking domain is not available for this publisher."]}},"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string","example":"The given data was invalid."},"errors":{"type":"object","properties":{"tracking_domain_id":{"type":"array","example":["This tracking domain is not available for this publisher."],"items":{"type":"string"}}}}}}}}},"429":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"rate_limited","message":"Too many requests. Please slow down."},"properties":{"code":{"type":"string","example":"rate_limited"},"message":{"type":"string","example":"Too many requests. Please slow down."}}}}}}},"tags":["Publisher Tracking Links"]}},"\/api\/v1\/publisher\/tracking-domains":{"get":{"summary":"List Tracking Domains","operationId":"listTrackingDomains","description":"Returns the tracking domains this publisher may use. When you have one or\nmore domains assigned, only those appear. Otherwise the network default\nand any unassigned (shared) domains are returned. Use the returned `id`\nwith the `tracking_domain_id` query parameter on the tracking-links\nendpoint to override the resolved domain. The domain marked\n`is_default: true` is the one used when no override is provided.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":1,"hostname":"track.example.com","is_default":true},{"id":2,"hostname":"go.example.com","is_default":false}]},"properties":{"data":{"type":"array","example":[{"id":1,"hostname":"track.example.com","is_default":true},{"id":2,"hostname":"go.example.com","is_default":false}],"items":{"type":"object","properties":{"id":{"type":"integer","example":1},"hostname":{"type":"string","example":"track.example.com"},"is_default":{"type":"boolean","example":true}}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publisher Tracking Domains"]}},"\/api\/v1\/publisher\/leads":{"get":{"summary":"List My Lead Snapshots","operationId":"listMyLeadSnapshots","description":"Returns a paginated list of full lead snapshots for the authenticated\npublisher inside the given click window. `publisher_id` and\n`advertiser_id` query parameters are ignored; results are always scoped\nto the authenticated publisher.\n\nEach item includes a `conversion` block with the params captured at\nconversion time \u2014 `order_total`, device \/ advertising identifiers (gclid,\nidfa, android_id, \u2026) and, when the network allows it, `order_id` and the\nadvertiser's postback subids (`postback_subid_1`..`_7`). Those are the\nadvertiser's own parameters: they are omitted unless the network turned them\non for publishers (Settings \u2192 Preferences) or for this publisher. Fields are\nnull when the conversion did not carry that value. `lead.cpa` is in the\ncampaign's `currency`; `conversion.order_total` is as the advertiser sent it,\nin `conversion.reported_currency` (`null` when it named none, so in the campaign's).\n\n**The `lifecycle` block**\n\nThe lead's tracking timeline:\n\n- `clicked_at` \u2014 when the click happened (ISO 8601, UTC).\n- `converted_at` \u2014 when the lead was credited (ISO 8601, UTC).\n- `click_to_conversion_seconds` \u2014 integer seconds between the two, or\n  `null` when either timestamp is missing. Never negative.\n- `requests[]` \u2014 every incoming conversion request and every outgoing\n  publisher notification, oldest first, each with `id`, `type`,\n  `direction` (`incoming`\/`outgoing`), `url`, `accepted`, `errors[]`,\n  `is_retry` and `created_at`.\n\n**Which click anchors the timer** \u2014 an event lead is a replica of its base\nlead and carries its own click row, but the meaningful elapsed time runs\nfrom the click the end user actually made, i.e. the *base* lead's click.\nSo for an event lead both `clicked_at` and `click_to_conversion_seconds`\nare anchored to `original_lead_id`'s click.\n\n**Traversing event leads** \u2014 `lead.original_lead_id` is the base lead an\nevent lead was replicated from (`null` on base leads). `lead.event_id` is the\nevent's ID as shown in the dashboard. Filter by\n`original_lead_id` to list every event lead of a given base lead, or by\n`lead_id` to fetch one lead directly. Both identity filters ignore the\ndate window, and both still resolve only within your own leads.\n\n**Lead Status Guide**\n\n- `PAYABLE` \u2014 lead is approved and pending payment.\n- `PAID` \u2014 lead has been paid out.\n- `PENDING` \u2014 lead is awaiting advertiser approval (window not yet expired).\n- `REVOKED` \u2014 advertiser revoked the lead after initial approval.\n- `NOT_PAYABLE` \u2014 lead was not approved.\n- `BLOCKED` \u2014 lead was blocked at click time (e.g. fraud or compliance).","parameters":[{"in":"query","name":"from","description":"Start of the click window (date the lead was created). Defaults to today. Must be a valid date.","example":"2026-04-01","required":false,"schema":{"type":"string","description":"Start of the click window (date the lead was created). Defaults to today. Must be a valid date.","example":"2026-04-01","nullable":true}},{"in":"query","name":"to","description":"End of the click window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","required":false,"schema":{"type":"string","description":"End of the click window. Defaults to today. Must be a valid date. Must be a date after or equal to <code>from<\/code>.","example":"2026-04-30","nullable":true}},{"in":"query","name":"timezone","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","required":false,"schema":{"type":"string","description":"IANA timezone identifier. Must be a valid time zone, such as <code>Africa\/Accra<\/code>.","example":"America\/New_York","nullable":true}},{"in":"query","name":"campaign_id","description":"Public campaign ID to filter by.","example":42,"required":false,"schema":{"type":"integer","description":"Public campaign ID to filter by.","example":42,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page (1\u2013100). Defaults to 25. Must be at least 1. Must not be greater than 100.","example":25,"required":false,"schema":{"type":"integer","description":"Rows per page (1\u2013100). Defaults to 25. Must be at least 1. Must not be greater than 100.","example":25,"nullable":true}},{"in":"query","name":"lead_id","description":"Look up a single lead by its ID. Overrides the date window, so the lead is found regardless of when it was created. Must not be greater than 64 characters.","example":"01a04386-2d30-721c-87fc-a61672f60b17","required":false,"schema":{"type":"string","description":"Look up a single lead by its ID. Overrides the date window, so the lead is found regardless of when it was created. Must not be greater than 64 characters.","example":"01a04386-2d30-721c-87fc-a61672f60b17","nullable":true}},{"in":"query","name":"original_lead_id","description":"Return the event leads produced by this base lead. Overrides the date window. Use it together with the `original_lead_id` field on an event lead to traverse in either direction. Must not be greater than 64 characters.","example":"01a04385-1fa8-7000-8000-000000000000","required":false,"schema":{"type":"string","description":"Return the event leads produced by this base lead. Overrides the date window. Use it together with the `original_lead_id` field on an event lead to traverse in either direction. Must not be greater than 64 characters.","example":"01a04385-1fa8-7000-8000-000000000000","nullable":true}},{"in":"query","name":"status","description":"Filter by derived status. One of: PAYABLE, PAID, PENDING, REVOKED, NOT_PAYABLE, BLOCKED.","example":"PAYABLE","required":false,"schema":{"type":"string","description":"Filter by derived status. One of: PAYABLE, PAID, PENDING, REVOKED, NOT_PAYABLE, BLOCKED.","example":"PAYABLE","enum":["PAYABLE","PAID","PENDING","REVOKED","NOT_PAYABLE","BLOCKED"],"nullable":true}},{"in":"query","name":"event_only","description":"When true, only event leads are returned. When false, only non-event leads.","example":false,"required":false,"schema":{"type":"boolean","description":"When true, only event leads are returned. When false, only non-event leads.","example":false,"nullable":true}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"lead":{"id":"01HV8XKP...","original_lead_id":null,"campaign_id":42,"campaign_name":"Demo Campaign","publisher_id":15,"publisher_name":"Pub Co","creative_id":3,"event_id":null,"event_name":null,"category_name":"Finance","cpa":12.5,"currency":"USD","click_time":"2026-04-20T10:15:00Z","date_credited":"2026-04-20T10:18:00Z","ip_address":"203.0.113.4","subid_1":"src-ig","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"status":"PAYABLE","trigger":"postback","original_url":"https:\/\/...","original_url_creative":"https:\/\/...","final_url":"https:\/\/...","final_url_creative":"https:\/\/..."},"conversion":{"order_id":"ORD-1001","order_total":"49.99","reported_currency":null,"postback_subid_1":"pb-src","postback_subid_2":null,"postback_subid_3":null,"postback_subid_4":null,"postback_subid_5":null,"postback_subid_6":null,"postback_subid_7":null,"android_id":null,"android_id_md5":null,"android_id_sha1":null,"google_aid":null,"idfa":null,"idfa_md5":null,"idfa_sha1":null,"fbclid":null,"gclid":"Cj0KCQ...","fbp":null,"fbc":null},"user_details":{"device":"Mobile","brand":"Apple iPhone","os":"iOS","browser_name":"Safari","browser_version":"17.4","referrer":"https:\/\/...","language":"English","user_agent":"Mozilla\/5.0..."},"ip_intelligence":{"ip_status":false,"is_residential":true,"is_mobile":true,"is_corporate":false,"is_edu":false,"is_public":false,"is_vpn":false,"is_proxy":false,"is_hosting":false,"is_hosting_cloud":false,"is_hosting_cloud_security":false,"is_hosting_web_browser":false,"is_darknet":false,"is_consumer_privacy":false,"ip_owner":"Verizon","conn_type":"Mobile","conn_speed":"high","city":"New York","region_name":"New York","country_name":"United States","latitude":40.7128,"longitude":-74.006,"time_zone":"America\/New_York","zip_code":"10001"},"lifecycle":{"clicked_at":"2026-04-20T10:15:00Z","converted_at":"2026-04-20T10:18:00Z","click_to_conversion_seconds":180,"requests":[{"id":9001,"type":"postback","direction":"incoming","url":"https:\/\/track.example.com\/postback\/abc123?uid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:00Z"},{"id":9002,"type":"publisher_postback","direction":"outgoing","url":"https:\/\/publisher.example.com\/cb?cid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:01Z"}]}}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":25,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"lead":{"id":"01HV8XKP...","original_lead_id":null,"campaign_id":42,"campaign_name":"Demo Campaign","publisher_id":15,"publisher_name":"Pub Co","creative_id":3,"event_id":null,"event_name":null,"category_name":"Finance","cpa":12.5,"currency":"USD","click_time":"2026-04-20T10:15:00Z","date_credited":"2026-04-20T10:18:00Z","ip_address":"203.0.113.4","subid_1":"src-ig","subid_2":null,"subid_3":null,"subid_4":null,"subid_5":null,"subid_6":null,"subid_7":null,"status":"PAYABLE","trigger":"postback","original_url":"https:\/\/...","original_url_creative":"https:\/\/...","final_url":"https:\/\/...","final_url_creative":"https:\/\/..."},"conversion":{"order_id":"ORD-1001","order_total":"49.99","reported_currency":null,"postback_subid_1":"pb-src","postback_subid_2":null,"postback_subid_3":null,"postback_subid_4":null,"postback_subid_5":null,"postback_subid_6":null,"postback_subid_7":null,"android_id":null,"android_id_md5":null,"android_id_sha1":null,"google_aid":null,"idfa":null,"idfa_md5":null,"idfa_sha1":null,"fbclid":null,"gclid":"Cj0KCQ...","fbp":null,"fbc":null},"user_details":{"device":"Mobile","brand":"Apple iPhone","os":"iOS","browser_name":"Safari","browser_version":"17.4","referrer":"https:\/\/...","language":"English","user_agent":"Mozilla\/5.0..."},"ip_intelligence":{"ip_status":false,"is_residential":true,"is_mobile":true,"is_corporate":false,"is_edu":false,"is_public":false,"is_vpn":false,"is_proxy":false,"is_hosting":false,"is_hosting_cloud":false,"is_hosting_cloud_security":false,"is_hosting_web_browser":false,"is_darknet":false,"is_consumer_privacy":false,"ip_owner":"Verizon","conn_type":"Mobile","conn_speed":"high","city":"New York","region_name":"New York","country_name":"United States","latitude":40.7128,"longitude":-74.006,"time_zone":"America\/New_York","zip_code":"10001"},"lifecycle":{"clicked_at":"2026-04-20T10:15:00Z","converted_at":"2026-04-20T10:18:00Z","click_to_conversion_seconds":180,"requests":[{"id":9001,"type":"postback","direction":"incoming","url":"https:\/\/track.example.com\/postback\/abc123?uid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:00Z"},{"id":9002,"type":"publisher_postback","direction":"outgoing","url":"https:\/\/publisher.example.com\/cb?cid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:01Z"}]}}],"items":{"type":"object","properties":{"lead":{"type":"object","properties":{"id":{"type":"string","example":"01HV8XKP..."},"original_lead_id":{"type":"string","example":null,"nullable":true},"campaign_id":{"type":"integer","example":42},"campaign_name":{"type":"string","example":"Demo Campaign"},"publisher_id":{"type":"integer","example":15},"publisher_name":{"type":"string","example":"Pub Co"},"creative_id":{"type":"integer","example":3},"event_id":{"type":"string","example":null,"nullable":true},"event_name":{"type":"string","example":null,"nullable":true},"category_name":{"type":"string","example":"Finance"},"cpa":{"type":"number","example":12.5},"currency":{"type":"string","example":"USD"},"click_time":{"type":"string","example":"2026-04-20T10:15:00Z"},"date_credited":{"type":"string","example":"2026-04-20T10:18:00Z"},"ip_address":{"type":"string","example":"203.0.113.4"},"subid_1":{"type":"string","example":"src-ig"},"subid_2":{"type":"string","example":null,"nullable":true},"subid_3":{"type":"string","example":null,"nullable":true},"subid_4":{"type":"string","example":null,"nullable":true},"subid_5":{"type":"string","example":null,"nullable":true},"subid_6":{"type":"string","example":null,"nullable":true},"subid_7":{"type":"string","example":null,"nullable":true},"status":{"type":"string","example":"PAYABLE"},"trigger":{"type":"string","example":"postback"},"original_url":{"type":"string","example":"https:\/\/..."},"original_url_creative":{"type":"string","example":"https:\/\/..."},"final_url":{"type":"string","example":"https:\/\/..."},"final_url_creative":{"type":"string","example":"https:\/\/..."}}},"conversion":{"type":"object","properties":{"order_id":{"type":"string","example":"ORD-1001"},"order_total":{"type":"string","example":"49.99"},"reported_currency":{"type":"string","example":null,"nullable":true},"postback_subid_1":{"type":"string","example":"pb-src"},"postback_subid_2":{"type":"string","example":null,"nullable":true},"postback_subid_3":{"type":"string","example":null,"nullable":true},"postback_subid_4":{"type":"string","example":null,"nullable":true},"postback_subid_5":{"type":"string","example":null,"nullable":true},"postback_subid_6":{"type":"string","example":null,"nullable":true},"postback_subid_7":{"type":"string","example":null,"nullable":true},"android_id":{"type":"string","example":null,"nullable":true},"android_id_md5":{"type":"string","example":null,"nullable":true},"android_id_sha1":{"type":"string","example":null,"nullable":true},"google_aid":{"type":"string","example":null,"nullable":true},"idfa":{"type":"string","example":null,"nullable":true},"idfa_md5":{"type":"string","example":null,"nullable":true},"idfa_sha1":{"type":"string","example":null,"nullable":true},"fbclid":{"type":"string","example":null,"nullable":true},"gclid":{"type":"string","example":"Cj0KCQ..."},"fbp":{"type":"string","example":null,"nullable":true},"fbc":{"type":"string","example":null,"nullable":true}}},"user_details":{"type":"object","properties":{"device":{"type":"string","example":"Mobile"},"brand":{"type":"string","example":"Apple iPhone"},"os":{"type":"string","example":"iOS"},"browser_name":{"type":"string","example":"Safari"},"browser_version":{"type":"string","example":"17.4"},"referrer":{"type":"string","example":"https:\/\/..."},"language":{"type":"string","example":"English"},"user_agent":{"type":"string","example":"Mozilla\/5.0..."}}},"ip_intelligence":{"type":"object","properties":{"ip_status":{"type":"boolean","example":false},"is_residential":{"type":"boolean","example":true},"is_mobile":{"type":"boolean","example":true},"is_corporate":{"type":"boolean","example":false},"is_edu":{"type":"boolean","example":false},"is_public":{"type":"boolean","example":false},"is_vpn":{"type":"boolean","example":false},"is_proxy":{"type":"boolean","example":false},"is_hosting":{"type":"boolean","example":false},"is_hosting_cloud":{"type":"boolean","example":false},"is_hosting_cloud_security":{"type":"boolean","example":false},"is_hosting_web_browser":{"type":"boolean","example":false},"is_darknet":{"type":"boolean","example":false},"is_consumer_privacy":{"type":"boolean","example":false},"ip_owner":{"type":"string","example":"Verizon"},"conn_type":{"type":"string","example":"Mobile"},"conn_speed":{"type":"string","example":"high"},"city":{"type":"string","example":"New York"},"region_name":{"type":"string","example":"New York"},"country_name":{"type":"string","example":"United States"},"latitude":{"type":"number","example":40.7128},"longitude":{"type":"number","example":-74.006},"time_zone":{"type":"string","example":"America\/New_York"},"zip_code":{"type":"string","example":"10001"}}},"lifecycle":{"type":"object","properties":{"clicked_at":{"type":"string","example":"2026-04-20T10:15:00Z"},"converted_at":{"type":"string","example":"2026-04-20T10:18:00Z"},"click_to_conversion_seconds":{"type":"integer","example":180},"requests":{"type":"array","example":[{"id":9001,"type":"postback","direction":"incoming","url":"https:\/\/track.example.com\/postback\/abc123?uid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:00Z"},{"id":9002,"type":"publisher_postback","direction":"outgoing","url":"https:\/\/publisher.example.com\/cb?cid=01HV8XKP","accepted":true,"errors":[],"is_retry":false,"created_at":"2026-04-20T10:18:01Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9001},"type":{"type":"string","example":"postback"},"direction":{"type":"string","example":"incoming"},"url":{"type":"string","example":"https:\/\/track.example.com\/postback\/abc123?uid=01HV8XKP"},"accepted":{"type":"boolean","example":true},"errors":{"type":"array","example":[]},"is_retry":{"type":"boolean","example":false},"created_at":{"type":"string","example":"2026-04-20T10:18:00Z"}}}}}}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":25},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Publisher Reporting"]}},"\/api\/v1\/advertiser\/campaigns":{"get":{"summary":"Advertiser Campaigns","operationId":"advertiserCampaigns","description":"Returns a paginated list of campaigns owned by the authenticated advertiser.\nFilters are flat query parameters; multiple values can be passed as a\ncomma-separated list (e.g. `status=ACTIVE,EXPIRING`).","parameters":[{"in":"query","name":"name","description":"Partial match on campaign name (case-insensitive).","example":"spring","required":false,"schema":{"type":"string","description":"Partial match on campaign name (case-insensitive).","example":"spring"}},{"in":"query","name":"status","description":"Comma-separated list of statuses. Allowed: `ACTIVE`, `EXPIRING`, `EXPIRED`.","example":"ACTIVE","required":false,"schema":{"type":"string","description":"Comma-separated list of statuses. Allowed: `ACTIVE`, `EXPIRING`, `EXPIRED`.","example":"ACTIVE"}},{"in":"query","name":"offer_type","description":"Comma-separated list of offer types. Allowed: `public`, `private`, `approval`.","example":"public","required":false,"schema":{"type":"string","description":"Comma-separated list of offer types. Allowed: `public`, `private`, `approval`.","example":"public"}},{"in":"query","name":"created_after","description":"Return only campaigns created on or after this ISO date.","example":"2026-01-01","required":false,"schema":{"type":"string","description":"Return only campaigns created on or after this ISO date.","example":"2026-01-01"}},{"in":"query","name":"created_before","description":"Return only campaigns created on or before this ISO date.","example":"2026-12-31","required":false,"schema":{"type":"string","description":"Return only campaigns created on or before this ISO date.","example":"2026-12-31"}},{"in":"query","name":"sort","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `status`, `payout`, `created_at`.","example":"-created_at","required":false,"schema":{"type":"string","description":"Sort by field. Prefix with `-` for descending. Allowed: `id`, `name`, `status`, `payout`, `created_at`.","example":"-created_at"}},{"in":"query","name":"per_page","description":"Items per page. Defaults to 10. Max 100.","example":25,"required":false,"schema":{"type":"integer","description":"Items per page. Defaults to 10. Max 100.","example":25}},{"in":"query","name":"page","description":"Page number.","example":1,"required":false,"schema":{"type":"integer","description":"Page number.","example":1}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":[{"id":12,"name":"Advertiser Owned Campaign","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","transaction_type":"cpa","is_rev_share":false,"is_cpc":false,"payout":18,"currency":"USD","expiration_date":null,"created_at":"2026-04-20T12:00:00Z","updated_at":"2026-04-20T12:00:00Z"}],"links":{"first":"...","last":"...","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"path":"...","per_page":10,"to":1,"total":1}},"properties":{"data":{"type":"array","example":[{"id":12,"name":"Advertiser Owned Campaign","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","transaction_type":"cpa","is_rev_share":false,"is_cpc":false,"payout":18,"currency":"USD","expiration_date":null,"created_at":"2026-04-20T12:00:00Z","updated_at":"2026-04-20T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":12},"name":{"type":"string","example":"Advertiser Owned Campaign"},"advertiser_id":{"type":"integer","example":7},"category_id":{"type":"integer","example":3},"category_name":{"type":"string","example":"Finance"},"offer_type":{"type":"string","example":"public"},"status":{"type":"string","example":"ACTIVE"},"transaction_type":{"type":"string","example":"cpa"},"is_rev_share":{"type":"boolean","example":false},"is_cpc":{"type":"boolean","example":false},"payout":{"type":"number","example":18},"currency":{"type":"string","example":"USD"},"expiration_date":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-04-20T12:00:00Z"},"updated_at":{"type":"string","example":"2026-04-20T12:00:00Z"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"..."},"last":{"type":"string","example":"..."},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"path":{"type":"string","example":"..."},"per_page":{"type":"integer","example":10},"to":{"type":"integer","example":1},"total":{"type":"integer","example":1}}}}}}}},"401":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"unauthenticated","message":"Authentication is required to access this resource."},"properties":{"code":{"type":"string","example":"unauthenticated"},"message":{"type":"string","example":"Authentication is required to access this resource."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"code":"forbidden","message":"You are not authorized to perform this action."},"properties":{"code":{"type":"string","example":"forbidden"},"message":{"type":"string","example":"You are not authorized to perform this action."}}}}}}},"tags":["Advertiser Campaigns"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Must not be greater than 255 characters.","example":"b","nullable":true},"status":{"type":"string","description":"Must not be greater than 255 characters.","example":"n","nullable":true},"offer_type":{"type":"string","description":"Must not be greater than 20 characters.","example":"gzmiyvdljnikhway","nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-11-02T03:04:27","nullable":true},"created_before":{"type":"string","description":"Must be a valid date. Must be a date after or equal to <code>created_after<\/code>.","example":"2052-11-25","nullable":true},"sort":{"type":"string","description":"","example":"-payout","enum":["id","-id","name","-name","status","-status","payout","-payout","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true}}}}}}}}}}