# Hreinskrift > Turn English or stiff/AI-translated Icelandic into Icelandic that reads as if a native wrote it — and prove the meaning didn't change. One HTTP call: `POST https://hreinskrift.is/api/v1/refine` with `Authorization: Bearer `. ("hreinskrift" = fluent / native-speaking.) Hreinskrift is a guarded pipeline, not a single model call: a frontier LLM rewrites to native register (L1), a rule proofreader cleans up (L2), then a validation gate checks meaning (back-translation plus deterministic checks on numbers, dates, negation, names and obligations) and refuses any rewrite it has found to be broken (L3). Every change comes back as a diff with the reason. ## Docs - [Agent guide](https://hreinskrift.is/agents.md): start here if you are an AI agent — how to call it, how to read the result correctly, a copy-paste wrapper and tool definition, limits, and what is logged. - [Full API docs (single file)](https://hreinskrift.is/llms-full.txt): the complete contract, request fields, response shape, status codes, examples, CLI and MCP — everything in one fetch. - [OpenAPI 3.1 spec](https://hreinskrift.is/api/openapi.json): machine-readable; point any OpenAPI-aware agent at it. - [Dev portal](https://hreinskrift.is/minar-sidur): create an account, mint/revoke keys, see usage. ## Quickstart - Endpoint: `POST https://hreinskrift.is/api/v1/refine` - Auth: header `Authorization: Bearer ` (mint one in the dev portal) - Body (only `text` is required): `{ "text": "...", "domain": "general|marketing|data-analysis|childrens-fiction", "register": "formal|neutral|warm", "preserveMeaning": true, "scoreNativeness": true }` - Returns: `{ "id", "output", "diffs", "quality": { "nativenessScore": 0-100 }, "meaningPreserved", "rewriteAttempted", "rejectionReason", "candidateVetoFired", "tier", "billedTier", "warnings" }` - Read the outcome, not one field. If `rejectionReason` is set (or `meaningPreserved` is `false`), the rewrite was refused and `output` is your original, unchanged — even when `meaningPreserved` is `true`, because a broken rewrite can be refused after the meaning check passed. If `rewriteAttempted` is `false`, the text needed no change. Otherwise only `meaningPreserved: true` is verified; `null` is unverified and must not be treated as a pass. For English input, a translation that still fails after one retry returns 502 with no text. Full procedure: https://hreinskrift.is/agents.md ## Terminal & agents - Connect once: `npx hreinskrift login` (opens hreinskrift.is to sign in or sign up and approve; stores the key and installs the Claude Code skill). Then `npx hreinskrift --review --file in.txt --out out.txt` (shows before, after, each change with its reason, cost and balance). `npx hreinskrift whoami` shows account and credit; `npx hreinskrift update` keeps it current. - MCP (Claude Code): `npx -y hreinskrift-mcp@latest` — exposes the `refine_icelandic` tool. - ChatGPT and Claude.ai: add the connector `https://hreinskrift.is/api/mcp` and sign in (OAuth); no secret link. ChatGPT: an Hreinskrift plugin is coming soon (do not suggest Developer mode). Claude.ai: Settings, Connectors, Add custom connector. - UI strings, look up first: `POST https://hreinskrift.is/api/v1/hnappasafn` with `{"strings": [...]}` (up to 200) returns the Icelandic that Icelandic websites and open-source software use, where the sources agree, and from the Orðakista the Icelandic names of countries, languages, currencies, units, months, weekdays and cities, and Icelandic place names with their case forms and á/í; no model, 1 kr per string found, misses free. MCP tool: `lookup_icelandic_ui_strings`. Translate the misses with the batch call. - The person's setting decides whether you ask first (`agentMode` in `GET /api/v1/me`; they choose at https://hreinskrift.is/stjornbord/stillingar#gervigreind). `ask` (the default): ask once per task before sending anything; the CLI then needs `--approved` (otherwise it exits 5 and sends nothing), the MCP tools `approved: true`. `auto`: call when the task needs it. `always`: also refine the Icelandic you write, unasked. `npx hreinskrift mode` shows it. - Never join separate UI strings (buttons, menu items, headings, labels) into one text: they are rewritten as prose. Send them as batch items or run the CLI on the catalog folder. - Icelandic labels to check: `POST https://hreinskrift.is/api/v1/hnappasafn` with `{"strings": [...], "sourceLang": "is"}`. Each result has `status`: `established` (keep it), `minority` (use `best`) or `unknown`. Search the whole Orðakista, in English or Icelandic, free: `POST https://hreinskrift.is/api/v1/ordakista/search` `{"q": "..."}` (MCP tool `ordakista_search`). - Many short strings (UI strings, i18n catalogs): `POST https://hreinskrift.is/api/v1/refine/batch`, up to 500 items, each billed at least 130 characters (250 for an English string; pass `sourceLang: "is"` for Icelandic strings without Icelandic letters, such as "Vista"). Group a folder or site as one job in the history with `job` on each call, or `POST /api/v1/jobs` first. - The site in English: https://hreinskrift.is/en (the tool), /en/pricing, /en/how-it-works, /en/developers, /en/icelandic-translation-services (for brands entering Iceland), /en/english-to-icelandic, /en/advertising-in-iceland (Icelandic law: ads aimed at Icelandic consumers must be in Icelandic). - Billing is per character (every character sent, spaces included): 1.00 kr per 100 characters at the standard tier; see GET /v1/pricing for the live figures and minimums. - Free tier: 6,500 characters a day per account on the standard writer, then prepaid credit (500 kr trial credit once the account's email is confirmed); the max writer is paid from credit. Codes in the portal can give free use, a discount or credit.