{"openapi":"3.1.0","info":{"title":"Kevel (BYOK) API","version":"0.1.0","description":"Kevel (BYOK) lets an AI assistant read your own Kevel data through the Kevel API with a key you supply (Kevel API key). Read-only: 11 tools (list_advertisers, get_advertiser, list_campaigns, get_campaign, list_flights, get_flight, list_ads, list_creatives, list_sites, list_zones, list_channels). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-kevel.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-kevel/docs"},"termsOfService":"https://connectorbay.com/byok-kevel/terms"},"servers":[{"url":"https://byok-kevel.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-kevel/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_advertisers":{"post":{"operationId":"list_advertisers","summary":"List the advertisers of the Kevel network with active flag and frequency and spend cap settings. Use for \"Which advertis","description":"List the advertisers of the Kevel network with active flag and frequency and spend cap settings. Use for \"Which advertisers are set up in Kevel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (default set by Kevel; 100 is typical).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; an empty page means the end of the list.","title":"Page"}},"title":"list_advertisersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_advertiser":{"post":{"operationId":"get_advertiser","summary":"Get one advertiser: title, active flag, creation and modification time, caps and external id. Use for \"Show Kevel advert","description":"Get one advertiser: title, active flag, creation and modification time, caps and external id. Use for \"Show Kevel advertiser 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"advertiser_id":{"description":"Kevel advertiser id, from list_advertisers.","title":"Advertiser Id","type":"integer"}},"required":["advertiser_id"],"title":"get_advertiserArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_campaigns":{"post":{"operationId":"list_campaigns","summary":"List campaigns with advertiser, start date, price and active and archived flags; optionally for one advertiser. Use for ","description":"List campaigns with advertiser, start date, price and active and archived flags; optionally for one advertiser. Use for \"Which Kevel campaigns are active for advertiser 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (default set by Kevel; 100 is typical).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; an empty page means the end of the list.","title":"Page"},"advertiser_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only campaigns of this advertiser id.","title":"Advertiser Id"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only archived campaigns.","title":"Is Archived"}},"title":"list_campaignsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_campaign":{"post":{"operationId":"get_campaign","summary":"Get one campaign with its flights. Use for \"Show Kevel campaign 987\".","description":"Get one campaign with its flights. Use for \"Show Kevel campaign 987\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"campaign_id":{"description":"Kevel campaign id, from list_campaigns.","title":"Campaign Id","type":"integer"}},"required":["campaign_id"],"title":"get_campaignArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_flights":{"post":{"operationId":"list_flights","summary":"List flights of the network (the default is non-archived flights). Returns the full flight objects as documented by Keve","description":"List flights of the network (the default is non-archived flights). Returns the full flight objects as documented by Kevel. Use for \"Which Kevel flights are currently active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"enum":["not-archived","archived","active","inactive"],"type":"string"},{"type":"null"}],"default":null,"description":"Limit the flights: not-archived (default), archived, active or inactive.","title":"Filter"}},"title":"list_flightsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_flight":{"post":{"operationId":"get_flight","summary":"Get one flight: name, campaign, priority, goal and rate type, impression and spend caps, targeting and delivery status. ","description":"Get one flight: name, campaign, priority, goal and rate type, impression and spend caps, targeting and delivery status. Use for \"Show the targeting and caps of Kevel flight 555\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"flight_id":{"description":"Kevel flight id.","title":"Flight Id","type":"integer"},"exclude_ads":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to leave out the flight's ad objects.","title":"Exclude Ads"}},"required":["flight_id"],"title":"get_flightArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_ads":{"post":{"operationId":"list_ads","summary":"List the ads of the network with flight, campaign, site and zone, impression goal, dates and the creative reference. Use","description":"List the ads of the network with flight, campaign, site and zone, impression goal, dates and the creative reference. Use for \"Which ads run in Kevel flight 555\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (default set by Kevel; 100 is typical).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; an empty page means the end of the list.","title":"Page"}},"title":"list_adsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_creatives":{"post":{"operationId":"list_creatives","summary":"List the creatives of the network with title, advertiser, ad type, destination URL, image and active flag (scripts and H","description":"List the creatives of the network with title, advertiser, ad type, destination URL, image and active flag (scripts and HTML bodies are left out). Use for \"Which creatives does my Kevel network have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (default set by Kevel; 100 is typical).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; an empty page means the end of the list.","title":"Page"}},"title":"list_creativesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_sites":{"post":{"operationId":"list_sites","summary":"List the sites of the network. Returns the objects as documented by Kevel. Use for \"Which sites are configured in Kevel\"","description":"List the sites of the network. Returns the objects as documented by Kevel. Use for \"Which sites are configured in Kevel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (default set by Kevel; 100 is typical).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; an empty page means the end of the list.","title":"Page"}},"title":"list_sitesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_zones":{"post":{"operationId":"list_zones","summary":"List the ad zones of the network. Returns the objects as documented by Kevel. Use for \"Which ad zones exist in Kevel\".","description":"List the ad zones of the network. Returns the objects as documented by Kevel. Use for \"Which ad zones exist in Kevel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (default set by Kevel; 100 is typical).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; an empty page means the end of the list.","title":"Page"}},"title":"list_zonesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_channels":{"post":{"operationId":"list_channels","summary":"List the channels of the network. Returns the objects as documented by Kevel. Use for \"Which channels exist in Kevel\".","description":"List the channels of the network. Returns the objects as documented by Kevel. Use for \"Which channels exist in Kevel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (default set by Kevel; 100 is typical).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; an empty page means the end of the list.","title":"Page"}},"title":"list_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}