{"openapi":"3.1.0","info":{"title":"ipbase (BYOK) API","version":"0.1.0","description":"ipbase (BYOK) lets an AI assistant read your own ipbase data through the ipbase API with a key you supply (ipbase API key). Read-only: 8 tools (lookup_ip, get_ip_location, get_ip_security, get_ip_network, lookup_many_ips, lookup_asn, list_domains_on_ip, get_quota_status). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-ipbase.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-ipbase/docs"},"termsOfService":"https://connectorbay.com/byok-ipbase/terms"},"servers":[{"url":"https://byok-ipbase.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-ipbase/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/lookup_ip":{"post":{"operationId":"lookup_ip","summary":"Get everything ipbase knows about an IP address: network owner (ASN), location, time zone, security flags, TLDs and host","description":"Get everything ipbase knows about an IP address: network owner (ASN), location, time zone, security flags, TLDs and hosted domains. Each lookup counts as one request of the monthly quota (150 on the free plan). Use for \"Where is the IP address 80.110.0.1 and who owns it\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ip":{"anyOf":[{"maxLength":45,"type":"string"},{"type":"null"}],"default":null,"description":"IPv4 or IPv6 address to look up, for example '80.110.0.1'. Leave empty to look up the address the request comes from.","title":"Ip"},"language":{"anyOf":[{"enum":["de","en","es","fr","ja","pt","ru","zh"],"type":"string"},{"type":"null"}],"default":"en","description":"Language of translated place names: de, en, es, fr, ja, pt, ru or zh.","title":"Language"},"hostname":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to also do a reverse-DNS lookup and return the host name (slower).","title":"Hostname"},"fields":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated dot paths of the fields to return, for example 'ip,location.country.alpha2'. Naming an object keeps it whole. Leave empty for the whole object.","title":"Fields"}},"title":"lookup_ipArguments","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_ip_location":{"post":{"operationId":"get_ip_location","summary":"Get only the location and time zone of an IP address: continent, country, region, city, postal code, coordinates and loc","description":"Get only the location and time zone of an IP address: continent, country, region, city, postal code, coordinates and local time. Use for \"In which city and time zone is the IP address 8.8.8.8\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ip":{"description":"IPv4 or IPv6 address to look up, for example '80.110.0.1'.","maxLength":45,"title":"Ip","type":"string"},"language":{"anyOf":[{"enum":["de","en","es","fr","ja","pt","ru","zh"],"type":"string"},{"type":"null"}],"default":"en","description":"Language of translated place names: de, en, es, fr, ja, pt, ru or zh.","title":"Language"},"fields":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":"ip,location,timezone","description":"Comma-separated dot paths of the fields to return, for example 'ip,location.country.alpha2'. Naming an object keeps it whole.","title":"Fields"}},"required":["ip"],"title":"get_ip_locationArguments","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_ip_security":{"post":{"operationId":"get_ip_security","summary":"Get the security flags of an IP address: VPN, proxy, Tor, bot, abuser, known attacker, spam, data-center and iCloud Rela","description":"Get the security flags of an IP address: VPN, proxy, Tor, bot, abuser, known attacker, spam, data-center and iCloud Relay flags with a threat score. Use for \"Is the IP address 185.197.192.65 a VPN, proxy or Tor exit\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ip":{"description":"IPv4 or IPv6 address to look up, for example '80.110.0.1'.","maxLength":45,"title":"Ip","type":"string"},"fields":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":"ip,security","description":"Comma-separated dot paths of the fields to return, for example 'ip,location.country.alpha2'. Naming an object keeps it whole.","title":"Fields"}},"required":["ip"],"title":"get_ip_securityArguments","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_ip_network":{"post":{"operationId":"get_ip_network","summary":"Get the network side of an IP address: ASN, organisation, ISP and range, plus (paid plans) hosting, CDN, mobile carrier ","description":"Get the network side of an IP address: ASN, organisation, ISP and range, plus (paid plans) hosting, CDN, mobile carrier and RPKI details. Use for \"Which ASN and ISP does the IP address 1.1.1.1 belong to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ip":{"description":"IPv4 or IPv6 address to look up, for example '80.110.0.1'.","maxLength":45,"title":"Ip","type":"string"},"fields":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":"ip,connection,network","description":"Comma-separated dot paths of the fields to return, for example 'ip,location.country.alpha2'. Naming an object keeps it whole.","title":"Fields"}},"required":["ip"],"title":"get_ip_networkArguments","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/lookup_many_ips":{"post":{"operationId":"lookup_many_ips","summary":"Look up up to 100 IP addresses in one call and get a compact record for each, keyed by address. Each valid address count","description":"Look up up to 100 IP addresses in one call and get a compact record for each, keyed by address. Each valid address counts as one request of the quota and a plan that includes the batch endpoint is needed. Use for \"Which countries do the IPs 80.110.0.1 and 8.8.8.8 come from\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ips":{"description":"1 to 100 IPv4 or IPv6 addresses separated by commas.","maxLength":2500,"title":"Ips","type":"string"},"language":{"anyOf":[{"enum":["de","en","es","fr","ja","pt","ru","zh"],"type":"string"},{"type":"null"}],"default":"en","description":"Language of translated place names: de, en, es, fr, ja, pt, ru or zh.","title":"Language"},"fields":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":"ip,location.country.alpha2,location.city.name,connection.asn,connection.organization,security.is_vpn","description":"Comma-separated dot paths of the fields to return, for example 'ip,location.country.alpha2'. Naming an object keeps it whole.","title":"Fields"}},"required":["ips"],"title":"lookup_many_ipsArguments","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/lookup_asn":{"post":{"operationId":"lookup_asn","summary":"Look up an autonomous system number: organisation, ISP, country, announced IP ranges and, on paid plans, its class, regi","description":"Look up an autonomous system number: organisation, ISP, country, announced IP ranges and, on paid plans, its class, registry, peers and RPKI state. Needs a plan that includes the ASN endpoint. Use for \"Which organisation runs AS13335 and which ranges does it announce\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"asn":{"description":"Autonomous system number with or without the AS prefix, for example 'AS13335' or '13335'.","maxLength":12,"title":"Asn","type":"string"}},"required":["asn"],"title":"lookup_asnArguments","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_on_ip":{"post":{"operationId":"list_domains_on_ip","summary":"List the domains hosted on an IPv4 address (from A records), cursor-paginated. Needs a plan that includes the hosted dom","description":"List the domains hosted on an IPv4 address (from A records), cursor-paginated. Needs a plan that includes the hosted domains endpoint. Use for \"Which domains are hosted on 1.1.1.1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ip":{"description":"IPv4 address whose hosted domains to list (IPv6 is not supported).","maxLength":15,"title":"Ip","type":"string"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Domains per page, 1 to 100.","title":"Per Page"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"The next_cursor value of the previous answer.","title":"Cursor"}},"required":["ip"],"title":"list_domains_on_ipArguments","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_quota_status":{"post":{"operationId":"get_quota_status","summary":"Show the monthly request quota of the key (total, used, remaining) and the plan. This call does not use up quota. Use fo","description":"Show the monthly request quota of the key (total, used, remaining) and the plan. This call does not use up quota. Use for \"How many ipbase lookups do I have left this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_quota_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}}}}