{"openapi":"3.1.0","info":{"title":"NDJSON API","version":"1.0.0","description":"Work with NDJSON / JSON Lines — the one-JSON-value-per-line format used by application and audit logs, streaming and LLM responses, jq, BigQuery, Elasticsearch bulk and many data pipelines. The to-array endpoint parses an NDJSON stream into a regular JSON array; to-ndjson does the reverse, turning a JSON array into NDJSON (one compact value per line); and validate checks every line independently, reporting which lines are valid and the exact parse error for any that are not. Blank lines are ignored. Perfect for log processing, ETL, data import/export and stream debugging. Pure local computation — no key, no third-party service, instant; up to 4 MB via POST. Live, nothing stored. 4 endpoints. Distinct from JSON validation/formatting and from CSV tooling.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/ndjson-api","description":"oanor gateway"}],"tags":[{"name":"NDJSON"},{"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/to-array":{"get":{"operationId":"get_v1_to_array","tags":["NDJSON"],"summary":"NDJSON to JSON array","description":"","parameters":[{"name":"ndjson","in":"query","required":true,"description":"NDJSON text","schema":{"type":"string"},"example":"{\"id\":1,\"name\":\"Alice\"}\n{\"id\":2,\"name\":\"Bob\"}"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"array":[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}],"count":2},"meta":{"timestamp":"2026-06-03T01:09:43.923Z","request_id":"fb2e7503-ddbb-4986-9d0f-c0fb24f7f8ea"},"status":"ok","message":"NDJSON to JSON array","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/to-ndjson":{"get":{"operationId":"get_v1_to_ndjson","tags":["NDJSON"],"summary":"JSON array to NDJSON","description":"","parameters":[{"name":"json","in":"query","required":true,"description":"JSON array","schema":{"type":"string"},"example":"[{\"id\":1},{\"id\":2}]"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":2,"ndjson":"{\"id\":1}\n{\"id\":2}"},"meta":{"timestamp":"2026-06-03T01:09:44.006Z","request_id":"0c3ca996-4d3b-496d-bf38-598c7292b66c"},"status":"ok","message":"JSON array to NDJSON","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/validate":{"get":{"operationId":"get_v1_validate","tags":["NDJSON"],"summary":"Validate NDJSON line by line","description":"","parameters":[{"name":"ndjson","in":"query","required":true,"description":"NDJSON text","schema":{"type":"string"},"example":"{\"id\":1,\"name\":\"Alice\"}\n{\"id\":2,\"name\":\"Bob\"}"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"lines":[{"line":1,"valid":true},{"line":2,"valid":true}],"all_valid":true,"total_lines":2,"valid_lines":2,"invalid_lines":0},"meta":{"timestamp":"2026-06-03T01:09:44.087Z","request_id":"a1d83896-b4ca-40da-bc63-3a86310a677d"},"status":"ok","message":"Validate NDJSON line by line","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":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"NDJSON API","notes":"Blank lines are ignored. to-array fails on the first invalid line; validate reports every line. Max 4 MB; send via POST.","version":"v1","endpoints":[{"path":"/v1/to-array","params":{"ndjson":"NDJSON text (required)"},"returns":"a JSON array of the parsed lines"},{"path":"/v1/to-ndjson","params":{"json":"a JSON array (required)"},"returns":"NDJSON text (one value per line)"},{"path":"/v1/validate","params":{"ndjson":"NDJSON text (required)"},"returns":"per-line validity with error messages"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Convert between NDJSON / JSON Lines (one JSON value per line) and a JSON array, in both directions, and validate an NDJSON stream line by line. NDJSON is the format used by logs, streaming APIs and LLM responses, jq, BigQuery and many data pipelines. Pure local, no key."},"meta":{"timestamp":"2026-06-03T01:09:44.176Z","request_id":"5855095d-8978-4eab-bed2-2c3c2527a1da"},"status":"ok","message":"Meta","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":1015,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":55,"monthly_call_quota":8550,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2045,"monthly_call_quota":136500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5845,"monthly_call_quota":720000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/ndjson-api"}