JSON Validate, Repair, Convert, Query & Diff

One endpoint to validate, repair, format, query, diff, convert, and canonicalize JSON — the most common operation in every agent workflow. 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. Pay-per-call at $0.01 USDC over x402 on Base or Solana — no account, no API key. OpenAPI 3.1.0; 1 operation(s): POST /json.

OpenAPI Specification

done-json-suite-openapi.yml Raw ↑
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