{"openapi":"3.1.0","info":{"title":"Thanks io (BYOK) API","version":"0.1.0","description":"Thanks io (BYOK) lets an AI assistant read your own Thanks io data through the Thanks io API with a key you supply (thanks.io API key). Read-only: 10 tools (list_orders, track_order, list_mailing_lists, get_mailing_list, list_sub_accounts, list_image_templates, list_creatives, list_message_templates, list_webhooks, list_handwriting_styles). The BYOK key travels with each request, is used for that...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-thanksio.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-thanksio/docs"},"termsOfService":"https://connectorbay.com/byok-thanksio/terms"},"servers":[{"url":"https://byok-thanksio.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-thanksio/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_orders":{"post":{"operationId":"list_orders","summary":"List recent mail orders with mailer type, size, status, recipient counts, totals and scan count. Recipient addresses are","description":"List recent mail orders with mailer type, size, status, recipient counts, totals and scan count. Recipient addresses are not returned. Use for \"What is the status of my recent thanks.io orders\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return per page (default 25).","title":"Items Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"sub_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only records belonging to this sub-account id.","title":"Sub Account Id"},"type":{"anyOf":[{"enum":["postcard","postcard6x9","postcard6x11","letter","windowlessletter","notecard","giftcard","magnacard"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this mailer type; 'postcard' means the 4x6 size.","title":"Type"},"creative_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only orders sent with this creative id.","title":"Creative Id"},"campaign":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only orders sent by the campaign whose mailing list has this id.","title":"Campaign"}},"title":"list_ordersArguments","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/track_order":{"post":{"operationId":"track_order","summary":"Get an order's delivery summary: status and counts of printed, in transit, delivered, returned, failed and QR scans. Per","description":"Get an order's delivery summary: status and counts of printed, in transit, delivered, returned, failed and QR scans. Per-recipient errors are not returned. Use for \"How many mailers of thanks.io order 42708 were delivered\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order_id":{"description":"Numeric id of the order, from list_orders.","maxLength":200,"title":"Order Id","type":"string"}},"required":["order_id"],"title":"track_orderArguments","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_mailing_lists":{"post":{"operationId":"list_mailing_lists","summary":"List mailing lists with type, recipient count, QR scan totals, send totals and last send date. The recipients themselves","description":"List mailing lists with type, recipient count, QR scan totals, send totals and last send date. The recipients themselves are not returned. Use for \"Which thanks.io mailing lists do I have and how big are they\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return per page (default 25).","title":"Items Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_mailing_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/get_mailing_list":{"post":{"operationId":"get_mailing_list","summary":"Get one mailing list's type, recipient count, QR scan totals and send totals by id. Use for \"How many QR scans has thank","description":"Get one mailing list's type, recipient count, QR scan totals and send totals by id. Use for \"How many QR scans has thanks.io mailing list 3019 had\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"mailing_list_id":{"description":"Numeric id of the mailing list.","maxLength":200,"title":"Mailing List Id","type":"string"}},"required":["mailing_list_id"],"title":"get_mailing_listArguments","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_sub_accounts":{"post":{"operationId":"list_sub_accounts","summary":"List sub-accounts with title and return address city and state. Use for \"Which thanks.io sub-accounts do I have\".","description":"List sub-accounts with title and return address city and state. Use for \"Which thanks.io sub-accounts do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_sub_accountsArguments","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_image_templates":{"post":{"operationId":"list_image_templates","summary":"List image templates (the front design of a mailer) with type, name, preview image and dates. Use for \"Which postcard im","description":"List image templates (the front design of a mailer) with type, name, preview image and dates. Use for \"Which postcard image templates are in my thanks.io account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return per page (default 25).","title":"Items Per Page"},"sub_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only records belonging to this sub-account id.","title":"Sub Account Id"},"type":{"anyOf":[{"enum":["postcard","postcard6x9","postcard6x11","letter","windowlessletter","notecard","giftcard","magnacard"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this mailer type; 'postcard' means the 4x6 size.","title":"Type"}},"title":"list_image_templatesArguments","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 creatives in the library (an image template paired with a message template), 24 per page, with mailer type, size, c","description":"List creatives in the library (an image template paired with a message template), 24 per page, with mailer type, size, completeness and default flag. Use for \"Which complete postcard creatives can I send from thanks.io\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sub_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only records belonging to this sub-account id.","title":"Sub Account Id"},"mailer_type":{"anyOf":[{"enum":["postcard","postcard6x9","postcard6x11","letter","windowlessletter","notecard","giftcard","magnacard"],"type":"string"},{"type":"null"}],"default":null,"description":"Only creatives of this mailer type; 'postcard' means 4x6.","title":"Mailer Type"},"complete_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only creatives that have everything needed to send.","title":"Complete Only"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only creatives whose name contains this text.","title":"Search"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","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_message_templates":{"post":{"operationId":"list_message_templates","summary":"List message templates with type, name, handwriting style, font size and dates. Use for \"What message templates are save","description":"List message templates with type, name, handwriting style, font size and dates. Use for \"What message templates are saved in my thanks.io account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return per page (default 25).","title":"Items Per Page"},"sub_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only records belonging to this sub-account id.","title":"Sub Account Id"},"type":{"anyOf":[{"enum":["postcard","postcard6x9","postcard6x11","letter","windowlessletter","notecard","giftcard","magnacard"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this mailer type; 'postcard' means the 4x6 size.","title":"Type"}},"title":"list_message_templatesArguments","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_webhooks":{"post":{"operationId":"list_webhooks","summary":"List configured webhooks with event type, target URL, HTTP verb and invocation count (paid plans). Use for \"Which thanks","description":"List configured webhooks with event type, target URL, HTTP verb and invocation count (paid plans). Use for \"Which thanks.io webhooks are set up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return per page (default 25).","title":"Items Per Page"}},"title":"list_webhooksArguments","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_handwriting_styles":{"post":{"operationId":"list_handwriting_styles","summary":"List the handwriting styles available for mailers with id, name, type and a sample image. Use for \"What handwriting styl","description":"List the handwriting styles available for mailers with id, name, type and a sample image. Use for \"What handwriting styles does thanks.io offer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_handwriting_stylesArguments","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}}}}