Read · walls

When a link cannot be read.

Every read is the one GET below. A wall is not an error. The answer is 200 with content null and wall set: kind says why, hint says what to do next. Do not retry a wall.

00

The call

curl https://getjson.de/https://x.com/jack/status/20
01

login

When: The page answers 401, or a Google document is not shared with Anyone with the link. What getJSON answers: getJSON reads public pages only. Send the page as a PDF or text file instead.

curl https://getjson.de/https://httpbin.org/status/401
{
  "source": {
    "url": "https://httpbin.org/status/401",
    "finalUrl": "https://httpbin.org/status/401",
    "kind": "page",
    "platform": "web",
    "provider": "article-readability",
    "fetchedAt": "2026-10-27T21:24:18.614Z",
    "cached": false
  },
  "content": null,
  "meta": null,
  "wall": {
    "kind": "login",
    "message": "The page needs a login (HTTP 401).",
    "hint": "getJSON reads public pages only. Save the page as a PDF or text file and send the file instead."
  },
  "result": null
}

Recorded from https://getjson.de on 2026-10-27 with no key. Long text is cut and ends in " …".

02

bot_protection

When: The page answers 403, or a Cloudflare challenge (cf-mitigated: challenge). What getJSON answers: getJSON reads with a plain request and does not get past bot checks. Send the page as a PDF or text file instead.

curl https://getjson.de/https://www.reddit.com/r/programming/top.json
{
  "source": {
    "url": "https://www.reddit.com/r/programming/top.json",
    "finalUrl": "https://www.reddit.com/r/programming/top.json",
    "kind": "page",
    "platform": "web",
    "provider": "article-readability",
    "fetchedAt": "2026-10-27T21:24:18.856Z",
    "cached": false
  },
  "content": null,
  "meta": null,
  "wall": {
    "kind": "bot_protection",
    "message": "The site refused the read (HTTP 403).",
    "hint": "getJSON reads with a plain request and does not get past bot checks. Save the page as a PDF or text file and send the file instead."
  },
  "result": null
}

Recorded from https://getjson.de on 2026-10-27 with no key. Long text is cut and ends in " …".

03

no_text

When: A page with no text at all (a JavaScript shell), a scanned PDF or an image. What getJSON answers: For a page, the head metadata stays in meta. For a file, add a schema (budget mode, also without a key), or set model=ocr with a claimed key or an account.

curl https://getjson.de/https://www.reddit.com/r/programming/
{
  "source": {
    "url": "https://www.reddit.com/r/programming/",
    "finalUrl": "https://www.reddit.com/r/programming/",
    "kind": "page",
    "platform": "web",
    "provider": "article-readability",
    "fetchedAt": "2026-10-27T21:24:18.987Z",
    "cached": false
  },
  "content": null,
  "meta": {
    "title": "Reddit",
    "description": null,
    "siteName": null,
    "canonicalUrl": null,
    "lang": "en",
    "image": null
  },
  "wall": {
    "kind": "no_text",
    "message": "The page has no readable text: no article, no description and no body text.",
    "hint": "The page may build its text with JavaScript, which getJSON does not run. The title and the other head metadata are in meta."
  },
  "result": null
}

Recorded from https://getjson.de on 2026-10-27 with no key. Long text is cut and ends in " …". meta shows 6 of its fields.

04

no_text

When: An image behind a link. What getJSON answers: Add a schema (budget mode, also without a key), or set model=ocr with a claimed key or an account. A trial key runs the budget mode only.

curl https://getjson.de/https://www.w3.org/Icons/w3c_home.png
{
  "source": {
    "url": "https://www.w3.org/Icons/w3c_home.png",
    "finalUrl": "https://www.w3.org/assets/logos/w3c-2025-transitional/w3c-72x48.png",
    "kind": "file",
    "platform": "file",
    "provider": "file",
    "fetchedAt": "2026-10-27T21:24:36.459Z",
    "cached": false
  },
  "content": null,
  "meta": null,
  "wall": {
    "kind": "no_text",
    "message": "The file has no text layer (a scan or an image).",
    "hint": "Add a schema, or set model to \"ocr\" (a trial key runs \"budget\" only), to read it with a model. This costs credits."
  },
  "result": null
}

Recorded from https://getjson.de on 2026-10-27 with no key. Long text is cut and ends in " …".

05

unsupported

When: A GitHub file that is not text. What getJSON answers: Download the file and send it to POST /v1/extract with a key.

curl https://getjson.de/https://github.com/github/explore/blob/main/topics/javascript/javascript.png
{
  "source": {
    "url": "https://github.com/github/explore/blob/main/topics/javascript/javascript.png",
    "finalUrl": "https://github.com/github/explore/blob/main/topics/javascript/javascript.png",
    "kind": "file",
    "platform": "github",
    "provider": "github",
    "fetchedAt": "2026-10-27T21:24:19.252Z",
    "cached": false
  },
  "content": null,
  "meta": null,
  "wall": {
    "kind": "unsupported",
    "message": "The file is not a text file.",
    "hint": "Download the file and send it as multipart file to POST /v1/extract to extract it with a model."
  },
  "result": null
}

Recorded from https://getjson.de on 2026-10-27 with no key. Long text is cut and ends in " …".

06

too_large

When: A file over 5 MB without a key or with a trial key that is not claimed yet, or over 50 MB with a claimed key or an account. What getJSON answers: Files up to 50 MB need a claimed key or a full account.

curl https://getjson.de/https://upload.wikimedia.org/wikipedia/commons/3/3f/Fronalpstock_big.jpg
{
  "source": {
    "url": "https://upload.wikimedia.org/wikipedia/commons/3/3f/Fronalpstock_big.jpg",
    "finalUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/Fronalpstock_big.jpg",
    "kind": "file",
    "platform": "file",
    "provider": "file",
    "fetchedAt": "2026-10-27T21:24:36.076Z",
    "cached": false
  },
  "content": null,
  "meta": null,
  "wall": {
    "kind": "too_large",
    "message": "The file is larger than 5 MB.",
    "hint": "Files up to 50 MB need a claimed key or a full account."
  },
  "result": null
}

Recorded from https://getjson.de on 2026-10-27 with no key. Long text is cut and ends in " …".

07

Errors, not walls

The envelope type also names the kinds paywall, not_found and not_html. No provider sets them today.

  • The page answers 429 or 5xx: 502 with code "source_unavailable" and a hint to retry. When the page sent Retry-After, the answer carries it.
  • The page, post or document does not exist: 404 with code "not_found", for example {"error":"Google document not found.","code":"not_found","hint":null} (recorded 2026-10-27).
  • Too many reads: 429 with code "rate_limited" and Retry-After. 20 reads a minute per IP without a key.
08

What getJSON does not read

  • Reddit: the .json API answers 403 (bot_protection) and the HTML page is a JavaScript shell (no_text). Measured 2026-10-27.
  • LinkedIn, Instagram, TikTok, Facebook and Threads: not read in this round.
  • Paywalled content: never.
  • YouTube transcripts, audio, video and files over 50 MB: not read.
  • Pages that need JavaScript to show their text: getJSON does not run JavaScript.