{"openapi":"3.1.0","info":{"title":"JSON Validate, Repair, Convert, Query & Diff","description":"Every agent and developer hits broken or confusing JSON. This tool handles the common headaches in one place: check whether JSON is valid with the exact error location, repair near-JSON with typos, pretty-print or minify, pull values out with a path expression, diff two documents, convert to and from YAML or CSV, produce a byte-stable canonical form for hashing, validate against a schema, and report size and structure. Same input, same output, no side effects.","version":"1.0.0","contact":{"name":"_done","url":"https://forms.gle/5KzuSFH7p8hHtDmz7","email":"info@underscoredone.com"},"x-openapi-url":"https://json-suite.underscoredone.com/openapi.json","x-logo":{"url":"https://underscoredone.com/logo.png","altText":"_done"},"x-guidance":"Send the 'op' field to choose what to do. Use 'data_raw' (a plain string) only for 'validate' and 'repair' - these two need the original broken text. Use 'data' (actual parsed JSON) for all other operations: format, canonicalize, convert, query, diff, patch, schema, stats. For 'diff' and 'patch', put the first document in 'data' and the second in 'options.data_b'. For 'query', put your JSONPath expression (e.g. '$.items[*].id') in 'options.jsonpath' or a JSON Pointer (e.g. '/items/0/id') in 'options.pointer'. For 'convert', set 'options.to' to 'yaml', 'csv', 'ndjson', or 'json'. For 'schema', put the JSON Schema object in 'options.schema'. For 'format', set 'options.indent' (number, default 2) and 'options.sort_keys' (true/false). For 'canonicalize', no extra options needed - output is RFC 8785 JCS bytes as a string. The 'repair' operation is heuristic: it always returns 'fixes_applied' so you can audit what changed. Check the 'valid' field first in every response. On a 400 error, read 'detail' for a plain-English explanation of what went wrong.","x-ai-instructions":"Send the 'op' field to choose what to do. Use 'data_raw' (a plain string) only for 'validate' and 'repair' - these two need the original broken text. Use 'data' (actual parsed JSON) for all other operations: format, canonicalize, convert, query, diff, patch, schema, stats. For 'diff' and 'patch', put the first document in 'data' and the second in 'options.data_b'. For 'query', put your JSONPath expression (e.g. '$.items[*].id') in 'options.jsonpath' or a JSON Pointer (e.g. '/items/0/id') in 'options.pointer'. For 'convert', set 'options.to' to 'yaml', 'csv', 'ndjson', or 'json'. For 'schema', put the JSON Schema object in 'options.schema'. For 'format', set 'options.indent' (number, default 2) and 'options.sort_keys' (true/false). For 'canonicalize', no extra options needed - output is RFC 8785 JCS bytes as a string. The 'repair' operation is heuristic: it always returns 'fixes_applied' so you can audit what changed. Check the 'valid' field first in every response. On a 400 error, read 'detail' for a plain-English explanation of what went wrong.","x-provider":"_done — single-purpose utility APIs for developers and AI agents. Pay per call with USDC on Base Mainnet or Solana Mainnet.","x-pricing":{"model":"pay-per-call","currency":"USDC","network":"Base Mainnet or Solana Mainnet","price":"$0.01"},"x-keywords":["parsing","json","validate","repair","jsonpath","diff","canonicalize","convert","yaml","csv","json-schema","rfc8785","ai-agent","utility","api","pay-per-call","usdc","x402"],"x-category":"json","x-provider-url":"https://underscoredone.com","x-agentcash-auth":{"mode":"paid"},"x-402":{"price":"$0.01","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","pay_to":"0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08","facilitator":"https://api.cdp.coinbase.com/platform/v2/x402","scheme":"exact","description":"Every agent and developer hits broken or confusing JSON. This tool handles the common headaches in one place: check whether JSON is valid with the exact error location, repair near-JSON with typos, pretty-print or minify, pull values out with a path expression, diff two documents, convert to and from YAML or CSV, produce a byte-stable canonical form for hashing, validate against a schema, and report size and structure. Same input, same output, no side effects.","mime_type":"application/json","networks":[{"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","pay_to":"0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08"},{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","pay_to":"8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b"}]}},"paths":{"/json":{"post":{"tags":["json","validate json","json validator","repair json","fix broken json","json formatter","pretty print json","minify json","json to yaml","json to csv","jsonpath","json schema validation","json diff","parse json","canonical json"],"summary":"Validate, repair, format, query, diff, convert, and canonicalize JSON in one call.","description":"Process a JSON document using the chosen operation. Send op to pick what to do, data or data_raw for the input, and options for extra settings.","operationId":"handler_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"required":true},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Response"},"examples":{"success":{"summary":"Successful response","value":{"api_version":"1.0.0","op":"query","valid":true,"matches":[{"path":"$.order.items[0].sku","value":"BIL-CUE-07"},{"path":"$.order.items[1].sku","value":"BIL-CHALK-01"}],"match_count":2}}}}}},"422":{"description":"Unprocessable — a required field is missing or the wrong type. Check the detail field for specifics.","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"array"}}}}}},"402":{"description":"Payment required. Send a signed USDC payment on Base Mainnet or Solana Mainnet using the x402 protocol.","headers":{"X-Payment-Response":{"description":"x402 payment challenge — base64-encoded JSON with payment details.","schema":{"type":"string"}}}},"400":{"description":"Bad request — your input failed validation or could not be processed. Check the detail field for specifics.","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}}}}}}},"x-ai-instructions":"Send the 'op' field to choose what to do. Use 'data_raw' (a plain string) only for 'validate' and 'repair' - these two need the original broken text. Use 'data' (actual parsed JSON) for all other operations: format, canonicalize, convert, query, diff, patch, schema, stats. For 'diff' and 'patch', put the first document in 'data' and the second in 'options.data_b'. For 'query', put your JSONPath expression (e.g. '$.items[*].id') in 'options.jsonpath' or a JSON Pointer (e.g. '/items/0/id') in 'options.pointer'. For 'convert', set 'options.to' to 'yaml', 'csv', 'ndjson', or 'json'. For 'schema', put the JSON Schema object in 'options.schema'. For 'format', set 'options.indent' (number, default 2) and 'options.sort_keys' (true/false). For 'canonicalize', no extra options needed - output is RFC 8785 JCS bytes as a string. The 'repair' operation is heuristic: it always returns 'fixes_applied' so you can audit what changed. Check the 'valid' field first in every response. On a 400 error, read 'detail' for a plain-English explanation of what went wrong.","x-guidance":"Send the 'op' field to choose what to do. Use 'data_raw' (a plain string) only for 'validate' and 'repair' - these two need the original broken text. Use 'data' (actual parsed JSON) for all other operations: format, canonicalize, convert, query, diff, patch, schema, stats. For 'diff' and 'patch', put the first document in 'data' and the second in 'options.data_b'. For 'query', put your JSONPath expression (e.g. '$.items[*].id') in 'options.jsonpath' or a JSON Pointer (e.g. '/items/0/id') in 'options.pointer'. For 'convert', set 'options.to' to 'yaml', 'csv', 'ndjson', or 'json'. For 'schema', put the JSON Schema object in 'options.schema'. For 'format', set 'options.indent' (number, default 2) and 'options.sort_keys' (true/false). For 'canonicalize', no extra options needed - output is RFC 8785 JCS bytes as a string. The 'repair' operation is heuristic: it always returns 'fixes_applied' so you can audit what changed. Check the 'valid' field first in every response. On a 400 error, read 'detail' for a plain-English explanation of what went wrong.","x-payment-info":{"price":{"fixed":{"mode":"fixed","currency":"USD","amount":"0.01"}},"protocols":[{"x402":{}}]}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Request":{"properties":{"op":{"type":"string","title":"Op","description":"What you want to do. Choose one of: validate, repair, format, canonicalize, convert, query, diff, patch, schema, stats."},"data":{"anyOf":[{},{"type":"null"}],"title":"Data","description":"The JSON value you want to work with - can be an object, array, string, number, or anything valid. Required for all operations except validate and repair."},"data_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Raw","description":"The raw text you want to validate or repair. Use this instead of data only for validate and repair, because those need to see the original broken text exactly as-is."},"options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Options","description":"Extra settings for the chosen operation. For example: indent, sort_keys, jsonpath, pointer, to (for convert), schema, data_b (for diff/patch). All optional - sensible defaults are used."}},"type":"object","required":["op"],"title":"Request","example":{"data":{"order":{"id":"A-1029","items":[{"qty":2,"sku":"BIL-CUE-07"},{"qty":5,"sku":"BIL-CHALK-01"}]}},"op":"query","options":{"jsonpath":"$.order.items[*].sku"}}},"Response":{"properties":{"api_version":{"type":"string","title":"Api Version","description":"API version","default":"1.0.0"},"op":{"type":"string","title":"Op","description":"The operation that was performed."},"valid":{"type":"boolean","title":"Valid","description":"Whether the JSON is valid (for validate) or the operation succeeded.","default":true},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"A plain-English description of what went wrong, if the JSON is not valid."},"line":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Line","description":"The line number where the error was found, if known."},"column":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Column","description":"The column number where the error was found, if known."},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path","description":"The JSON path to the problem location, if known."},"result":{"anyOf":[{},{"type":"null"}],"title":"Result","description":"The output for format, canonicalize, convert, query (string), patch, and schema operations."},"repaired":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repaired","description":"The repaired JSON text, as a string."},"fixes_applied":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Fixes Applied","description":"A list describing what kinds of fixes were made during repair."},"matches":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Matches","description":"The list of values found by a query, each with its path and value."},"match_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Match Count","description":"How many values the query matched."},"equal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Equal","description":"Whether the two JSON documents are identical."},"change_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Change Count","description":"How many differences were found between the two documents."},"patch":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Patch","description":"The list of changes (RFC 6902 JSON Patch) that turn the first document into the second."},"stats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stats","description":"Size and structure statistics about the JSON document."},"schema_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schema Valid","description":"Whether the document passes the provided JSON Schema."},"schema_errors":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Schema Errors","description":"A list of schema validation errors, if any."}},"type":"object","required":["op"],"title":"Response","example":{"api_version":"1.0.0","match_count":2,"matches":[{"path":"$.order.items[0].sku","value":"BIL-CUE-07"},{"path":"$.order.items[1].sku","value":"BIL-CHALK-01"}],"op":"query","valid":true}},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"siwx":{"type":"apiKey","in":"header","name":"SIGN-IN-WITH-X","description":"CAIP-122 wallet signature for repeat access after payment"}}},"servers":[{"url":"https://json-suite.underscoredone.com","description":"Production"}],"tags":[{"name":"json"},{"name":"validate json"},{"name":"json validator"},{"name":"repair json"},{"name":"fix broken json"},{"name":"json formatter"},{"name":"pretty print json"},{"name":"minify json"},{"name":"json to yaml"},{"name":"json to csv"},{"name":"jsonpath"},{"name":"json schema validation"},{"name":"json diff"},{"name":"parse json"},{"name":"canonical json"}],"x402Version":2,"x-payment-accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","payTo":"8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}]}