---
title: "Read a public web page"
method: POST
path: "/web/read"
tags: ["Web"]
---

# Read a public web page

`POST /web/read`

## Request

- Base URL: `https://api.socially.run/v1`
- URL: `https://api.socially.run/v1/web/read`
- Auth: HTTP bearer

Fetch a public page through the proxy and return its readable text, title, description, images and ld+json. Pages that render with JavaScript are rendered when the budget allows (`render: auto`). Private and internal addresses answer 400 SSRF_BLOCKED. 1 credit on a miss, 0 on a hit (24 h).

## Request body

- object
  - `url` string, required: An http(s) URL.
  - `maxChars` integer: Cap on the readable text. Default 8,000.
  - `render` 'auto' | 'never' | 'always': `always` renders every time and never falls back to a plain fetch. It spends render budget and fails closed at RENDER_BUDGET_EXHAUSTED; a deployment with no renderer answers SIDECAR_UNAVAILABLE.
  - `refresh` boolean: Bypass the cache and the snapshot; costs a credit even when fresh.

## Response `200`

Read a public web page

- object
  - `data` unknown, required

## Other responses

- `400`: VALIDATION_ERROR / INVALID_TARGET / SSRF_BLOCKED: the issues, never the values.
- `401`: UNAUTHORIZED / INVALID_TOKEN: the key is missing or wrong.
- `402`: PAYMENT_REQUIRED / PLAN_GATE: clears by upgrading or buying credits, never by waiting.
- `429`: RATE_LIMIT_EXCEEDED / QUOTA_EXCEEDED: Retry-After says when it clears.
- `default`: Any other failure.

---

[API](https://skmtc.dev/socially/apis/socially-run-send-a-profile-link-get-its-public-data-as-json.md) · [All operations](https://skmtc.dev/socially/apis/socially-run-send-a-profile-link-get-its-public-data-as-json/llms.txt) · [OpenAPI document](https://skmtc.dev/socially/apis/socially-run-send-a-profile-link-get-its-public-data-as-json/revisions/5a0b24534b90?raw)
