{"openapi":"3.1.0","info":{"title":"Data Toolkit","version":"0.1.0","description":"Query, diff, patch, merge and flatten JSON — JMESPath queries, RFC 6902 JSON Patch diff/apply, deep merge and flatten/unflatten —","x-guidance":"Query, diff, patch, merge and flatten JSON — JMESPath queries, RFC 6902 JSON Patch diff/apply, deep merge and flatten/unflatten — 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://data.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/query":{"post":{"summary":"Query JSON with JMESPath","description":"Evaluate a JMESPath expression against a JSON value and return the selected/projected result. A malformed expression is rejected before payment. Paid endpoint (x402 + MPP). Price: $0.004000 USDC per successful payment.","tags":["query json with jmespath","jmespath api","select json fields","json query expression","extract data from json","filter json data"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Any JSON value (object, array, string, number, boolean or null)."},"expression":{"type":"string","minLength":1,"maxLength":10000,"description":"A JMESPath expression, e.g. `people[?age > `30`].name`."}},"required":["data","expression"],"additionalProperties":false}}}},"responses":{"200":{"description":"The JMESPath result as `result` (null when the expression selects nothing).","content":{"application/json":{"schema":{"type":"object","description":"The JMESPath result as `result` (null when the expression selects nothing)."}}}},"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":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Evaluate a JMESPath expression against a JSON value and return the selected/projected result. A malformed expression is rejected before payment.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"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":"4000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Evaluate a JMESPath expression against a JSON value and return the selected/projected result. A malformed expression is rejected before payment.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Evaluate a JMESPath expression against a JSON value and return the selected/projected result. A malformed expression is rejected before payment.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/diff":{"post":{"summary":"Diff two JSON documents","description":"Compute the RFC 6902 JSON Patch that transforms `source` into `target`. The patch is a minimal array of add/remove/replace operations. Paid endpoint (x402 + MPP). Price: $0.004000 USDC per successful payment.","tags":["json patch diff","diff json documents","compare json objects","generate rfc6902 patch","json document changes","json diff api"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"description":"The original JSON document."},"target":{"description":"The desired JSON document."}},"required":["source","target"],"additionalProperties":false}}}},"responses":{"200":{"description":"The RFC 6902 JSON Patch as `patch` (an array of operations).","content":{"application/json":{"schema":{"type":"object","description":"The RFC 6902 JSON Patch as `patch` (an array of operations)."}}}},"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":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Compute the RFC 6902 JSON Patch that transforms `source` into `target`. The patch is a minimal array of add/remove/replace operations.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"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":"4000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Compute the RFC 6902 JSON Patch that transforms `source` into `target`. The patch is a minimal array of add/remove/replace operations.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Compute the RFC 6902 JSON Patch that transforms `source` into `target`. The patch is a minimal array of add/remove/replace operations.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/patch":{"post":{"summary":"Apply a JSON Patch","description":"Apply an RFC 6902 JSON Patch to a JSON document and return the result. An invalid or unresolvable patch (e.g. a failed `test`, or a path that does not exist) is rejected before payment. Paid endpoint (x402 + MPP). Price: $0.004000 USDC per successful payment.","tags":["apply json patch","rfc6902 patch api","update json document","json pointer patch","validate json patch","patch json data"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"The JSON document to patch."},"patch":{"type":"array","description":"An RFC 6902 JSON Patch: an array of operation objects.","items":{"type":"object","properties":{"op":{"type":"string","enum":["add","remove","replace","move","copy","test"]},"path":{"type":"string","description":"A JSON Pointer (RFC 6901) target."},"from":{"type":"string","description":"Source JSON Pointer for move/copy."},"value":{"description":"Any JSON value (object, array, string, number, boolean or null)."}},"required":["op","path"],"additionalProperties":false}}},"required":["data","patch"],"additionalProperties":false},"example":{"data":{"name":"Ada","active":false},"patch":[{"op":"replace","path":"/active","value":true}]}}}},"responses":{"200":{"description":"The patched document as `result`.","content":{"application/json":{"schema":{"type":"object","description":"The patched document as `result`."}}}},"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":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Apply an RFC 6902 JSON Patch to a JSON document and return the result. An invalid or unresolvable patch (e.g. a failed `test`, or a path that does not exist) is rejected before payment.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"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":"4000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Apply an RFC 6902 JSON Patch to a JSON document and return the result. An invalid or unresolvable patch (e.g. a failed `test`, or a path that does not exist) is rejected before payment.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Apply an RFC 6902 JSON Patch to a JSON document and return the result. An invalid or unresolvable patch (e.g. a failed `test`, or a path that does not exist) is rejected before payment.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/merge":{"post":{"summary":"Deep-merge JSON documents","description":"Deep-merge an ordered list of JSON documents, left to right. Objects are merged key-by-key; arrays, scalars and null in a later document replace the earlier value (last-wins, no array concatenation). Paid endpoint (x402 + MPP). Price: $0.004000 USDC per successful payment.","tags":["deep merge json","merge config objects","combine json documents","last wins merge","json deepmerge api","merge nested data"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"documents":{"type":"array","minItems":2,"description":"The documents to merge, in precedence order (later wins).","items":{"description":"Any JSON value (object, array, string, number, boolean or null)."}}},"required":["documents"],"additionalProperties":false}}}},"responses":{"200":{"description":"The merged document as `result`.","content":{"application/json":{"schema":{"type":"object","description":"The merged document as `result`."}}}},"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":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Deep-merge an ordered list of JSON documents, left to right. Objects are merged key-by-key; arrays, scalars and null in a later document replace the earlier value (last-wins, no array concatenation).","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"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":"4000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Deep-merge an ordered list of JSON documents, left to right. Objects are merged key-by-key; arrays, scalars and null in a later document replace the earlier value (last-wins, no array concatenation).","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Deep-merge an ordered list of JSON documents, left to right. Objects are merged key-by-key; arrays, scalars and null in a later document replace the earlier value (last-wins, no array concatenation).","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/flatten":{"post":{"summary":"Flatten a nested object","description":"Flatten a nested object/array into a single-level object whose keys are the delimited paths to each leaf (default delimiter `.`). Requires an object or array. Paid endpoint (x402 + MPP). Price: $0.004000 USDC per successful payment.","tags":["flatten nested json","object path flatten","json to flat object","flatten array object","delimited keys json","flatten data api"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"The nested object or array to flatten."},"delimiter":{"type":"string","minLength":1,"maxLength":8,"description":"Path delimiter. Default `.`."}},"required":["data"],"additionalProperties":false},"example":{"data":{"user":{"name":"Ada","roles":["admin"]}},"delimiter":"."}}}},"responses":{"200":{"description":"The flattened single-level object as `result`.","content":{"application/json":{"schema":{"type":"object","description":"The flattened single-level object as `result`."}}}},"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":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Flatten a nested object/array into a single-level object whose keys are the delimited paths to each leaf (default delimiter `.`). Requires an object or array.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"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":"4000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Flatten a nested object/array into a single-level object whose keys are the delimited paths to each leaf (default delimiter `.`). Requires an object or array.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Flatten a nested object/array into a single-level object whose keys are the delimited paths to each leaf (default delimiter `.`). Requires an object or array.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}},"/v1/unflatten":{"post":{"summary":"Unflatten a delimited object","description":"Rebuild a nested object from a single-level object whose keys are delimited paths (default delimiter `.`) — the inverse of flatten. Requires a flat object. Paid endpoint (x402 + MPP). Price: $0.004000 USDC per successful payment.","tags":["unflatten json object","flat keys to nested json","expand delimited object","rebuild nested object","inverse json flatten","unflatten data api"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"The flat, delimiter-keyed object to expand."},"delimiter":{"type":"string","minLength":1,"maxLength":8,"description":"Path delimiter. Default `.`."}},"required":["data"],"additionalProperties":false},"example":{"data":{"user.name":"Ada","user.active":true},"delimiter":"."}}}},"responses":{"200":{"description":"The reconstructed nested object as `result`.","content":{"application/json":{"schema":{"type":"object","description":"The reconstructed nested object as `result`."}}}},"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":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Rebuild a nested object from a single-level object whose keys are delimited paths (default delimiter `.`) — the inverse of flatten. Requires a flat object.","method":"tempo","preferredOffer":"mpp-tempo","price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"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":"4000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Rebuild a nested object from a single-level object whose keys are delimited paths (default delimiter `.`) — the inverse of flatten. Requires a flat object.","intent":"charge","method":"evm","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"},{"amount":"4000","currency":"0x20c000000000000000000000b9537d11c60e8b50","description":"Rebuild a nested object from a single-level object whose keys are delimited paths (default delimiter `.`) — the inverse of flatten. Requires a flat object.","intent":"charge","method":"tempo","recipient":"0xb3f4de103F34b99f0Da19B4F16D6B53a14C2194A"}]}}}},"x-service-info":{"categories":["compute"],"docs":{"homepage":"https://data.openverbs.com","apiReference":"https://data.openverbs.com/openapi.json"}}}