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