{"openapi":"3.1.0","info":{"title":"DNSimple (BYOK) API","version":"0.1.0","description":"DNSimple (BYOK) lets an AI assistant read your own DNSimple data through the DNSimple API with a key you supply (DNSimple API access token (an account token is enough; scoped read tokens work on some plans)). Read-only: 9 tools (whoami, list_accounts, list_domains, get_domain, list_zones, list_zone_records, list_email_forwards, list_certificates, check_domain_availability). 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-dnsimple.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-dnsimple/docs"},"termsOfService":"https://connectorbay.com/byok-dnsimple/terms"},"servers":[{"url":"https://byok-dnsimple.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-dnsimple/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/whoami":{"post":{"operationId":"whoami","summary":"Show who the access token belongs to: the account (id, email, name, plan) for an account token, or the user for a user t","description":"Show who the access token belongs to: the account (id, email, name, plan) for an account token, or the user for a user token. Use for \"Which DNSimple account is my token connected to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"whoamiArguments","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_accounts":{"post":{"operationId":"list_accounts","summary":"List the DNSimple accounts the token can access with id, email and plan. The id is needed by the other tools. Use for \"W","description":"List the DNSimple accounts the token can access with id, email and plan. The id is needed by the other tools. Use for \"What is my DNSimple account id\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_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_domains":{"post":{"operationId":"list_domains","summary":"List the domains in a DNSimple account with state (hosted, registered, expired), expiry, auto-renew and WHOIS privacy. U","description":"List the domains in a DNSimple account with state (hosted, registered, expired), expiry, auto-renew and WHOIS privacy. Use for \"Which domains do I have in DNSimple and when do they expire\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Numeric DNSimple account id (the number in the dashboard URL after you select the account; list_accounts shows it).","minimum":1,"title":"Account","type":"integer"},"name_like":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only domains whose name contains this text.","title":"Name Like"},"sort":{"anyOf":[{"enum":["id:asc","id:desc","name:asc","name:desc","expiration:asc","expiration:desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order: id, name or expiration, with :asc or :desc, for example 'expiration:asc'.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; pagination.total_pages in the answer says how many exist.","title":"Page"}},"required":["account"],"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 by name or id with state, expiry, auto-renew and WHOIS privacy. Use for \"When does example","description":"Get one domain of the account by name or id with state, expiry, auto-renew and WHOIS privacy. Use for \"When does example.com expire in DNSimple\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Numeric DNSimple account id (the number in the dashboard URL after you select the account; list_accounts shows it).","minimum":1,"title":"Account","type":"integer"},"domain":{"description":"The domain name, for example 'example.com'.","maxLength":253,"title":"Domain","type":"string"}},"required":["account","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/list_zones":{"post":{"operationId":"list_zones","summary":"List DNS zones in the account with record counts and limits, active flag and whether each is secondary. Use for \"Which D","description":"List DNS zones in the account with record counts and limits, active flag and whether each is secondary. Use for \"Which DNS zones are hosted in my DNSimple account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Numeric DNSimple account id (the number in the dashboard URL after you select the account; list_accounts shows it).","minimum":1,"title":"Account","type":"integer"},"name_like":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only zones whose name contains this text.","title":"Name Like"},"sort":{"anyOf":[{"enum":["id:asc","id:desc","name:asc","name:desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order: id or name, with :asc or :desc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; pagination.total_pages in the answer says how many exist.","title":"Page"}},"required":["account"],"title":"list_zonesArguments","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_zone_records":{"post":{"operationId":"list_zone_records","summary":"List the DNS records of a zone with name, type, content, TTL and priority, optionally filtered by name or type. Use for ","description":"List the DNS records of a zone with name, type, content, TTL and priority, optionally filtered by name or type. Use for \"What DNS records does example.com have in DNSimple\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Numeric DNSimple account id (the number in the dashboard URL after you select the account; list_accounts shows it).","minimum":1,"title":"Account","type":"integer"},"zone":{"description":"The zone name, for example 'example.com'.","maxLength":253,"title":"Zone","type":"string"},"name":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only records with exactly this name relative to the zone (empty string is the apex).","title":"Name"},"name_like":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only records whose name contains this text.","title":"Name Like"},"type":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this DNS type, for example A, CNAME, MX or TXT.","title":"Type"},"sort":{"anyOf":[{"enum":["id:asc","id:desc","name:asc","name:desc","content:asc","content:desc","type:asc","type:desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order: id, name, content or type, with :asc or :desc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; pagination.total_pages in the answer says how many exist.","title":"Page"}},"required":["account","zone"],"title":"list_zone_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/list_email_forwards":{"post":{"operationId":"list_email_forwards","summary":"List the email forwards of a domain with alias and destination addresses. Use for \"Which email forwards does example.com","description":"List the email forwards of a domain with alias and destination addresses. Use for \"Which email forwards does example.com have in DNSimple\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Numeric DNSimple account id (the number in the dashboard URL after you select the account; list_accounts shows it).","minimum":1,"title":"Account","type":"integer"},"domain":{"description":"The domain name, for example 'example.com'.","maxLength":253,"title":"Domain","type":"string"},"sort":{"anyOf":[{"enum":["id:asc","id:desc","alias_email:asc","alias_email:desc","destination_email:asc","destination_email:desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order: id, alias_email or destination_email, with :asc or :desc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; pagination.total_pages in the answer says how many exist.","title":"Page"}},"required":["account","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_certificates":{"post":{"operationId":"list_certificates","summary":"List the TLS certificates of a domain with common name, alternate names, state, authority and expiry. Private keys are n","description":"List the TLS certificates of a domain with common name, alternate names, state, authority and expiry. Private keys are not requested. Use for \"Which certificates does example.com have in DNSimple and when do they expire\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Numeric DNSimple account id (the number in the dashboard URL after you select the account; list_accounts shows it).","minimum":1,"title":"Account","type":"integer"},"domain":{"description":"The domain name, for example 'example.com'.","maxLength":253,"title":"Domain","type":"string"},"sort":{"anyOf":[{"enum":["id:asc","id:desc","common_name:asc","common_name:desc","expiration:asc","expiration:desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order: id, common_name or expiration, with :asc or :desc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; pagination.total_pages in the answer says how many exist.","title":"Page"}},"required":["account","domain"],"title":"list_certificatesArguments","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/check_domain_availability":{"post":{"operationId":"check_domain_availability","summary":"Check whether a domain name can be registered through DNSimple, and whether it is a premium name. This only asks; it doe","description":"Check whether a domain name can be registered through DNSimple, and whether it is a premium name. This only asks; it does not buy. Use for \"Is mycoolbakery.com available to register at DNSimple\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Numeric DNSimple account id (the number in the dashboard URL after you select the account; list_accounts shows it).","minimum":1,"title":"Account","type":"integer"},"domain":{"description":"The domain name to check, for example 'mycoolbakery.com'.","maxLength":253,"title":"Domain","type":"string"}},"required":["account","domain"],"title":"check_domain_availabilityArguments","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}}}}