{"openapi":"3.1.0","info":{"title":"Klaviyo Tags (BYOK) API","version":"0.1.0","description":"Klaviyo Tags (BYOK) lets an AI assistant read your own Klaviyo Tags data through the Klaviyo Tags API with a key you supply (private API key (starts with pk_)). Read-only: 7 tools (list_tags, get_tag, list_tag_groups, get_tag_group, list_coupons, get_coupon, list_web_feeds). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-klaviyo-tags-coupons.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-klaviyo-tags-coupons/docs"},"termsOfService":"https://connectorbay.com/byok-klaviyo-tags-coupons/terms"},"servers":[{"url":"https://byok-klaviyo-tags-coupons.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-klaviyo-tags-coupons/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_tags":{"post":{"operationId":"list_tags","summary":"List tags used to organize campaigns, flows, lists and segments, at most 50 per page. Needs the tags:read scope. Use for","description":"List tags used to organize campaigns, flows, lists and segments, at most 50 per page. Needs the tags:read scope. Use for \"Which tags do I use in Klaviyo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter on name (contains, ends-with, equals, starts-with), for example contains(name,\"sale\").","title":"Filter"},"sort":{"anyOf":[{"enum":["id","-id","name","-name"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field; prefix with - for descending. One of: id, name.","title":"Sort"},"page_size":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 50).","title":"Page Size"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: take the page[cursor] value from the query string of links.next in the previous answer; leave empty for the first page.","title":"Cursor"}},"title":"list_tagsArguments","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_tag":{"post":{"operationId":"get_tag","summary":"Get one tag by ID with its name. Use for \"What is the name of Klaviyo tag T1\".","description":"Get one tag by ID with its name. Use for \"What is the name of Klaviyo tag T1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"ID of the tag.","maxLength":120,"title":"Id","type":"string"}},"required":["id"],"title":"get_tagArguments","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_tag_groups":{"post":{"operationId":"list_tag_groups","summary":"List tag groups with name, whether tags in the group are mutually exclusive and whether it is the default group, at most","description":"List tag groups with name, whether tags in the group are mutually exclusive and whether it is the default group, at most 25 per page. Use for \"Which tag groups exist in Klaviyo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter. Fields: name (contains, ends-with, equals, starts-with), exclusive (equals), default (equals).","title":"Filter"},"sort":{"anyOf":[{"enum":["id","-id","name","-name"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field; prefix with - for descending. One of: id, name.","title":"Sort"},"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 25).","title":"Page Size"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: take the page[cursor] value from the query string of links.next in the previous answer; leave empty for the first page.","title":"Cursor"}},"title":"list_tag_groupsArguments","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_tag_group":{"post":{"operationId":"get_tag_group","summary":"Get one tag group by ID with its name, exclusivity and default flag. Use for \"Is the Klaviyo tag group G1 exclusive\".","description":"Get one tag group by ID with its name, exclusivity and default flag. Use for \"Is the Klaviyo tag group G1 exclusive\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"ID of the tag group.","maxLength":120,"title":"Id","type":"string"}},"required":["id"],"title":"get_tag_groupArguments","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_coupons":{"post":{"operationId":"list_coupons","summary":"List coupons with external ID, description and the low-balance monitoring and code reassignment settings, at most 100 pe","description":"List coupons with external ID, description and the low-balance monitoring and code reassignment settings, at most 100 per page. Individual coupon codes are not returned. Needs the coupons:read scope. Use for \"Which coupons are set up in Klaviyo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Page Size"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: take the page[cursor] value from the query string of links.next in the previous answer; leave empty for the first page.","title":"Cursor"}},"title":"list_couponsArguments","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_coupon":{"post":{"operationId":"get_coupon","summary":"Get one coupon by ID with external ID, description and its monitoring and reassignment settings (coupon codes are not re","description":"Get one coupon by ID with external ID, description and its monitoring and reassignment settings (coupon codes are not returned). Use for \"How is the Klaviyo coupon SPRING10 configured\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"ID of the coupon.","maxLength":120,"title":"Id","type":"string"}},"required":["id"],"title":"get_couponArguments","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_web_feeds":{"post":{"operationId":"list_web_feeds","summary":"List web feeds (external data sources used in templates) with name, request method, content type, refresh status and dat","description":"List web feeds (external data sources used in templates) with name, request method, content type, refresh status and dates, at most 20 per page. The feed URL is not returned. Needs the web-feeds:read scope. Use for \"Are my Klaviyo web feeds refreshing without errors\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter. Fields: name (any, contains, equals), created and updated (comparison operators).","title":"Filter"},"sort":{"anyOf":[{"enum":["created","-created","name","-name","updated","-updated"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field; prefix with - for descending. One of: created, name, updated.","title":"Sort"},"page_size":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"How many results to return (1 to 20).","title":"Page Size"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: take the page[cursor] value from the query string of links.next in the previous answer; leave empty for the first page.","title":"Cursor"}},"title":"list_web_feedsArguments","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}}}}