{"openapi":"3.1.0","info":{"title":"IP Toolkit","version":"0.1.0","description":"IPv4/IPv6 address and subnet math — parse & classify, subnet calculator, CIDR membership and IPv6 expand/compress.","x-guidance":"IPv4/IPv6 address and subnet math — parse & classify, subnet calculator, CIDR membership and IPv6 expand/compress. Each operation is an HTTP POST to its /v1/<operation> path with a JSON request body (see each operation's requestBody schema) and returns a JSON response. Endpoints are paid per successful call via x402 or MPP (USDC on Base); an unpaid request returns 402 with payment metadata in the WWW-Authenticate header.","contact":{"email":"hello@openverbs.com"}},"x-discovery":{"ownershipProofs":["0xb1401a71756f51464a9962db12f1eb3e9522490cd20010b06d00cf7b7770acfd5f79721f9dfdf2643f8cecd29af3bde9ec133941a386042b32d9886053a70de61b","0xc1c1f11793e18a00fcb7072421f26e89fb75b6aa517fa84370564991f4b10efa024f6f57e4e67eefd20cf46cc01fc5a62d793fa8fbcda04f26c946a3433d73f91b","0x676b474af0ef9ed4809b5d12d2e789b36e52d56215b21f601d71f76620e36ec630347116a7b2b349a3c3681e5db0fbfa76c4169a676b6d6f27864d0e5017284a1c","0xc2ab96522515ed9e9bc4f1a241b774bd48df42e951ddbf7f6aa8fc76f5a96a20421703e1ec402ce7eb1e4eabea3b6e4e4129cf39d56ea91cf4fcf38561fc94fc1c"]},"servers":[{"url":"https://ip.openverbs.com"}],"paths":{"/health":{"get":{"summary":"Health check","security":[],"responses":{"200":{"description":"Healthy","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"version":{"type":"string"}}}}}}}}},"/v1/parse":{"post":{"summary":"Parse & classify IP","description":"Parse an IPv4 or IPv6 address and classify it — version, normalized form and RFC range (unicast, private, loopback, linkLocal, multicast, uniqueLocal, ipv4Mapped, …). Detects IPv4-mapped IPv6. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["ip address parser","parse ip address","classify ip address","ipv4 ipv6 lookup","detect private ip","normalize ip address"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"maxLength":64,"description":"IPv4 or IPv6 address, e.g. \"192.168.1.1\" or \"2001:db8::1\"."}},"required":["address"],"additionalProperties":false},"example":{"address":"192.168.1.1"}}}},"responses":{"200":{"description":"`{ kind, version, address, range, ipv4Mapped? }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ kind, version, address, range, ipv4Mapped? }`."}}}},"400":{"description":"Invalid request; no payment is attempted"},"402":{"description":"Payment required; x402/MPP metadata returned in headers"},"502":{"description":"Upstream provider error after payment verification"}},"x-payment-info":{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Parse an IPv4 or IPv6 address and classify it — version, normalized form and RFC range (unicast, private, loopback, linkLocal, multicast, uniqueLocal, ipv4Mapped, …). Detects IPv4-mapped IPv6.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"evm","intent":"charge","network":"8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"tempo","intent":"charge","network":"4217","currency":"0x20c000000000000000000000b9537d11c60e8b50","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}}],"network":"4217","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A","offers":[{"amount":"2000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Parse an IPv4 or IPv6 address and classify it — version, normalized form and RFC range (unicast, private, loopback, linkLocal, multicast, uniqueLocal, ipv4Mapped, …). Detects IPv4-mapped IPv6.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Parse an IPv4 or IPv6 address and classify it — version, normalized form and RFC range (unicast, private, loopback, linkLocal, multicast, uniqueLocal, ipv4Mapped, …). Detects IPv4-mapped IPv6.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/subnet":{"post":{"summary":"Subnet calculator","description":"Compute network details of a CIDR block — network & broadcast address, usable host range, total and usable address counts. Works for IPv4 and IPv6 (counts returned as strings for large IPv6 blocks). Honours RFC 3021 for /31. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["subnet calculator","cidr calculator","ip network range","calculate usable hosts","network broadcast address","ipv4 ipv6 subnet"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cidr":{"type":"string","minLength":3,"maxLength":64,"description":"CIDR block, e.g. \"192.168.1.0/24\" or \"2001:db8::/48\"."}},"required":["cidr"],"additionalProperties":false},"example":{"cidr":"192.168.1.0/24"}}}},"responses":{"200":{"description":"`{ kind, cidr, prefixLength, networkAddress, lastAddress, broadcastAddress?, firstHost, lastHost, numAddresses, usableHosts }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ kind, cidr, prefixLength, networkAddress, lastAddress, broadcastAddress?, firstHost, lastHost, numAddresses, usableHosts }`."}}}},"400":{"description":"Invalid request; no payment is attempted"},"402":{"description":"Payment required; x402/MPP metadata returned in headers"},"502":{"description":"Upstream provider error after payment verification"}},"x-payment-info":{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Compute network details of a CIDR block — network & broadcast address, usable host range, total and usable address counts. Works for IPv4 and IPv6 (counts returned as strings for large IPv6 blocks). Honours RFC 3021 for /31.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"evm","intent":"charge","network":"8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"tempo","intent":"charge","network":"4217","currency":"0x20c000000000000000000000b9537d11c60e8b50","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}}],"network":"4217","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A","offers":[{"amount":"2000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Compute network details of a CIDR block — network & broadcast address, usable host range, total and usable address counts. Works for IPv4 and IPv6 (counts returned as strings for large IPv6 blocks). Honours RFC 3021 for /31.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Compute network details of a CIDR block — network & broadcast address, usable host range, total and usable address counts. Works for IPv4 and IPv6 (counts returned as strings for large IPv6 blocks). Honours RFC 3021 for /31.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/contains":{"post":{"summary":"CIDR membership","description":"Test whether an IP address falls within a CIDR block. A well-formed address of a different family (or simply outside the block) returns contains=false — not an error. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["cidr membership","check ip in cidr","ip range lookup","test subnet contains ip","validate ip network membership","cidr contains address"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cidr":{"type":"string","minLength":3,"maxLength":64,"description":"CIDR block, e.g. \"10.0.0.0/8\"."},"address":{"type":"string","minLength":1,"maxLength":64,"description":"IP address to test."}},"required":["cidr","address"],"additionalProperties":false},"example":{"cidr":"192.168.1.0/24","address":"192.168.1.42"}}}},"responses":{"200":{"description":"`{ cidr, address, contains }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ cidr, address, contains }`."}}}},"400":{"description":"Invalid request; no payment is attempted"},"402":{"description":"Payment required; x402/MPP metadata returned in headers"},"502":{"description":"Upstream provider error after payment verification"}},"x-payment-info":{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Test whether an IP address falls within a CIDR block. A well-formed address of a different family (or simply outside the block) returns contains=false — not an error.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"evm","intent":"charge","network":"8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"tempo","intent":"charge","network":"4217","currency":"0x20c000000000000000000000b9537d11c60e8b50","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}}],"network":"4217","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A","offers":[{"amount":"2000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Test whether an IP address falls within a CIDR block. A well-formed address of a different family (or simply outside the block) returns contains=false — not an error.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Test whether an IP address falls within a CIDR block. A well-formed address of a different family (or simply outside the block) returns contains=false — not an error.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/expand":{"post":{"summary":"Expand / compress IPv6","description":"Return both the fully-expanded (eight 4-hex groups) and canonical compressed (RFC 5952) forms of an address. IPv4 is returned unchanged in both fields. Paid endpoint (x402 + MPP). Price: $0.002000 USDC per successful payment.","tags":["ipv6 expand compress","expand ipv6 address","compress ipv6 address","canonical ipv6 format","rfc 5952 ipv6","normalize ipv6 address"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"maxLength":64,"description":"IPv4 or IPv6 address."}},"required":["address"],"additionalProperties":false},"example":{"address":"2001:db8::1"}}}},"responses":{"200":{"description":"`{ kind, input, expanded, compressed }`.","content":{"application/json":{"schema":{"type":"object","description":"`{ kind, input, expanded, compressed }`."}}}},"400":{"description":"Invalid request; no payment is attempted"},"402":{"description":"Payment required; x402/MPP metadata returned in headers"},"502":{"description":"Upstream provider error after payment verification"}},"x-payment-info":{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Return both the fully-expanded (eight 4-hex groups) and canonical compressed (RFC 5952) forms of an address. IPv4 is returned unchanged in both fields.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"evm","intent":"charge","network":"8453","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}},{"mpp":{"method":"tempo","intent":"charge","network":"4217","currency":"0x20c000000000000000000000b9537d11c60e8b50","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}}],"network":"4217","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A","offers":[{"amount":"2000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Return both the fully-expanded (eight 4-hex groups) and canonical compressed (RFC 5952) forms of an address. IPv4 is returned unchanged in both fields.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"2000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Return both the fully-expanded (eight 4-hex groups) and canonical compressed (RFC 5952) forms of an address. IPv4 is returned unchanged in both fields.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}}},"x-service-info":{"categories":["network"],"docs":{"homepage":"https://ip.openverbs.com","apiReference":"https://ip.openverbs.com/openapi.json"}}}