This parse error isn't at position 4471 —
it is on line 3, column 15.

Paste a URL or a blob of JSON. Rawtell parses it and, when it fails, points at the exact line and column and says what was expected there in plain language. For a URL it also reports what the server actually sent — content-type, whether the body is JSON at all, and whether a JSON error object is dressed as a success.

What you see instead of "unexpected token at position 4471"

Server returned 200 claiming application/json. The body:
{"status":"ok","data":{"id":42,"name":"Rawtell"},"error":null,"timestamp":"2026-08-30T10:00:00Z"}
That is valid JSON. Here is what a broken response looks like:
1 {"status":"ok","data":{"id":42,"name":"Rawtell",
2 "error":null,"timestamp":"2026-08-30T10:00:00Z"
3 ⟵HERE⟶
4 }
Parse error at line 3, column 1. Expected a comma before this key. Line 1 ends with a comma after "Rawtell" — the comma closes the object's last entry, so line 3 has nothing to start.

The tool does not guess. It quotes the byte that failed and says what was expected there.

When you reach for Rawtell

A third-party API that sometimes returns HTML

An endpoint with content-type application/json that, under error conditions, returns a 200 OK with an HTML error page. Rawtell flags the mismatch — content-type says JSON, but the body starts with <!DOCTYPE html>.

A JSON parse error from curl or Postman

The error message says "unexpected token at position 4471". Finding line 47, column 8 by counting characters is manual work. Rawtell tells you the line and column directly, with surrounding context and a marker at the exact failure point.

A response that claims to be valid JSON but cannot be parsed

A server sends content-type: application/json and a body that is actually a serialised error, a stack trace, or a malformed object. Rawtell parses the content-type claim and the body as two separate pieces of evidence and shows you the gap.

Wondering whether a parse failure is your fault or the server's

If the server returned a non-2xx status, Rawtell marks every derived verdict as not established. If the content-type contradicts the body, that is flagged. The tool only reports what arrived — it does not guess whose problem it is.

"Feels like reading a forensic report — clean, cold, precise, with every piece of evidence quoted directly and labelled clearly."