{"openapi":"3.1.0","info":{"title":"Paddle Discounts and Adjustments (BYOK) API","version":"0.1.0","description":"Paddle Discounts and Adjustments (BYOK) lets an AI assistant read your own Paddle Discounts and Adjustments data through the Paddle Discounts and Adjustments API with a key you supply (Paddle Billing API key (live environment; sandbox keys use a different host and do not work here)). Read-only: 7 tools (list_discounts, list_discount_groups, list_checkout_domains, list_adjustments,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-paddle-discounts-adjustments.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-paddle-discounts-adjustments/docs"},"termsOfService":"https://connectorbay.com/byok-paddle-discounts-adjustments/terms"},"servers":[{"url":"https://byok-paddle-discounts-adjustments.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-paddle-discounts-adjustments/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_discounts":{"post":{"operationId":"list_discounts","summary":"List Paddle discounts with code, type (flat, flat per seat, percentage), amount, usage limit, expiry and how often each ","description":"List Paddle discounts with code, type (flat, flat per seat, percentage), amount, usage limit, expiry and how often each was used. Amounts are strings in the smallest unit. Use for \"Which Paddle discount codes are active and how often were they used\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated statuses to include: active, archived.","title":"Status"},"code":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated discount codes to look up.","title":"Code"},"mode":{"anyOf":[{"enum":["standard","custom"],"type":"string"},{"type":"null"}],"default":null,"description":"Only standard or custom discounts.","title":"Mode"},"discount_group_id":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated discount group ids to limit to.","title":"Discount Group Id"},"order_by":{"anyOf":[{"enum":["id[ASC]","id[DESC]"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by id: 'id[ASC]' (oldest first) or 'id[DESC]' (newest first).","title":"Order By"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: the last id of the previous page (meta.pagination.next carries it). Leave empty for the first page.","title":"After"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 200).","title":"Per Page"}},"title":"list_discountsArguments","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_groups":{"post":{"operationId":"list_discount_groups","summary":"List the groups discounts are organized in, with name and status. Use for \"Which Paddle discount groups exist\".","description":"List the groups discounts are organized in, with name and status. Use for \"Which Paddle discount groups exist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order_by":{"anyOf":[{"enum":["id[ASC]","id[DESC]"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by id: 'id[ASC]' (oldest first) or 'id[DESC]' (newest first).","title":"Order By"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: the last id of the previous page (meta.pagination.next carries it). Leave empty for the first page.","title":"After"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 200).","title":"Per Page"}},"title":"list_discount_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/list_checkout_domains":{"post":{"operationId":"list_checkout_domains","summary":"List the domains approved to open Paddle checkouts, with verification status. Use for \"Which domains are approved for my","description":"List the domains approved to open Paddle checkouts, with verification status. Use for \"Which domains are approved for my Paddle checkout\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Only the entry for this domain name.","title":"Domain"},"status":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated statuses to include: pending_review, approved, rejected, in_review, action_required.","title":"Status"},"order_by":{"anyOf":[{"enum":["id[ASC]","id[DESC]"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by id: 'id[ASC]' (oldest first) or 'id[DESC]' (newest first).","title":"Order By"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: the last id of the previous page (meta.pagination.next carries it). Leave empty for the first page.","title":"After"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 200).","title":"Per Page"}},"title":"list_checkout_domainsArguments","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_adjustments":{"post":{"operationId":"list_adjustments","summary":"List adjustments to Paddle transactions (refunds, credits, chargebacks) with action, status, reason, currency and totals","description":"List adjustments to Paddle transactions (refunds, credits, chargebacks) with action, status, reason, currency and totals. Amounts are strings in the smallest unit. Use for \"Which refunds were issued on my Paddle account recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"action":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated actions: credit, refund, chargeback, chargeback_reverse, chargeback_warning, chargeback_warning_reverse, credit_reverse.","title":"Action"},"status":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated statuses: pending_approval, approved, rejected, reversed.","title":"Status"},"transaction_id":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated transaction ids to limit to.","title":"Transaction Id"},"subscription_id":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated subscription ids to limit to.","title":"Subscription Id"},"customer_id":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated customer ids to limit to.","title":"Customer Id"},"order_by":{"anyOf":[{"enum":["id[ASC]","id[DESC]"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by id: 'id[ASC]' (oldest first) or 'id[DESC]' (newest first).","title":"Order By"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: the last id of the previous page (meta.pagination.next carries it). Leave empty for the first page.","title":"After"},"per_page":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 50).","title":"Per Page"}},"title":"list_adjustmentsArguments","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_customer_credit_balances":{"post":{"operationId":"list_customer_credit_balances","summary":"List one customer's credit balances per currency (available, reserved and used). Use for \"How much credit does Paddle cu","description":"List one customer's credit balances per currency (available, reserved and used). Use for \"How much credit does Paddle customer ctm_01abc have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"customer_id":{"description":"Paddle customer id, starting with ctm_.","maxLength":200,"title":"Customer Id","type":"string"},"currency_code":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated currency codes to limit to, for example USD,EUR.","title":"Currency Code"}},"required":["customer_id"],"title":"list_customer_credit_balancesArguments","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_subscription_history":{"post":{"operationId":"list_subscription_history","summary":"List the change history of one Paddle subscription: when each change happened, its source, reason and who made it. Times","description":"List the change history of one Paddle subscription: when each change happened, its source, reason and who made it. Timestamps are RFC 3339. Use for \"What changes were made to Paddle subscription sub_01abc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Paddle subscription id, starting with sub_.","maxLength":200,"title":"Subscription Id","type":"string"},"source":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated sources to limit to, for example api,dashboard,checkout.","title":"Source"},"reason":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated reasons to limit to, for example customer_request,chargeback.","title":"Reason"},"order_by":{"anyOf":[{"enum":["id[ASC]","id[DESC]"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by id: 'id[ASC]' (oldest first) or 'id[DESC]' (newest first).","title":"Order By"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: the last id of the previous page (meta.pagination.next carries it). Leave empty for the first page.","title":"After"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 200).","title":"Per Page"}},"required":["subscription_id"],"title":"list_subscription_historyArguments","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_reports":{"post":{"operationId":"list_reports","summary":"List reports you requested in Paddle with type, status, and creation and expiry times. Download links are not returned. ","description":"List reports you requested in Paddle with type, status, and creation and expiry times. Download links are not returned. Use for \"Which Paddle reports have finished generating\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated statuses: pending, ready, failed, expired.","title":"Status"},"order_by":{"anyOf":[{"enum":["id[ASC]","id[DESC]"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by id: 'id[ASC]' (oldest first) or 'id[DESC]' (newest first).","title":"Order By"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: the last id of the previous page (meta.pagination.next carries it). Leave empty for the first page.","title":"After"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 200).","title":"Per Page"}},"title":"list_reportsArguments","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}}}}