{"openapi":"3.2.0","info":{"title":"XML and JSON Toolbox API","description":"The JSONBuddy API provides developer-friendly tools for working with JSON, JSON Schema, and XML. Validate JSON against one or more schemas, generate HTML schema documentation, format or minify JSON, apply RFC 6902 JSON Patch operations, and check, format, or verify XML—all through simple REST endpoints.","version":"1.0.0"},"servers":[{"url":"https://qmdbi.jojapi.net"}],"security":[{"ApiKeyAuth":[]}],"tags":[{"name":"JsonTools"},{"name":"schematools"},{"name":"validator"},{"name":"XmlTools"}],"x-agent-commerce":{"catalog_url":"https://qmdbi.jojapi.net/_jojapi/agent/plans","discovery_url":"https://qmdbi.jojapi.net/.well-known/x402","directory_url":"https://agents.jojapi.net/apis/xml-json-toolbox","docs":"https://docs.jojapi.com/consumers/agents"},"paths":{"/api/jsonlinter/prettyprint":{"post":{"operationId":"post_api_jsonlinter_prettyprint","summary":"Pretty-prints JSON input.","description":"Use this endpoint to turn compact JSON into readable, consistently indented JSON. Objects, arrays,\r\nand primitive JSON roots are supported. Requests up to 10 KiB (10,240 UTF-8 bytes) do not require an API key.\r\nLarger requests require a valid X-Api-Key header.","tags":["JsonTools"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"orderId":"ORD-2026-0042","customer":{"name":"Ada Lovelace","vip":true},"items":[{"sku":"JSONBUDDY-PRO","quantity":2,"unitPrice":49.95}],"tags":["api","json"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"string"}}}},"413":{"description":"Content Too Large","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"string"}}}}},"requestBody":{"content":{"application/json":{"schema":{},"example":{"orderId":"ORD-2026-0042","customer":{"name":"Ada Lovelace","vip":true},"items":[{"sku":"JSONBUDDY-PRO","quantity":2,"unitPrice":49.95}],"tags":["api","json"]}}}}}},"/api/jsonlinter/minify":{"post":{"operationId":"post_api_jsonlinter_minify","summary":"Minifies JSON input.","description":"Use this endpoint to remove insignificant whitespace before storing or transmitting JSON. Objects, arrays,\r\nand primitive JSON roots are supported. Requests up to 10 KiB (10,240 UTF-8 bytes) do not require an API key.\r\nLarger requests require a valid X-Api-Key header.","tags":["JsonTools"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"environment":"production","features":{"validation":true,"schemaDocumentation":true},"retryDelays":[1,5,15],"metadata":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"string"}}}},"413":{"description":"Content Too Large","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"string"}}}}},"requestBody":{"content":{"application/json":{"schema":{},"example":{"environment":"production","features":{"validation":true,"schemaDocumentation":true},"retryDelays":[1,5,15],"metadata":null}}}}}},"/api/jsonpatch/apply":{"post":{"operationId":"post_api_jsonpatch_apply","summary":"Applies JSON Patch operations to a JSON document.","description":"The request body must be a two-element array: [patchOperations, inputDocument]. The first element is an\r\nRFC 6902 operation array; the second is the document to update. Operations are applied in array order.\r\nRequests up to 10 KiB (10,240 UTF-8 bytes) do not require an API key. Larger requests require a valid X-Api-Key header.","tags":["JsonTools"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"orderId":"ORD-2026-0042","status":"processed","audit":{"by":"api","at":"2026-07-30T12:00:00Z"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"string"}}}},"402":{"description":"Payment required — pay per request with x402/mpp (offer in the PAYMENT-REQUIRED / WWW-Authenticate headers and the JSON body), or send a JoJ API key."},"413":{"description":"Content Too Large","content":{"application/json":{"schema":{"type":"string"}}}},"422":{"description":"Unprocessable Content","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"string"}}}}},"x-payment-info":{"protocols":["x402","mpp"],"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"intent":"charge"},"requestBody":{"content":{"application/json":{"schema":{},"example":[[{"op":"test","path":"/status","value":"pending"},{"op":"replace","path":"/status","value":"processed"},{"op":"add","path":"/audit","value":{"by":"api","at":"2026-07-30T12:00:00Z"}},{"op":"remove","path":"/temporaryNote"}],{"orderId":"ORD-2026-0042","status":"pending","temporaryNote":"remove after processing"}]}}}}},"/schematools/generate-documentation":{"post":{"operationId":"post_schematools_generate_documentation","summary":"Generates JSON Schema documentation as HTML from the provided JS","description":"This endpoint is rate-limited to 100 requests per minute.","tags":["schematools"],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"valid":{"type":"boolean"},"json_pointer":{"type":"string","nullable":true},"json_pointer_schema":{"type":"string","nullable":true},"schema_key":{"type":"string","nullable":true},"path_to_schema":{"type":"string","nullable":true},"validation_step":{"type":"integer","format":"int32"},"results":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","nullable":true},"message":{"type":"string","nullable":true}},"additionalProperties":false},"nullable":true}},"additionalProperties":false}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"string"}}}},"402":{"description":"Payment required — pay per request with x402/mpp (offer in the PAYMENT-REQUIRED / WWW-Authenticate headers and the JSON body), or send a JoJ API key."}},"x-payment-info":{"protocols":["x402","mpp"],"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"intent":"charge"},"requestBody":{"content":{"application/json":{"schema":{},"example":{}}}}}},"/validator/validate":{"post":{"operationId":"post_validator_validate","summary":"Validates JSON data against a schema.","description":"A schema pool can be provided. This endpoint is rate-limited to 100 requests per minute.","tags":["validator"],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"valid":{"type":"boolean"},"json_pointer":{"type":"string","nullable":true},"json_pointer_schema":{"type":"string","nullable":true},"schema_key":{"type":"string","nullable":true},"path_to_schema":{"type":"string","nullable":true},"validation_step":{"type":"integer","format":"int32"},"results":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","nullable":true},"message":{"type":"string","nullable":true}},"additionalProperties":false},"nullable":true}},"additionalProperties":false}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"string"}}}},"402":{"description":"Payment required — pay per request with x402/mpp (offer in the PAYMENT-REQUIRED / WWW-Authenticate headers and the JSON body), or send a JoJ API key."}},"x-payment-info":{"protocols":["x402","mpp"],"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"intent":"charge"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"nullable":true},"schema":{"type":"array","items":{},"nullable":true}},"additionalProperties":false},"example":{}}}}}},"/validator/validate-simple":{"post":{"operationId":"post_validator_validate_simple","summary":"Validates JSON data against a schema.","description":"This endpoint is rate-limited to 100 requests per minute.","tags":["validator"],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"valid":{"type":"boolean"},"json_pointer":{"type":"string","nullable":true},"json_pointer_schema":{"type":"string","nullable":true},"schema_key":{"type":"string","nullable":true},"path_to_schema":{"type":"string","nullable":true},"validation_step":{"type":"integer","format":"int32"},"results":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","nullable":true},"message":{"type":"string","nullable":true}},"additionalProperties":false},"nullable":true}},"additionalProperties":false}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"string"}}}},"402":{"description":"Payment required — pay per request with x402/mpp (offer in the PAYMENT-REQUIRED / WWW-Authenticate headers and the JSON body), or send a JoJ API key."}},"x-payment-info":{"protocols":["x402","mpp"],"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"intent":"charge"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","nullable":true},"schema":{"type":"string","nullable":true}},"additionalProperties":false},"example":{}}}}}},"/api/xml/check":{"post":{"operationId":"post_api_xml_check","summary":"Checks secure XML well-formedness and returns native document me","description":"Malformed XML is a completed check and returns HTTP 200 with `wellFormed: false`.","tags":["XmlTools"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{}}}},"402":{"description":"Payment required — pay per request with x402/mpp (offer in the PAYMENT-REQUIRED / WWW-Authenticate headers and the JSON body), or send a JoJ API key."},"413":{"description":"Content Too Large","content":{"application/json":{"schema":{}}}},"415":{"description":"Unsupported Media Type","content":{"application/json":{"schema":{}}}},"422":{"description":"Unprocessable Content","content":{"application/json":{"schema":{}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{}}}}},"x-payment-info":{"protocols":["x402","mpp"],"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"intent":"charge"}}},"/api/xml/format":{"post":{"operationId":"post_api_xml_format","summary":"Formats XML deterministically as UTF-8 without changing the nati","description":"Namespace-correct signed XML is refused because formatting could invalidate its signature.","tags":["XmlTools"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{}}}},"413":{"description":"Content Too Large","content":{"application/json":{"schema":{}}}},"415":{"description":"Unsupported Media Type","content":{"application/json":{"schema":{}}}},"422":{"description":"Unprocessable Content","content":{"application/json":{"schema":{}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{}}}}}}},"/api/xml/verify":{"post":{"operationId":"post_api_xml_verify","summary":"Verifies the restricted xmlvalidator-safe-rsa-sha256-v2 XML sign","description":"The safe v2 profile accepts one whole-document enveloped signature whose Reference URI is exactly empty\r\nor `#xpointer(/)`. The transforms must be enveloped-signature alone, or enveloped-signature followed\r\nby Canonical XML 1.0 or Exclusive Canonical XML 1.0, without comments. The one-transform form uses\r\nCanonical XML 1.0 explicitly. Other fragments, XPointer expressions, transforms, and external references\r\nare unsupported and are never resolved or executed.\r\n            \r\nA `valid` result establishes reference-digest and RSA signature integrity only. Certificate trust,\r\nsigner identity, and certificate-chain validity are not evaluated. Invalid, unsupported, and no-signature\r\nresults are completed verification results and return HTTP 200. An unsupported result includes a stable\r\ndiagnostic code and a safe, user-facing explanation of the refused profile feature.","tags":["XmlTools"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{}}}},"402":{"description":"Payment required — pay per request with x402/mpp (offer in the PAYMENT-REQUIRED / WWW-Authenticate headers and the JSON body), or send a JoJ API key."},"413":{"description":"Content Too Large","content":{"application/json":{"schema":{}}}},"415":{"description":"Unsupported Media Type","content":{"application/json":{"schema":{}}}},"422":{"description":"Unprocessable Content","content":{"application/json":{"schema":{}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{}}}}},"x-payment-info":{"protocols":["x402","mpp"],"price":{"mode":"fixed","currency":"USD","amount":"0.1"},"intent":"charge"}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-JoJAPI-Key","description":"Your JoJ API key."}}}}