{"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.1.1"},"servers":[{"url":"https:\/\/api.clickgotrack.com"}],"tags":[{"name":"Account","description":""},{"name":"Publishers","description":""},{"name":"Publisher Restrictions","description":""},{"name":"Campaigns","description":""},{"name":"Advertisers","description":""},{"name":"Creatives","description":""},{"name":"Managers","description":""},{"name":"Tracking Links","description":""},{"name":"Tracking Domains","description":""},{"name":"Reference Data","description":""},{"name":"Reporting","description":""},{"name":"Publisher Campaigns","description":""},{"name":"Publisher Postbacks","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","Advertisers","Creatives","Managers","Tracking Links","Tracking Domains","Reference Data","Reporting"]},{"name":"Publisher APIs","tags":["Publisher Campaigns","Publisher Postbacks","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.\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"}}},"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"}}}}}}}}}},"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":"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","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","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"},"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-08-27T20:11:26","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-09-19","nullable":true},"sort":{"type":"string","description":"","example":"id","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}}}}}}},"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","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"},"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. Must match an existing stored value.","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}},"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","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"},"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","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"},"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. Must match an existing stored value.","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}}}}}}},"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.","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","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"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":9,"type":"campaign","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"created_at":"2026-05-01T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"campaign"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}"},"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},"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."}}}}}},"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 |\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 (alias: `{TOTAL}`) |\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":"campaign","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}&s1={s1}","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"created_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"campaign"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}&s1={s1}"},"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},"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":"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. Must use HTTPS. 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}&payout={CPA}&s1={s1}"},"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}},"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}":{"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\/custom-rates":{"get":{"summary":"List Custom Rates","operationId":"listCustomRates","description":"Returns the per-publisher custom rates (payout changes) in your network.\nFilter by `publisher_id`, `campaign_id` or `event_id` to find the rate\nthat applies to a specific pairing.","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":"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 conditions (the negotiated base rate).","example":false,"required":false,"schema":{"type":"boolean","description":"When true, only rates without subid 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,"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":[],"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,"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":[],"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},"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":[]},"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},"campaign_id":{"type":"integer","description":"","example":16},"event_id":{"type":"integer","description":"","example":16},"base_only":{"type":"boolean","description":"","example":false},"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 publisher a custom rate on a campaign \u2014 the API equivalent of a\npayout change in the dashboard. The rate overrides the campaign's (or\nevent's) base rate for that publisher only.\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`.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":9,"publisher_id":55,"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":[],"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},"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":[]},"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":{"cpa":["CPA cannot be set for revshare payouts."]}},"properties":{"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":{"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local) receiving the custom rate.","example":55},"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. 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":"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}}}}},"required":["publisher_id","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`, `campaign_id`, `event_id`) is fixed at\ncreation and cannot be changed here; delete the rate and create a new one\nto retarget it.\n\n**Subid conditions** \u2014 send `filters` to replace them wholesale, omit it\nto leave them untouched, or send `[]` to clear them.\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,"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":[],"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},"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":[]},"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":{"message":"The given data was invalid.","errors":{"revshare":["Revshare cannot be set for non-revshare payouts."]}},"properties":{"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":{"publisher_id":{"type":"integer","description":"Publisher ID (tenant-local) receiving the custom rate.","example":55},"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. 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":"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}}}}},"required":["publisher_id","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,"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,"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},"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,"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},"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_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":"is_not_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}}}}},"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,"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},"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,"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},"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_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":"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}}}}}}}}}},"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`).","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":"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","payout":18,"created_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":101,"name":"Spring Campaign","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","payout":18,"created_at":"2026-04-20T12:00:00Z"}],"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"},"payout":{"type":"number","example":18},"created_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":["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},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-08-27T20:11:26","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-09-19","nullable":true},"sort":{"type":"string","description":"","example":"-name","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}}}}}}},"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.","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","cpa":12.5,"payout":18,"is_rev_share":false,"is_incentive":false,"countries":["US","CA"],"geo_redirect_campaign_id":null,"geo_redirect_creative_id":null,"expired_redirect_campaign_id":null,"expired_redirect_creative_id":null,"campaign_cap_redirect_campaign_id":null,"campaign_cap_redirect_creative_id":null,"advertiser_cap_redirect_campaign_id":null,"advertiser_cap_redirect_creative_id":null,"device_redirect_campaign_id":null,"device_redirect_creative_id":null,"os_redirect_campaign_id":null,"os_redirect_creative_id":null,"created_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"},"cpa":{"type":"number","example":12.5},"payout":{"type":"number","example":18},"is_rev_share":{"type":"boolean","example":false},"is_incentive":{"type":"boolean","example":false},"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},"expired_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"expired_redirect_creative_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},"advertiser_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_creative_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},"os_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"os_redirect_creative_id":{"type":"string","example":null,"nullable":true},"created_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":{"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`.","example":"public","enum":["public","private","approval"]},"status":{"type":"string","description":"Initial campaign status. Allowed: `ACTIVE`, `EXPIRING`, `EXPIRED`. Defaults to `ACTIVE` when omitted.","example":"ACTIVE","enum":["ACTIVE","EXPIRING","EXPIRED"],"nullable":true},"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},"comment":{"type":"string","description":"","example":"architecto","nullable":true},"terms":{"type":"string","description":"Optional campaign terms shown to publishers.","example":null,"nullable":true},"converts_on":{"type":"string","description":"Free-text label describing the conversion event (e.g. \"Purchase\", \"Registration\").","example":"Purchase","nullable":true},"converts_on_other":{"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":12.5},"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},"payout":{"type":"number","description":"Amount the advertiser pays per conversion. Must be at least 0.","example":18},"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.","example":false},"cap_limit":{"type":"integer","description":"Conversion cap limit (required when `is_cap_active` is true). Must be at least 0.","example":null},"cap_limit_frequency":{"type":"integer","description":"Cap window frequency in days (required when `is_cap_active` is true). Must be at least 0.","example":null},"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":["android"],"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},"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},"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},"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},"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},"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},"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}},"required":["name","advertiser_id","offer_type","is_incentive","cpa","is_rev_share","cpa_rs","payout","is_hard_cap_active","hard_cap_date","is_cap_active","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.","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:\/\/...","is_incentive":false,"is_rev_share":false,"cpa":12.5,"cpa_rs":null,"payout":18,"is_cap_active":false,"cap_limit":null,"cap_limit_frequency":null,"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,"terms":null,"comment":null,"converts_on":null,"converts_on_other":null,"countries":["US","CA"],"geo_redirect_campaign_id":null,"geo_redirect_creative_id":null,"expired_redirect_campaign_id":null,"expired_redirect_creative_id":null,"campaign_cap_redirect_campaign_id":null,"campaign_cap_redirect_creative_id":null,"advertiser_cap_redirect_campaign_id":null,"advertiser_cap_redirect_creative_id":null,"device_redirect_campaign_id":null,"device_redirect_creative_id":null,"os_redirect_campaign_id":null,"os_redirect_creative_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:\/\/..."},"is_incentive":{"type":"boolean","example":false},"is_rev_share":{"type":"boolean","example":false},"cpa":{"type":"number","example":12.5},"cpa_rs":{"type":"string","example":null,"nullable":true},"payout":{"type":"number","example":18},"is_cap_active":{"type":"boolean","example":false},"cap_limit":{"type":"string","example":null,"nullable":true},"cap_limit_frequency":{"type":"string","example":null,"nullable":true},"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},"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},"expired_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"expired_redirect_creative_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},"advertiser_cap_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"advertiser_cap_redirect_creative_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},"os_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"os_redirect_creative_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.","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","cpa":13,"payout":18.5,"countries":["US","CA"],"geo_redirect_campaign_id":null,"geo_redirect_creative_id":null,"expired_redirect_campaign_id":null,"expired_redirect_creative_id":null}},"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"},"cpa":{"type":"number","example":13},"payout":{"type":"number","example":18.5},"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},"expired_redirect_campaign_id":{"type":"string","example":null,"nullable":true},"expired_redirect_creative_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":"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":{"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`.","example":"public","enum":["public","private","approval"]},"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},"comment":{"type":"string","description":"","example":"architecto","nullable":true},"terms":{"type":"string","description":"","example":"architecto","nullable":true},"converts_on":{"type":"string","description":"Free-text label describing the conversion event (e.g. \"Purchase\", \"Registration\").","example":"Purchase","nullable":true},"converts_on_other":{"type":"string","description":"","example":"architecto","nullable":true},"transaction_type":{"type":"string","description":"","example":"cpc","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":true},"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. Must be at least 0.","example":18.5},"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.","example":false},"cap_limit":{"type":"integer","description":"Conversion cap limit (required when `is_cap_active` is true). Must be at least 0.","example":null,"nullable":true},"cap_limit_frequency":{"type":"integer","description":"Cap window frequency in days. Must be at least 0.","example":null,"nullable":true},"expiration_date":{"type":"string","description":"Campaign expiration date (ISO 8601). Must be a valid date.","example":"2026-12-31","nullable":true},"status":{"type":"string","description":"Campaign status. Allowed: `ACTIVE`, `EXPIRING`, `EXPIRED`.","example":"ACTIVE","enum":["ACTIVE","EXPIRING","EXPIRED"],"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":["android"],"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},"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},"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},"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},"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},"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},"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}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","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- `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","components":{"tracking_domain":"track.example.com","conversion_token":"abc123","click_id_param":"uid","revenue_param_name":null,"revenue_param_token":null,"revenue_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"},"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}}}}}}}}}},"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":{"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. Must be a valid URL.","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","payable_status":"payable","cpa":5,"revenue":10,"revshare_percentage":null,"dynamic_revenue":false,"revenue_source":"revenue","track_multiple":false,"block_conversions":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","payable_status":"payable","cpa":5,"revenue":10,"revshare_percentage":null,"dynamic_revenue":false,"revenue_source":"revenue","track_multiple":false,"block_conversions":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"},"payable_status":{"type":"string","example":"payable"},"cpa":{"type":"number","example":5},"revenue":{"type":"number","example":10},"revshare_percentage":{"type":"string","example":null,"nullable":true},"dynamic_revenue":{"type":"boolean","example":false},"revenue_source":{"type":"string","example":"revenue"},"track_multiple":{"type":"boolean","example":false},"block_conversions":{"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","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"},"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},"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},"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","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"},"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},"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},"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\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,"components":{"tracking_domain":"track.example.com","conversion_token":"ev123","click_id_param":"uid","revenue_param_name":null,"revenue_param_token":null,"revenue_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},"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}}}}}}}}}},"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\/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":"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,"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,"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},"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-08-27T20:11:26","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-09-19","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}}}}}}},"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,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}},"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},"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":{"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. Must match an existing stored value.","example":null,"nullable":true},"payment_frequency":{"type":"integer","description":"Optional payment frequency code (integer).","example":null,"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,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T12:00:00Z"}},"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},"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":"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,"created_at":"2026-04-30T12:00:00Z","updated_at":"2026-04-30T13:00:00Z"}},"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},"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":"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. Must match an existing stored value.","example":null,"nullable":true},"payment_frequency":{"type":"integer","description":"Payment frequency code (integer).","example":2,"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","components":{"tracking_domain":"track.example.com","conversion_token":"abc123","click_id_param":"uid","revenue_param_name":null,"revenue_param_token":null,"revenue_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"},"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}}}}}}}}}},"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}\/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,"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},"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,"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},"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.","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\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,"components":{"tracking_domain":"track.example.com","conversion_token":"ae123","click_id_param":"uid","revenue_param_name":null,"revenue_param_token":null,"revenue_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},"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}}}}}}}}}},"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":"Filter by parent campaign ID.","example":12,"required":false,"schema":{"type":"integer","description":"Filter by parent campaign ID.","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":"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,"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,"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},"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":"DPLY","enum":["DPLY","EMAIL","TEXT","FILES"],"nullable":true},"is_active":{"type":"boolean","description":"","example":true,"nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-08-27T20:11:26","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-09-19","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":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,"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},"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":{"application\/json":{"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. Currently only \"text\" is supported through the public API. Display\/email creatives must be created via the dashboard.","example":"text","enum":["text"]},"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"]}}}}}},"\/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,"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},"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,"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},"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}}}}}}},"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":"both","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) take precedence over the campaign base rate;\n  `has_custom_rate` tells you when one applies.\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\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":"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,"has_custom_rate":true,"advertiser_payout":18,"tracking_url":"https:\/\/track.example.com\/c\/abc123","click_url":"https:\/\/track.example.com\/c\/abc123","preview_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,"has_custom_rate":true,"advertiser_payout":18,"tracking_url":"https:\/\/track.example.com\/c\/abc123","click_url":"https:\/\/track.example.com\/c\/abc123","preview_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},"has_custom_rate":{"type":"boolean","example":true},"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"},"preview_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\/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` (pixel also covers container requests)\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\n`POST \/admin\/tracking-requests\/{id}\/reprocess` can recover it.","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` or `pixel` (pixels include container requests).","example":"postback","required":false,"schema":{"type":"string","description":"Filter by transport: `postback` or `pixel` (pixels include container requests).","example":"postback","enum":["postback","pixel"]}},{"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,"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,"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},"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\/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.\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":{"message":"The given data was invalid.","errors":{"lead_ids":["The lead ids field is required."]}},"properties":{"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":["Reporting"],"requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"lead_ids":{"type":"array","description":"Must not be greater than 64 characters.","example":["b"],"items":{"type":"string"}}}}}}}}},"\/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). All monetary values are in your network currency.","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":"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":2.3863}],"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":{"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":2.3863}],"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":2.3863}}}},"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":{"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).","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,"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,"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},"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`.","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}}],"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},{"label":"2026-04-30","unique_clicks":2103,"converted_leads":118,"event_leads":9,"total_revenue_payout":4724,"total_cpa":3415,"total_profit":1309}]},"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},{"label":"2026-04-30","unique_clicks":2103,"converted_leads":118,"event_leads":9,"total_revenue_payout":4724,"total_cpa":3415,"total_profit":1309}],"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}}}}}}}}},"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.","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}}],"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}]},"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}],"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}}}}}}}}},"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 zeroed for non-payable\nstatuses. Conversion fields are null when the conversion did not carry\nthat value.\n\n**The `lifecycle` block**\n\nThe same postback\/pixel history the dashboard's eye modal 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). 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},"conversion":{"order_id":"ORD-1001","order_total":"49.99","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..."},"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},"conversion":{"order_id":"ORD-1001","order_total":"49.99","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..."},"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}}},"conversion":{"type":"object","properties":{"order_id":{"type":"string","example":"ORD-1001"},"order_total":{"type":"string","example":"49.99"},"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..."}}},"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.","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","created_at":"2026-04-20T12:00:00Z","is_rev_share":false,"is_cpc":false,"cpa":12.5,"revshare":null,"has_custom_rate":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":44,"name":"Publisher Accessible Campaign","category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","created_at":"2026-04-20T12:00:00Z","is_rev_share":false,"is_cpc":false,"cpa":12.5,"revshare":null,"has_custom_rate":false}],"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"},"created_at":{"type":"string","example":"2026-04-20T12:00:00Z"},"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},"has_custom_rate":{"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":["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-08-27T20:11:26","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-09-19","nullable":true},"sort":{"type":"string","description":"","example":"name","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.","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","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"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":9,"type":"campaign","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"created_at":"2026-05-01T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"campaign"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}"},"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},"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."}}}}}}},"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 |\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 (alias: `{TOTAL}`) |\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":"campaign","url":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}&s1={s1}","campaign_id":42,"campaign_name":"Spring Promo","event_id":null,"event_name":null,"conversion_type":"all","include_non_payable":false,"created_at":"2026-05-01T12:00:00Z"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":9},"type":{"type":"string","example":"campaign"},"url":{"type":"string","example":"https:\/\/tracker.example.com\/pb?cid={UID}&payout={CPA}&s1={s1}"},"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},"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":{"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. Must use HTTPS. 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}&payout={CPA}&s1={s1}"},"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}},"required":["type","url"]}}}}}},"\/api\/v1\/publisher\/postbacks\/{postback_id}":{"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\/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- `is_cpc` \u2014 whether the campaign pays per click.\n\nHonours restricted advertisers\/campaigns and private\/approval offer access.\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":"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,"has_custom_rate":true,"tracking_url":"https:\/\/track.example.com\/c\/abc123","click_url":"https:\/\/track.example.com\/c\/abc123","preview_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,"has_custom_rate":true,"tracking_url":"https:\/\/track.example.com\/c\/abc123","click_url":"https:\/\/track.example.com\/c\/abc123","preview_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},"has_custom_rate":{"type":"boolean","example":true},"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}}}},"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\/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. Any `publisher_id` query\nparameter is ignored; results are always scoped to the authenticated\npublisher.\n\nEach item includes a `conversion` block with the params captured at\nconversion time \u2014 `order_id`, `order_total`, the postback subids, and\ndevice \/ advertising identifiers (gclid, idfa, android_id, \u2026). Fields are\nnull when the conversion did not carry that value.\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). 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":"publisher_id","description":"","example":16,"required":false,"schema":{"type":"integer","description":"","example":16,"nullable":true}},{"in":"query","name":"advertiser_id","description":"","example":16,"required":false,"schema":{"type":"integer","description":"","example":16,"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,"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","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..."},"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,"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","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..."},"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},"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"},"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..."}}},"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`, `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":12,"name":"Advertiser Owned Campaign","advertiser_id":7,"category_id":3,"category_name":"Finance","offer_type":"public","status":"ACTIVE","payout":18,"created_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","payout":18,"created_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"},"payout":{"type":"number","example":18},"created_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-08-27T20:11:26","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-09-19","nullable":true},"sort":{"type":"string","description":"","example":"-id","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}}}}}}}}}}