{"openapi":"3.1.0","info":{"title":"JSON Diff & Patch API","version":"1.0.0","description":"Compare and patch JSON documents to RFC standards. Pass two documents and the service returns whether they are equal, an RFC 6902 JSON Patch (the precise add/remove/replace operations that turn the first into the second, using RFC 6901 JSON-Pointer paths), a change summary, and an RFC 7386 JSON Merge Patch. The patch endpoint goes the other way: apply an RFC 6902 patch (add, remove, replace, move, copy and test operations) or an RFC 7386 merge patch to a document and get the result. Documents can be sent inline or as a JSON body. Everything is computed locally with no network calls, so it is fast and deterministic. Built for configuration and state management, API change detection, audit trails and change logs, optimistic-concurrency checks and data-sync pipelines. A JSON diff/patch engine — distinct from text diffing (textdiff), JSONPath querying (jsonpath), JSON validation and pretty-printing (json) and JSON-Schema validation (jsonschema). No upstream key, no cache.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/jsondiff-api","description":"oanor gateway"}],"tags":[{"name":"JSON Diff & Patch"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/diff":{"get":{"operationId":"get_v1_diff","tags":["JSON Diff & Patch"],"summary":"Diff two JSON docs → patch","description":"","parameters":[{"name":"a","in":"query","required":true,"description":"First JSON document (inline or body)","schema":{"type":"string"},"example":"{\"x\":1,\"y\":2}"},{"name":"b","in":"query","required":true,"description":"Second JSON document","schema":{"type":"string"},"example":"{\"x\":1,\"y\":3}"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"equal":false,"patch":[{"op":"replace","path":"/y","value":3}],"summary":{"added":0,"changed":1,"removed":0},"merge_patch":{"y":3},"patch_op_count":1},"meta":{"timestamp":"2026-06-01T23:40:47.866Z","request_id":"ea1a9f38-d23a-4bef-a69a-83823ec6e338"},"status":"ok","message":"Diff computed","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/patch":{"get":{"operationId":"get_v1_patch","tags":["JSON Diff & Patch"],"summary":"Apply a patch to a document","description":"","parameters":[{"name":"doc","in":"query","required":true,"description":"JSON document","schema":{"type":"string"},"example":"{\"x\":1,\"y\":2}"},{"name":"patch","in":"query","required":false,"description":"RFC 6902 operations array","schema":{"type":"string"},"example":"[{\"op\":\"replace\",\"path\":\"/y\",\"value\":9}]"},{"name":"merge_patch","in":"query","required":false,"description":"RFC 7386 merge patch (alternative)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"kind":"json_patch","result":{"x":1,"y":9},"applied":1},"meta":{"timestamp":"2026-06-01T23:40:47.952Z","request_id":"87b88729-3dcc-493f-bd82-c299a0d95109"},"status":"ok","message":"Patch applied","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Supported standards","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Compare and patch JSON documents. /v1/diff takes two documents (a and b — inline via ?a=&b= or as a JSON body {\"a\":…,\"b\":…}) and returns whether they are equal, an RFC 6902 JSON Patch (the add/remove/replace operations that turn a into b), a change summary and an RFC 7386 JSON Merge Patch. /v1/patch applies a patch to a document: supply {\"doc\":…,\"patch\":[…]} for an RFC 6902 patch (add/remove/replace/move/copy/test with JSON-Pointer paths) or {\"doc\":…,\"merge_patch\":…} for an RFC 7386 merge patch, and get the resulting document. Everything is computed locally with no network calls. Ideal for config and state management, API change detection, audit trails, optimistic-concurrency checks and data-sync pipelines. A JSON diff/patch engine — distinct from text diffing (textdiff), JSONPath querying (jsonpath), JSON validation/pretty-printing (json) and JSON-Schema validation (jsonschema). No key, no cache.","endpoints":["/v1/diff","/v1/patch","/v1/meta"],"standards":["RFC 6902 (JSON Patch)","RFC 7386 (JSON Merge Patch)","RFC 6901 (JSON Pointer)"]},"meta":{"timestamp":"2026-06-01T23:40:48.056Z","request_id":"1129011e-0529-492a-9469-10432adea356"},"status":"ok","message":"Meta retrieved","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":2260,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":660,"monthly_call_quota":44500,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2110,"monthly_call_quota":230000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5520,"monthly_call_quota":855000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/jsondiff-api"}