{"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## 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.0.0"},"servers":[{"url":"https:\/\/api.clickgotrack.com"}],"tags":[{"name":"Account","description":""},{"name":"Publishers","description":""},{"name":"Campaigns","description":""},{"name":"Advertisers","description":""},{"name":"Creatives","description":""},{"name":"Reporting","description":""},{"name":"Publisher Campaigns","description":""},{"name":"Advertiser Campaigns","description":""},{"name":"Managers","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","Campaigns","Advertisers","Creatives","Managers","Reporting"]},{"name":"Publisher APIs","tags":["Publisher Campaigns"]},{"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,"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,"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},"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-05-13T02:32:46","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-06-05","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,"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},"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":{"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. The <code>id<\/code> of an existing record in the users table.","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":null,"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,"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},"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.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":12,"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},"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":{"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`.","example":"APPROVED","enum":["approved","denied","terminated","pending"]},"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. The <code>id<\/code> of an existing record in the users table.","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\/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 public ID.","example":7,"required":false,"schema":{"type":"integer","description":"Filter by parent advertiser public 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,"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,"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},"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-05-13T02:32:46","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-06-05","nullable":true},"sort":{"type":"string","description":"","example":"status","enum":["id","-id","name","-name","status","-status","cpa","-cpa","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true}}}}}}},"post":{"summary":"Create Campaign","operationId":"createCampaign","description":"Creates a new campaign in your network. All foreign-key fields\n(`advertiser_id`, `category_id`) accept IDs and are\nvalidated against your tenant. Advanced redirect routing (geo, device,\nOS, cap, expiration redirects) and country\/private-offer assignment must\nbe configured in the web UI; only the core campaign fields are exposed\nhere for now.","parameters":[],"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":101,"name":"Spring Promo 2026","advertiser_id":7,"offer_type":"public","status":"ACTIVE","cpa":12.5,"payout":18,"is_rev_share":false,"is_incentive":false,"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},"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},"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 be a valid 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.","example":null,"nullable":true},"converts_on":{"type":"string","description":"What action triggers a conversion.","example":null,"nullable":true},"converts_on_other":{"type":"string","description":"","example":"architecto","nullable":true},"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},"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 expiration date (ISO 8601). Must be a valid date.","example":null,"nullable":true},"device":{"type":"string","description":"Must not be greater than 32 characters.","example":"n","nullable":true},"os":{"type":"array","description":"Must not be greater than 32 characters.","example":["g"],"items":{"type":"string"}},"block_proxies":{"type":"boolean","description":"Block proxy\/VPN traffic.","example":false,"nullable":true},"proxy_tolerance":{"type":"string","description":"Proxy tolerance level. Allowed: `standard`, `strict`, `relaxed`.","example":"standard","enum":["standard","strict","relaxed"],"nullable":true},"enable_container":{"type":"boolean","description":"Enable container tracking.","example":true,"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,"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,"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},"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},"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\nfields you include in the body are updated. All foreign-key fields\naccept IDs.","parameters":[],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"data":{"id":42,"name":"Spring Promo 2026 (updated)","advertiser_id":7,"offer_type":"public","status":"ACTIVE","cpa":13,"payout":18.5}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":42},"name":{"type":"string","example":"Spring Promo 2026 (updated)"},"advertiser_id":{"type":"integer","example":7},"offer_type":{"type":"string","example":"public"},"status":{"type":"string","example":"ACTIVE"},"cpa":{"type":"number","example":13},"payout":{"type":"number","example":18.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."}}}}}},"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 be a valid 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":"","example":"architecto","nullable":true},"converts_on_other":{"type":"string","description":"","example":"architecto","nullable":true},"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},"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":"Optional expiration date (ISO 8601). Must be a valid date.","example":null,"nullable":true},"status":{"type":"string","description":"Campaign status. Allowed: `ACTIVE`, `EXPIRING`, `EXPIRED`.","example":"ACTIVE","enum":["ACTIVE","EXPIRING","EXPIRED"],"nullable":true},"device":{"type":"string","description":"Must not be greater than 32 characters.","example":"n","nullable":true},"os":{"type":"array","description":"Must not be greater than 32 characters.","example":["g"],"items":{"type":"string"}},"block_proxies":{"type":"boolean","description":"Block proxy\/VPN traffic.","example":false,"nullable":true},"proxy_tolerance":{"type":"string","description":"Proxy tolerance level. Allowed: `standard`, `strict`, `relaxed`.","example":"standard","enum":["standard","strict","relaxed"],"nullable":true},"enable_container":{"type":"boolean","description":"Enable container tracking.","example":true,"nullable":true}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the campaign.","example":42,"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-05-13T02:32:46","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-06-05","nullable":true},"sort":{"type":"string","description":"","example":"email","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":{"message":"Unauthenticated."},"properties":{"message":{"type":"string","example":"Unauthenticated."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Forbidden."},"properties":{"message":{"type":"string","example":"Forbidden."}}}}}},"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. The <code>id<\/code> of an existing record in the users table.","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.","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. The <code>id<\/code> of an existing record in the users table.","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\/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 public ID.","example":12,"required":false,"schema":{"type":"integer","description":"Filter by parent campaign public 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":{"message":"Unauthenticated."},"properties":{"message":{"type":"string","example":"Unauthenticated."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Forbidden."},"properties":{"message":{"type":"string","example":"Forbidden."}}}}}},"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"],"nullable":true},"is_active":{"type":"boolean","description":"","example":false,"nullable":true},"created_after":{"type":"string","description":"Must be a valid date.","example":"2026-05-13T02:32:46","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-06-05","nullable":true},"sort":{"type":"string","description":"","example":"-created_at","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.","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":{"message":"Unauthenticated."},"properties":{"message":{"type":"string","example":"Unauthenticated."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Forbidden."},"properties":{"message":{"type":"string","example":"Forbidden."}}}}}},"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 50 characters.","example":"Spring Banner 728x90"},"destination_url":{"type":"string","description":"Final landing URL the creative will direct traffic to. Must be a valid URL. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/landing"},"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}},"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.","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 50 characters.","example":"Spring Banner v2"},"destination_url":{"type":"string","description":"Final landing URL. Must be a valid URL. Must not be greater than 2048 characters.","example":"https:\/\/advertiser.example.com\/spring-v2"},"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}}}}}}},"parameters":[{"in":"path","name":"id","description":"The ID of the creative.","example":7,"required":true,"schema":{"type":"integer"}}]},"\/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 (public ID).","example":42,"required":false,"schema":{"type":"integer","description":"Restrict the report to a single campaign (public ID).","example":42,"nullable":true}},{"in":"query","name":"publisher_id","description":"Restrict the report to a single publisher (public ID).","example":15,"required":false,"schema":{"type":"integer","description":"Restrict the report to a single publisher (public ID).","example":15,"nullable":true}},{"in":"query","name":"advertiser_id","description":"Restrict the report to a single advertiser (public ID).","example":7,"required":false,"schema":{"type":"integer","description":"Restrict the report to a single advertiser (public 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":{"message":"Unauthenticated."},"properties":{"message":{"type":"string","example":"Unauthenticated."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Forbidden."},"properties":{"message":{"type":"string","example":"Forbidden."}}}}}},"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,"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,"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},"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":{"message":"Unauthenticated."},"properties":{"message":{"type":"string","example":"Unauthenticated."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Forbidden."},"properties":{"message":{"type":"string","example":"Forbidden."}}}}}}},"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. Throttled and 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,"ip_country_code":"US","ip_region_name":"California","device":"desktop","os":"macos","is_blocked":false,"is_throttled":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,"ip_country_code":"US","ip_region_name":"California","device":"desktop","os":"macos","is_blocked":false,"is_throttled":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},"ip_country_code":{"type":"string","example":"US"},"ip_region_name":{"type":"string","example":"California"},"device":{"type":"string","example":"desktop"},"os":{"type":"string","example":"macos"},"is_blocked":{"type":"boolean","example":false},"is_throttled":{"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":{"message":"Unauthenticated."},"properties":{"message":{"type":"string","example":"Unauthenticated."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Forbidden."},"properties":{"message":{"type":"string","example":"Forbidden."}}}}}}},"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":{"message":"Unauthenticated."},"properties":{"message":{"type":"string","example":"Unauthenticated."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Forbidden."},"properties":{"message":{"type":"string","example":"Forbidden."}}}}}}},"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":{"message":"Unauthenticated."},"properties":{"message":{"type":"string","example":"Unauthenticated."}}}}}},"403":{"description":"","content":{"application\/json":{"schema":{"type":"object","example":{"message":"Forbidden."},"properties":{"message":{"type":"string","example":"Forbidden."}}}}}}},"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.","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","advertiser_id":7,"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":44,"name":"Publisher Accessible Campaign","advertiser_id":7,"offer_type":"public","status":"ACTIVE","payout":18,"created_at":"2026-04-20T12:00:00Z"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":44},"name":{"type":"string","example":"Publisher Accessible Campaign"},"advertiser_id":{"type":"integer","example":7},"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":["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-05-13T02:32:46","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-06-05","nullable":true},"sort":{"type":"string","description":"","example":"-created_at","enum":["id","-id","name","-name","created_at","-created_at"],"nullable":true},"per_page":{"type":"integer","description":"Must be at least 1. Must not be greater than 100.","example":22,"nullable":true}}}}}}}},"\/api\/v1\/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,"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,"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},"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-05-13T02:32:46","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-06-05","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}}}}}}}},"\/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":"-email","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}}}}}}}}}}