{"openapi":"3.1.0","info":{"title":"Outseta (BYOK) API","version":"0.1.0","description":"Outseta (BYOK) lets an AI assistant read your own Outseta data through the Outseta API with a key you supply (Outseta API key and secret joined by a colon (API_KEY:API_SECRET)). Read-only: 12 tools (list_plans, list_plan_families, list_subscriptions, list_invoices, list_discount_coupons, list_email_lists, list_drip_campaigns, list_broadcast_campaigns, list_support_articles,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-outseta.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-outseta/docs"},"termsOfService":"https://connectorbay.com/byok-outseta/terms"},"servers":[{"url":"https://byok-outseta.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-outseta/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_plans":{"post":{"operationId":"list_plans","summary":"List billing plans with monthly, quarterly and annual rates, setup fee, trial days, active flag and number of subscripti","description":"List billing plans with monthly, quarterly and annual rates, setup fee, trial days, active flag and number of subscriptions. Use for \"What plans and prices do we have in Outseta\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_plansArguments","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_plan_families":{"post":{"operationId":"list_plan_families","summary":"List plan families (groups of plans) with name, active and default flags. Use for \"Which plan families exist in Outseta\"","description":"List plan families (groups of plans) with name, active and default flags. Use for \"Which plan families exist in Outseta\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_plan_familiesArguments","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_subscriptions":{"post":{"operationId":"list_subscriptions","summary":"List subscriptions with dates, quantity, rate, discount code and whether a plan upgrade is required. Filter by lifecycle","description":"List subscriptions with dates, quantity, rate, discount code and whether a plan upgrade is required. Filter by lifecycle (current, future, past). Use for \"How many current subscriptions does Outseta show and when do they renew\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"status":{"anyOf":[{"enum":["current","future","past"],"type":"string"},{"type":"null"}],"default":null,"description":"Lifecycle filter: current, future or past.","title":"Status"},"current":{"anyOf":[{"enum":["0","1"],"type":"string"},{"type":"null"}],"default":null,"description":"Pass 1 to return only the most recent subscription per account.","title":"Current"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_subscriptionsArguments","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_invoices":{"post":{"operationId":"list_invoices","summary":"List invoices with number, date, status code, amounts (subtotal, tax, discount, paid, refunded, outstanding) and taxable","description":"List invoices with number, date, status code, amounts (subtotal, tax, discount, paid, refunded, outstanding) and taxable flag. Use for \"What invoices are outstanding in Outseta\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_invoicesArguments","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_discount_coupons":{"post":{"operationId":"list_discount_coupons","summary":"List discount coupons with name, amount or percent off, duration, redemptions and the redeem-by date. Use for \"What disc","description":"List discount coupons with name, amount or percent off, duration, redemptions and the redeem-by date. Use for \"What discount coupons exist in Outseta and how often were they used\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"can_redeem":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only coupons that can still be redeemed.","title":"Can Redeem"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search coupons by name or code.","title":"Q"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_discount_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/list_email_lists":{"post":{"operationId":"list_email_lists","summary":"List email lists with double opt-in flag and subscriber counts (active, unsubscribed, bounced, spam, not confirmed). Use","description":"List email lists with double opt-in flag and subscriber counts (active, unsubscribed, bounced, spam, not confirmed). Use for \"How many active subscribers do our Outseta email lists have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_email_listsArguments","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_drip_campaigns":{"post":{"operationId":"list_drip_campaigns","summary":"List drip (automated email) campaigns with active flag, trigger id and repeat-processing settings. Use for \"Which automa","description":"List drip (automated email) campaigns with active flag, trigger id and repeat-processing settings. Use for \"Which automated email drip campaigns are active in Outseta\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_drip_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/list_broadcast_campaigns":{"post":{"operationId":"list_broadcast_campaigns","summary":"List email broadcasts (archived ones are excluded) with send time, status code and any error message. Use for \"When are ","description":"List email broadcasts (archived ones are excluded) with send time, status code and any error message. Use for \"When are our Outseta email broadcasts scheduled and did they send\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_broadcast_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/list_support_articles":{"post":{"operationId":"list_support_articles","summary":"List knowledge base articles with title, keywords and ordering weight; search by title or body text. Use for \"Which help","description":"List knowledge base articles with title, keywords and ordering weight; search by title or body text. Use for \"Which help articles mention billing in our Outseta knowledge base\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"q":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Match on article title or body.","title":"Q"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_support_articlesArguments","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_support_categories":{"post":{"operationId":"list_support_categories","summary":"List knowledge base categories with description and ordering weight. Use for \"What knowledge base categories do we have ","description":"List knowledge base categories with description and ordering weight. Use for \"What knowledge base categories do we have in Outseta\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"title":"list_support_categoriesArguments","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 for one record type (for example Account, Person, Deal, Article) with colour. Use for \"What tags are used on O","description":"List tags for one record type (for example Account, Person, Deal, Article) with colour. Use for \"What tags are used on Outseta accounts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"entity_type":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Record type whose tags to list, by name, for example Account, Person, Deal or Article.","title":"Entity Type"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain"],"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_custom_attribute_definitions":{"post":{"operationId":"list_custom_attribute_definitions","summary":"List the custom fields defined for one record type (Account, Person or Deal) with label, control type and position. Use ","description":"List the custom fields defined for one record type (Account, Person or Deal) with label, control type and position. Use for \"Which custom fields exist on Outseta accounts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Outseta subdomain, the part before .outseta.com in your admin URL.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"entity_type":{"description":"Record type: Account, Person or Deal.","enum":["Account","Person","Deal"],"title":"Entity Type","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Items per page (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number, not a record offset: with limit=50, offset=1 returns records 51 to 100.","title":"Offset"}},"required":["subdomain","entity_type"],"title":"list_custom_attribute_definitionsArguments","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}}}}