{"openapi":"3.1.0","info":{"title":"Paddle Events (BYOK) API","version":"0.1.0","description":"Paddle Events (BYOK) lets an AI assistant read your own Paddle Events data through the Paddle Events 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: 6 tools (list_event_types, list_events, list_notification_settings, list_notifications, list_notification_logs, get_paddle_ip_addresses). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-paddle-events.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-paddle-events/docs"},"termsOfService":"https://connectorbay.com/byok-paddle-events/terms"},"servers":[{"url":"https://byok-paddle-events.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-paddle-events/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_event_types":{"post":{"operationId":"list_event_types","summary":"List the Paddle event types you can subscribe to (such as subscription.created), with group and available API versions. ","description":"List the Paddle event types you can subscribe to (such as subscription.created), with group and available API versions. Use for \"Which event types can a Paddle notification destination subscribe to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_event_typesArguments","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_events":{"post":{"operationId":"list_events","summary":"List events that happened in your Paddle account, newest first, with event id, type and time. The event payload (custome","description":"List events that happened in your Paddle account, newest first, with event id, type and time. The event payload (customer data) is not returned. Use for \"What events did my Paddle account generate lately\".","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_eventsArguments","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_notification_settings":{"post":{"operationId":"list_notification_settings","summary":"List notification destinations (webhooks and email) with type, destination, active flag, subscribed events and API versi","description":"List notification destinations (webhooks and email) with type, destination, active flag, subscribed events and API version. Signing secrets are not returned. Use for \"Which Paddle notification destinations are active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active destinations only, false for inactive ones.","title":"Active"},"traffic_source":{"anyOf":[{"enum":["platform","simulation","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Only destinations that receive this traffic: platform, simulation or all.","title":"Traffic Source"},"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_notification_settingsArguments","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_notifications":{"post":{"operationId":"list_notifications","summary":"List notifications Paddle sent to your destinations with type, delivery status, attempts and times. Timestamps are RFC 3","description":"List notifications Paddle sent to your destinations with type, delivery status, attempts and times. Timestamps are RFC 3339. The payload is not returned. Use for \"Which Paddle webhook notifications failed to deliver\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated delivery statuses: delivered, failed, needs_retry, not_attempted.","title":"Status"},"notification_setting_id":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated destination ids to limit to.","title":"Notification Setting Id"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text matched against notification id and type.","title":"Search"},"from_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only notifications from this RFC 3339 time.","title":"From Time"},"to_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only notifications up to this RFC 3339 time.","title":"To Time"},"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_notificationsArguments","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_notification_logs":{"post":{"operationId":"list_notification_logs","summary":"List the delivery attempts of one Paddle notification with response code and time. Response bodies are not returned. Use","description":"List the delivery attempts of one Paddle notification with response code and time. Response bodies are not returned. Use for \"Why did Paddle notification ntf_01abc fail to deliver\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"notification_id":{"description":"Notification id, starting with ntf_.","maxLength":200,"title":"Notification Id","type":"string"},"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":["notification_id"],"title":"list_notification_logsArguments","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_paddle_ip_addresses":{"post":{"operationId":"get_paddle_ip_addresses","summary":"Get the IP address ranges Paddle sends webhooks from, to allow-list on your server. Use for \"Which IP addresses does Pad","description":"Get the IP address ranges Paddle sends webhooks from, to allow-list on your server. Use for \"Which IP addresses does Paddle send webhooks from\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_paddle_ip_addressesArguments","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}}}}