# Remediate > Remediate checks PDFs for accessibility and fixes them, so people who use screen readers can > read them. Checking tests a PDF against the PDF/UA standard (PDF/UA-1 or PDF/UA-2) and lists > each problem with how to fix it by hand. Fixing marks up the headings, paragraphs, lists and > tables, puts everything in reading order, sets the title and language, and fixes fonts so > every word can be read aloud. Claude writes the image descriptions and decides what screen > readers should skip. Nobody has to answer questions along the way. You get the fixed PDF and > a list of what changed. By Turbo Puffin LLC. - API: https://api.remediate.now. Web app: https://remediate.now/app. - Auth: an org API key, `Authorization: Bearer rmd_live_…`. A key works in its own org only. - Every route is under `/v1/orgs/{org}`. The org id looks like `org_01k8a4z7m2q9x3v5c6b7n8p9rt` and is on the API keys page. - Billing: every org needs a plan. There's no free tier; without a plan, calls answer 402 `subscription_required`. Fixing a file counts its pages once a month, however many times you fix it. Checking doesn't use any pages. It has a monthly safety limit (429 `quota_exceeded`; failed checks don't count). - Errors: `{"error": {"code", "message"}}`. The codes are listed in the spec and don't change. - Limits: 50 MB and 2,000 pages a file. Stored documents are deleted after 30 days. ## Spec - [OpenAPI 3.1](https://api.remediate.now/openapi.json): every route, field and error code. ## Endpoints The paths use the API's own words: `validate` checks, `remediate` fixes. - `POST /v1/orgs/{org}/validate?profile=ua1|ua2`: send the PDF as the body (or multipart field `file`). Returns `{compliant, issues[{rule, title, message, count, wcag, how_to_fix}], violations}`. Nothing is kept. - `POST /v1/orgs/{org}/remediate?format=pdf|json`: send the PDF; get the fixed PDF back. Nothing is kept. `format=json` returns the report (`changes[{area, message, by}]`, `issues_before`, `issues_after`, `figures`) with the PDF in `pdf_base64`. - `POST /v1/orgs/{org}/documents`: upload a PDF to keep for 30 days. It's checked at once (`status: validated`). - `POST /v1/orgs/{org}/documents/{id}/remediate`: fix a stored document. Answers 202 with `status: remediating`; poll `GET /v1/orgs/{org}/documents/{id}` until it's `remediated` or `failed`. Add `?wait=true` to get the answer when it's done. - `PATCH /v1/orgs/{org}/documents/{id}`: correct image descriptions after a fix, with `{"figures": [{"id": "f1", "alt": "…"}, {"id": "f2", "decorative": true}]}`. Figure ids are in the report's `figures`. Your descriptions win over Claude's, and the document is fixed again (202, or `?wait=true`). In the same month this uses no more pages. 409 `not_remediated` before the first fix. - `GET /v1/orgs/{org}/documents/{id}/remediated`: the fixed PDF (409 `not_remediated` before). `…/original` is the file you uploaded. `…/figures/{fig}/image` is a figure cropped from its page, as PNG. ## What Claude sees Only what each decision needs: a figure's crop and the text near it, short snippets of hidden text, one page's image with its new paragraphs, and the opening text for the title and language.