{"openapi":"3.1.0","info":{"title":"Porkbun (BYOK) API","version":"0.1.0","description":"Porkbun (BYOK) lets an AI assistant read your own Porkbun data through the Porkbun API with a key you supply (API key). Read-only: 9 tools (check_credentials, list_domains, get_domain, get_nameservers, list_dns_records, get_dns_record, list_url_forwards, list_email_forwards, list_domain_transfers). The BYOK key travels with each request, is used for that one call only and is never stored, logged...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-porkbun.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-porkbun/docs"},"termsOfService":"https://connectorbay.com/byok-porkbun/terms"},"servers":[{"url":"https://byok-porkbun.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-porkbun/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/check_credentials":{"post":{"operationId":"check_credentials","summary":"Check that the key pair is valid and show the caller IP address and the permission scopes of the key. Changes nothing. U","description":"Check that the key pair is valid and show the caller IP address and the permission scopes of the key. Changes nothing. Use for \"Is my Porkbun API key valid and what scopes does it have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"check_credentialsArguments","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_domains":{"post":{"operationId":"list_domains","summary":"List the domains in the account with expiry date, auto-renew, WHOIS privacy and registrar lock flags. Returns up to 1000","description":"List the domains in the account with expiry date, auto-renew, WHOIS privacy and registrar lock flags. Returns up to 1000 domains per call; use start to page. Use for \"Which of my Porkbun domains expire in the next 60 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based offset for paging; each call returns up to 1000 domains.","title":"Start"},"name_contains":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only domains whose name contains this text (case-insensitive).","title":"Name Contains"},"expiring_within_days":{"anyOf":[{"maximum":3650,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only domains expiring within this many days.","title":"Expiring Within Days"},"auto_renew":{"anyOf":[{"enum":["yes","no"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by auto-renew setting: yes or no.","title":"Auto Renew"},"sort_name":{"anyOf":[{"enum":["domain","tld","create_date","expire_date"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field: domain, tld, create_date or expire_date (default expire_date).","title":"Sort Name"},"sort_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc (default asc).","title":"Sort Direction"}},"title":"list_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_domain":{"post":{"operationId":"get_domain","summary":"Get one domain of the account: status, creation and expiry dates, registrar lock, WHOIS privacy and auto-renew flags. Us","description":"Get one domain of the account: status, creation and expiry dates, registrar lock, WHOIS privacy and auto-renew flags. Use for \"When does example.com expire and is auto-renew on\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name registered in the account, for example 'example.com'.","maxLength":200,"title":"Domain","type":"string"}},"required":["domain"],"title":"get_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/get_nameservers":{"post":{"operationId":"get_nameservers","summary":"List the authoritative nameservers set for a domain. Use for \"Which nameservers does example.com use at Porkbun\".","description":"List the authoritative nameservers set for a domain. Use for \"Which nameservers does example.com use at Porkbun\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name registered in the account, for example 'example.com'.","maxLength":200,"title":"Domain","type":"string"}},"required":["domain"],"title":"get_nameserversArguments","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_dns_records":{"post":{"operationId":"list_dns_records","summary":"List all DNS records of a domain hosted on Porkbun with id, name, type, content, TTL, priority and notes. Use for \"Show ","description":"List all DNS records of a domain hosted on Porkbun with id, name, type, content, TTL, priority and notes. Use for \"Show the DNS records of example.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name registered in the account, for example 'example.com'.","maxLength":200,"title":"Domain","type":"string"}},"required":["domain"],"title":"list_dns_recordsArguments","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_dns_record":{"post":{"operationId":"get_dns_record","summary":"Get one DNS record of a domain by its record id (ids come from list_dns_records). Use for \"Show DNS record 106926659 of ","description":"Get one DNS record of a domain by its record id (ids come from list_dns_records). Use for \"Show DNS record 106926659 of example.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name registered in the account, for example 'example.com'.","maxLength":200,"title":"Domain","type":"string"},"record_id":{"description":"Numeric DNS record id as returned by list_dns_records.","maxLength":200,"title":"Record Id","type":"string"}},"required":["domain","record_id"],"title":"get_dns_recordArguments","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_url_forwards":{"post":{"operationId":"list_url_forwards","summary":"List the URL forwarding rules of a domain with subdomain, target, redirect type and wildcard flags. Use for \"Does exampl","description":"List the URL forwarding rules of a domain with subdomain, target, redirect type and wildcard flags. Use for \"Does example.com have any URL forwards\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name registered in the account, for example 'example.com'.","maxLength":200,"title":"Domain","type":"string"}},"required":["domain"],"title":"list_url_forwardsArguments","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_forwards":{"post":{"operationId":"list_email_forwards","summary":"List the email forwarding addresses of a domain with target address, creation time and the plan limit. Use for \"Which em","description":"List the email forwarding addresses of a domain with target address, creation time and the plan limit. Use for \"Which email forwards exist on example.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Domain name registered in the account, for example 'example.com'.","maxLength":200,"title":"Domain","type":"string"}},"required":["domain"],"title":"list_email_forwardsArguments","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_domain_transfers":{"post":{"operationId":"list_domain_transfers","summary":"List active inbound domain transfers (completed and cancelled ones are not included) with status and transfer date. Use ","description":"List active inbound domain transfers (completed and cancelled ones are not included) with status and transfer date. Use for \"Are any of my domain transfers to Porkbun still pending\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_domain_transfersArguments","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}}}}