openapi: 3.1.0 info: title: JSON Validate, Repair, Convert, Query & Diff description: 'Every AI agent and developer runs into broken or confusing JSON constantly. This tool handles all the most common JSON headaches in one place: check if JSON is valid (with exact error location), fix near-JSON that has typos or formatting mistakes, pretty-print or minify, pull out specific values using a path expression, compare two JSON documents and see exactly what changed, convert to and from YAML or CSV, produce a byte-stable canonical form for hashing or signing, validate against a schema, and get size and structure statistics. Same input always gives the same output — fully predictable, 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 AI agent and developer runs into broken or confusing JSON constantly. This tool handles all the most common JSON headaches in one place: check if JSON is valid (with exact error location), fix near-JSON that has typos or formatting mistakes, pretty-print or minify, pull out specific values using a path expression, compare two JSON documents and see exactly what changed, convert to and from YAML or CSV, produce a byte-stable canonical form for hashing or signing, validate against a schema, and get size and structure statistics. Same input always gives the same output — fully predictable, 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