{"openapi":"3.1.0","info":{"title":"Have I Been Pwned (BYOK) API","version":"0.1.0","description":"Have I Been Pwned (BYOK) lets an AI assistant read your own Have I Been Pwned data through the Have I Been Pwned API with a key you supply (Have I Been Pwned API key). Read-only: 10 tools (get_breached_account, get_paste_account, get_breached_domain, list_subscribed_domains, get_stealer_logs_by_email, get_subscription_status, list_breaches, get_breach, get_latest_breach, list_data_classes). The...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-haveibeenpwned.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-haveibeenpwned/docs"},"termsOfService":"https://connectorbay.com/byok-haveibeenpwned/terms"},"servers":[{"url":"https://byok-haveibeenpwned.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-haveibeenpwned/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_breached_account":{"post":{"operationId":"get_breached_account","summary":"List the breaches an email address was found in. Returns breach names only unless truncate_response is false. A 404 mean","description":"List the breaches an email address was found in. Returns breach names only unless truncate_response is false. A 404 means the address is in no known breach. Needs a paid key. Use for \"Has the email address test@example.com been in a data breach\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email":{"description":"Email address (or account name) to look up, for example 'test@example.com'.","maxLength":254,"title":"Email","type":"string"},"truncate_response":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"False returns the full breach details; the default returns only the breach names.","title":"Truncate Response"},"domain":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Only breaches of this domain (for example 'adobe.com').","title":"Domain"},"include_unverified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to include unverified breaches (the API default is true).","title":"Include Unverified"}},"required":["email"],"title":"get_breached_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/get_paste_account":{"post":{"operationId":"get_paste_account","summary":"List the pastes (for example on Pastebin) in which an email address appeared: source, ID, title, date and number of addr","description":"List the pastes (for example on Pastebin) in which an email address appeared: source, ID, title, date and number of addresses in the paste. Needs a paid key. Use for \"Has test@example.com appeared in any pastes\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email":{"description":"Email address (or account name) to look up, for example 'test@example.com'.","maxLength":254,"title":"Email","type":"string"}},"required":["email"],"title":"get_paste_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/get_breached_domain":{"post":{"operationId":"get_breached_domain","summary":"List every email alias on a verified domain together with the breaches it appears in. Only for domains verified on your ","description":"List every email alias on a verified domain together with the breaches it appears in. Only for domains verified on your account; needs a Core or Pro key. Use for \"Which accounts at my verified domain example.com appear in breaches\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name, for example 'example.com'. For the keyed domain endpoints it must be a domain verified on your Have I Been Pwned account.","maxLength":253,"title":"Domain","type":"string"}},"required":["domain"],"title":"get_breached_domainArguments","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_subscribed_domains":{"post":{"operationId":"list_subscribed_domains","summary":"List the domains verified on your Have I Been Pwned account with the number of breached addresses and the next renewal d","description":"List the domains verified on your Have I Been Pwned account with the number of breached addresses and the next renewal date. Needs a Core or Pro key. Use for \"Which domains are verified on my Have I Been Pwned account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_subscribed_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/get_stealer_logs_by_email":{"post":{"operationId":"get_stealer_logs_by_email","summary":"List the website domains for which an email address appears in stealer logs (credentials captured by malware). Needs a P","description":"List the website domains for which an email address appears in stealer logs (credentials captured by malware). Needs a Pro key. Use for \"In which stealer logs does test@example.com appear\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email":{"description":"Email address (or account name) to look up, for example 'test@example.com'.","maxLength":254,"title":"Email","type":"string"}},"required":["email"],"title":"get_stealer_logs_by_emailArguments","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_subscription_status":{"post":{"operationId":"get_subscription_status","summary":"Show the plan of the key: subscription name, expiry, requests per minute and which features it includes. Use for \"What H","description":"Show the plan of the key: subscription name, expiry, requests per minute and which features it includes. Use for \"What Have I Been Pwned plan is my key on and what is its rate limit\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_subscription_statusArguments","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_breaches":{"post":{"operationId":"list_breaches","summary":"List all breaches in the Have I Been Pwned catalogue (name, date, size, types of data), optionally for one domain. The f","description":"List all breaches in the Have I Been Pwned catalogue (name, date, size, types of data), optionally for one domain. The full catalogue is long, so filter by domain when possible. Use for \"Which breaches involved the domain adobe.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Only breaches of this domain.","title":"Domain"},"is_spam_list":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to list only spam lists, false to exclude them.","title":"Is Spam List"}},"title":"list_breachesArguments","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_breach":{"post":{"operationId":"get_breach","summary":"Get one breach by its name: description, dates, number of accounts and kinds of data exposed. Use for \"Tell me about the","description":"Get one breach by its name: description, dates, number of accounts and kinds of data exposed. Use for \"Tell me about the Adobe breach\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"Short breach name as in the catalogue, for example 'Adobe'.","maxLength":100,"title":"Name","type":"string"}},"required":["name"],"title":"get_breachArguments","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_latest_breach":{"post":{"operationId":"get_latest_breach","summary":"Get the breach most recently added to the catalogue. Use for \"What is the latest breach added to Have I Been Pwned\".","description":"Get the breach most recently added to the catalogue. Use for \"What is the latest breach added to Have I Been Pwned\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_latest_breachArguments","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_data_classes":{"post":{"operationId":"list_data_classes","summary":"List the names of all kinds of data (for example 'Email addresses', 'Passwords') that breaches in the catalogue can cont","description":"List the names of all kinds of data (for example 'Email addresses', 'Passwords') that breaches in the catalogue can contain. Use for \"What kinds of data can appear in a breach\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_data_classesArguments","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}}}}