{"openapi":"3.1.0","info":{"title":"Kit (BYOK) API","version":"0.1.0","description":"Kit (BYOK) lets an AI assistant read your own Kit data through the Kit API with a key you supply (v4 API key). Read-only: 8 tools (get_account, list_subscribers, list_tags, list_tag_subscribers, list_sequences, list_broadcasts, list_forms, list_custom_fields). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-kit.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-kit/docs"},"termsOfService":"https://connectorbay.com/byok-kit/terms"},"servers":[{"url":"https://byok-kit.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-kit/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/get_account":{"post":{"operationId":"get_account","summary":"Show the Kit account the key belongs to: account name, plan, subscriber limit, trial and renewal dates, time zone and lo","description":"Show the Kit account the key belongs to: account name, plan, subscriber limit, trial and renewal dates, time zone and login email. Use for \"Which Kit account is my key connected to and what plan is it on\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_accountArguments","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_subscribers":{"post":{"operationId":"list_subscribers","summary":"List subscribers with name, email, state and signup date, newest or oldest first. Filter by state, signup or update date","description":"List subscribers with name, email, state and signup date, newest or oldest first. Filter by state, signup or update dates, or an exact email address; page with a cursor. Use for \"Show my newest active Kit subscribers\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["active","inactive","bounced","complained","cancelled","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Subscriber state: active, inactive, bounced, complained, cancelled or all (Kit's default is active).","title":"Status"},"email_address":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Look up one subscriber by exact email address.","title":"Email Address"},"created_after":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only subscribers created after this day. Date as yyyy-mm-dd.","title":"Created After"},"created_before":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only subscribers created before this day. Date as yyyy-mm-dd.","title":"Created Before"},"sort_field":{"anyOf":[{"enum":["id","created_at","updated_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id, created_at or updated_at (Kit's default is id).","title":"Sort Field"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc.","title":"Sort Order"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass pagination.end_cursor from the previous answer to get the next page (leave empty for the first page).","title":"After"}},"title":"list_subscribersArguments","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_tags":{"post":{"operationId":"list_tags","summary":"List tags with their IDs and creation dates, optionally with the count of active subscribers per tag. Use for \"What tags","description":"List tags with their IDs and creation dates, optionally with the count of active subscribers per tag. Use for \"What tags do I use in Kit and how many subscribers have each\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"include":{"anyOf":[{"const":"subscriber_count","type":"string"},{"type":"null"}],"default":null,"description":"Set to subscriber_count to add the count of active subscribers to each tag.","title":"Include"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass pagination.end_cursor from the previous answer to get the next page (leave empty for the first page).","title":"After"}},"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/list_tag_subscribers":{"post":{"operationId":"list_tag_subscribers","summary":"List the subscribers carrying one tag with name, email, state and signup and tagging dates. Use for \"Who has Kit tag 5\".","description":"List the subscribers carrying one tag with name, email, state and signup and tagging dates. Use for \"Who has Kit tag 5\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tag_id":{"description":"ID of the tag (from list_tags).","title":"Tag Id","type":"integer"},"status":{"anyOf":[{"enum":["active","inactive","bounced","complained","cancelled","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Subscriber state: active, inactive, bounced, complained, cancelled or all (Kit's default is active).","title":"Status"},"tagged_after":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only subscribers tagged after this day. Date as yyyy-mm-dd.","title":"Tagged After"},"tagged_before":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only subscribers tagged before this day. Date as yyyy-mm-dd.","title":"Tagged Before"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass pagination.end_cursor from the previous answer to get the next page (leave empty for the first page).","title":"After"}},"required":["tag_id"],"title":"list_tag_subscribersArguments","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_sequences":{"post":{"operationId":"list_sequences","summary":"List email sequences with name, active flag, email count and subscriber count, optionally with open, click and unsubscri","description":"List email sequences with name, active flag, email count and subscriber count, optionally with open, click and unsubscribe statistics. Use for \"How are my Kit email sequences doing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"include":{"anyOf":[{"const":"stats","type":"string"},{"type":"null"}],"default":null,"description":"Set to stats to add open, click, bounce and unsubscribe statistics to each sequence.","title":"Include"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass pagination.end_cursor from the previous answer to get the next page (leave empty for the first page).","title":"After"}},"title":"list_sequencesArguments","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_broadcasts":{"post":{"operationId":"list_broadcasts","summary":"List email broadcasts with subject, status, public flag, send and publish dates and public URL (the body is left out). F","description":"List email broadcasts with subject, status, public flag, send and publish dates and public URL (the body is left out). Filter by status or send date. Only reads; never sends. Use for \"What Kit broadcasts did I send recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["draft","scheduled","sending","completed","aborted"],"type":"string"},{"type":"null"}],"default":null,"description":"Broadcast status: draft, scheduled, sending, completed or aborted.","title":"Status"},"sent_after":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only broadcasts sent after this day. Date as yyyy-mm-dd.","title":"Sent After"},"sent_before":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only broadcasts sent before this day. Date as yyyy-mm-dd.","title":"Sent Before"},"slim":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to leave out heavy fields such as the content.","title":"Slim"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass pagination.end_cursor from the previous answer to get the next page (leave empty for the first page).","title":"After"}},"title":"list_broadcastsArguments","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_forms":{"post":{"operationId":"list_forms","summary":"List forms and landing pages with name, type, archived flag and creation date, optionally with subscriber counts. Use fo","description":"List forms and landing pages with name, type, archived flag and creation date, optionally with subscriber counts. Use for \"Which Kit forms do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["active","archived","trashed","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Form status: active, archived, trashed or all (Kit's default is active).","title":"Status"},"type":{"anyOf":[{"enum":["embed","hosted"],"type":"string"},{"type":"null"}],"default":null,"description":"embed for embedded forms, hosted for landing pages.","title":"Type"},"include":{"anyOf":[{"const":"subscriber_count","type":"string"},{"type":"null"}],"default":null,"description":"Set to subscriber_count to add the subscriber count to each form.","title":"Include"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass pagination.end_cursor from the previous answer to get the next page (leave empty for the first page).","title":"After"}},"title":"list_formsArguments","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_custom_fields":{"post":{"operationId":"list_custom_fields","summary":"List custom subscriber fields with their ID, name, key and label. Use for \"What custom subscriber fields are defined in ","description":"List custom subscriber fields with their ID, name, key and label. Use for \"What custom subscriber fields are defined in Kit\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass pagination.end_cursor from the previous answer to get the next page (leave empty for the first page).","title":"After"}},"title":"list_custom_fieldsArguments","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}}}}