# Glossa > Glossa is an AI-native translation management system: push any translation file, get every language translated by Claude, dedupe strings across apps, and let agents review, audit and improve your translations over MCP, CLI and API. Glossa is made by Meter. Every dashboard action is an op, available as REST (`POST https://getglossa.dev/api/v1/{op}`), as an MCP tool (https://getglossa.dev/api/mcp, streamable HTTP) and as a CLI command (`npx @meterapp/glossa `). Authenticate with `Authorization: Bearer gls_…` (a workspace API key) or OAuth on the MCP endpoint. ## Docs - [Overview](https://getglossa.dev/docs): What Glossa is, its concepts and every way to drive it. - [Quickstart](https://getglossa.dev/docs/quickstart): Push your first file, get it translated and pull every locale back in five minutes. - [Language picker and badge](https://getglossa.dev/docs/language-picker): Add a language picker, the Translated by Glossa badge and machine-readable attribution to a Next.js site with @meterapp/glossa-next. - [Release gate](https://getglossa.dev/docs/release-gate): Block a deploy until every string in the commit is translated, with one check from CI, the CLI, MCP or REST. - [CLI](https://getglossa.dev/docs/cli): Push, pull and run any op from a terminal or CI with the Glossa CLI. - [MCP and agent plugins](https://getglossa.dev/docs/mcp): Connect Claude Code, Codex, Cursor and any MCP client to Glossa. - [REST API reference](https://getglossa.dev/docs/api): Every op, its input schema and a curl example, generated from the ops registry. - [Errors](https://getglossa.dev/docs/errors): RFC 9457 problem responses and every error code the API returns. - [File formats](https://getglossa.dev/docs/formats): Built-in formats, how plurals and placeholders round-trip, and how unknown formats are learned. - [Review queue](https://getglossa.dev/docs/review-queue): Merge reviews, low-confidence translations, audit findings and suggested rules, built for agents to work through. - [Audits, glossary and rules](https://getglossa.dev/docs/audits-and-rules): Ask how a language is doing, turn the findings into fixes and make every future translation better. - [Workspaces, teams and sharing](https://getglossa.dev/docs/workspaces): Invite people, give them roles, group them in teams and share restricted projects with a team or a person. - [Feedback and reviews](https://getglossa.dev/docs/feedback): Request features, report issues with the failing request attached, upvote, comment and review, from the board, MCP, the CLI or REST. ## Machine-readable - [agents.md](https://getglossa.dev/agents.md): Concise guide for coding agents: auth, ops, workflows and rules. - [llms-full.txt](https://getglossa.dev/llms-full.txt): Everything in one file, including every op's JSON input schema. - [OpenAPI 3.1](https://getglossa.dev/openapi.json): Every op as POST /api/v1/{op}. - [Op catalog](https://getglossa.dev/api/v1): JSON list of every op with its input schema. - [MCP server card](https://getglossa.dev/.well-known/mcp.json) - [OAuth protected resource metadata](https://getglossa.dev/.well-known/oauth-protected-resource) ## Ops - `get_workspace` (read): Get workspace. The workspace this credential belongs to: name, source locale, the product context every AI prompt starts with, and merge_policy (how strings shared by several keys are reviewed). - `update_workspace` (write): Update workspace. Change the workspace name, source locale, product context or merge_policy. - `get_stats` (read): Get stats. Counts across the workspace (projects, units, keys, open tasks) and per-locale translation coverage per project. - `list_activity` (read): List activity. Who changed what, from which surface (dashboard, api, mcp, cli, ai), newest first. - `get_referral_stats` (read): Referral signups (staff). Glossa team only. - `get_profile` (read): Get my profile. Your own settings, the same in every workspace: `locale`, the language the dashboard and every email to you are written in (one of en, es, de, fr, ja, pt-BR), or null when you never chose one (the dashboard then follows the browser, emails are English). - `update_profile` (write): Update my profile. Changes your own settings: `locale` (en, es, de, fr, ja, pt-BR) is the language of the dashboard and of every email Glossa sends you; null forgets it. - `list_projects` (read): List projects. Every project (app) in the workspace you can see, with its target locales, translation_mode (ai or agent), visibility (org or restricted) and your access (read, write or admin). - `create_project` (write): Create project. Add a project (one app, site or service) with the locales it ships in and who translates it (translation_mode: ai by default, or agent to have an agent fill translations from the codebase). - `update_project` (write): Update project. Change a project's name, description, product_context (replaces the workspace's context for its strings; null goes back to the workspace's), inherit_glossary, inherit_rules, unit_pool (which projects share its strings and translations), target locales, locale aliases, translation_mode or retranslate_stale. - `list_files` (read): List files. Files of a project. - `push_file` (write): Push file. Upload a translation file in any format (JSON, YAML, xcstrings, .strings, stringsdict, strings.xml, PO, XLIFF, ARB, properties, RESX, CSV, or one Glossa learned). - `pull_file` (read): Pull file. Render one locale of a file in its own format, ready to write to disk. - `check_sync` (read): Check release. The release gate: is this commit fully translated, and are its locale files what pull writes now? - `detect_format` (read): Detect format. Which format Glossa would read a file as, with confidence and the runner-up candidates. - `list_formats` (read): List formats. Built-in formats and the templates this workspace has learned, with their status. - `learn_format` (write): Learn format. Ask the AI to write a template for a file format Glossa can't read yet, from a sample. - `approve_format` (write): Save or retire a format. Set a learned format's status (active reads files, retired stops). - `search_units` (read): Search strings. Full-text and fuzzy search across every source string, key name and translation in the workspace. - `list_units` (read): List strings. Page through units (deduplicated source strings) with their translation in one locale. - `get_unit` (read): Get string. One unit with every key that uses it (across projects and files, each with its code_context and context_quality from set_key_context), all its translations (AI ones with the model's confidence, context_quality and context_note) and their history. - `update_unit` (write): Update string context. Set a unit's description (context for translators and the AI), max length or tags. - `set_translation` (write): Set translation. Write or correct a unit's translation in one locale. - `list_missing_translations` (read): List missing translations. The worklist for an agent that translates with the codebase in view instead of (or before) AI auto-translation: units still missing a translation in a project's target locales (or the `locales` you pass), each with the locales it lacks, icu_plural_categories for ICU messages (locale → argument → the CLDR categories its plural branches must have there; translate only branch text and keep arguments, # and tags), every key that uses it (key_id, key name, project, file path, file comment, the code_context already recorded with set_key_context, and previous_source_text when the key's source changed and its old translation went stale) so you can find where it appears in the code, its description, placeholders, max length, matching glossary terms and existing translations in other locales. - `list_stale_translations` (read): List stale translations. Keys whose source text changed meaning on a push (a case or placeholder rename does not count), newest first: the key, its file path, the previous and current source text, when it changed, and for each target locale the state of the new text's translation — missing (being translated again, or waiting in list_missing_translations in agent mode), needs_review (the old translation kept for review when the project's retranslate_stale is off) or its status once settled. - `list_translations_for_audit` (read): List translations for audit. The worklist for an agent that audits a locale inline with the codebase in view, instead of run_audit filing queue tasks: existing translations in one locale, most recently changed first, each with its source text, status, origin, every key that uses it (key name, project, file path, file comment) so you can read the call site, its description, placeholders, max length, matching glossary terms and flags for what deserves a look first (placeholder_mismatch, glossary_miss, same_as_source, short_label, fragment, no_context). - `submit_translations` (write): Submit translations. Write up to 200 translations at once (unit, locale, text), typically the ones list_missing_translations asked for, written by an agent that read the code where each key is used. - `review_translations` (write): Review translations. Mark many translations reviewed, approved or needs_review at once, by unit and locale. - `translate` (write): Translate. Queue AI translation. - `merge_units` (write): Merge strings. Point every key of the `merge` units at the `into` unit, so they share one translation per locale. - `split_key` (write): Split key. Give one key its own unit using that key's source text and placeholder names (copied translations are remapped to match) so it can be translated differently from the other keys that shared the string. - `set_key_context` (write): Set key context. Record where up to 200 keys of one project are used in the source code, written by an agent that read the call sites: usages (path, line and a few lines of code around each), the UI role (button, status, label, title…), the screen and a note on what it means there. - `list_weak_context` (read): List weak-context translations. AI translations the model rated as written without enough context to know what the string means (context_quality weak or missing), one entry per string: its source text, description, each key that uses it (key_id, key, project, file path, comment and the code_context already recorded, with its rating) and, per locale, the translation, its status, the model's confidence and context_needed (the question that would settle it, e.g. - `scan_duplicates` (write): Scan for near-duplicates. Queue a scan for near-duplicate strings (same meaning, slightly different text) and file merge_suggestion tasks for them. - `list_tasks` (read): List review tasks. The review queue, highest priority first. - `claim_tasks` (write): Claim review tasks. Claim up to `limit` open tasks so parallel agents don't work the same ones. - `resolve_task` (write): Resolve review task. Decide a task by naming one of its actions (merge_review: keep_merged | split; merge_suggestion: merge_into_a | merge_into_b | keep_separate; learn_format: keep | retire | retry_with_hint | dismiss; translation_review: approve | edit | retranslate; audit_finding: apply | edit | dismiss; rule_suggestion: add | edit | dismiss; glossary_suggestion: add | dismiss). - `resolve_tasks` (write): Resolve review tasks in a batch. Decide 1–50 tasks in one call, e.g. - `recheck_merge_reviews` (write): Recheck merge reviews. Re-apply the workspace's merge_policy (get_workspace) to every open merge_review. - `list_glossary` (read): List glossary. Glossary terms: brand and product names that are never translated, and terms with a fixed translation per locale. - `upsert_glossary_term` (write): Add or update glossary term. Add a term or change it. - `delete_glossary_term` (write): Delete glossary term. Remove a glossary term; future translations no longer enforce it. - `list_rules` (read): List translation rules. Standing instructions appended to every translation prompt, globally or for one locale, for the whole workspace or one project (project is null on workspace rules). - `add_rule` (write): Add translation rule. Add a standing instruction for future translations, e.g. - `update_rule` (write): Update translation rule. Edit a translation rule's text, or set active=false to stop adding it to translation prompts. - `run_audit` (write): Run audit. Ask the AI to review one locale holistically ("How is our Spanish? - `get_audit` (read): Get audit. An audit's answer, score and findings (empty while its job runs; see job_status). - `list_audits` (read): List audits. Past locale audits with their summary and score, newest first. - `import_app_reviews` (write): Import app reviews. Store App Store and Google Play reviews of a project's app, each with the language it is written in, so agents writing or translating store listings and marketing copy can read how users talk about the app in each language (list_app_reviews). - `list_app_reviews` (read): List app reviews. Read a project's App Store and Google Play reviews, newest first, to learn how users describe the app in a language before writing or translating store listings, release notes or marketing copy: the words they use for features, what they praise (rating 4–5) and what they complain about (rating 1–2). - `get_app_review_stats` (read): App review stats. How many App Store and Google Play reviews a project has per language and store, their average rating, how many are 1–2 stars and the newest review's date. - `delete_app_reviews` (write): Delete app reviews. Remove stored app reviews from a project: the given review ids, every review from one store, or (all=true) every review of the project. - `get_job` (read): Get job. Status and output of a background job (translate, learn_format, audit, dedupe_scan). - `cancel_job` (write): Cancel job. Cancel a queued or running background job. - `list_jobs` (read): List jobs. Recent background jobs (translate, learn_format, audit, dedupe_scan) with status and errors, newest first. - `list_members` (read): List members. Everyone in this workspace with their email, role (owner, admin, member, viewer) and teams. - `list_invites` (read): List invites. Pending invitations to this workspace (email, role, teams, who invited, when it expires). - `list_teams` (read): List teams. Teams in this workspace with their members (maintainer or member) and the projects shared with each team. - `create_team` (write): Create team. Create a team (a group of members to share projects with). - `update_team` (write): Update team. Rename a team or change its description. - `delete_team` (write): Delete team. Delete a team. - `set_team_member` (write): Add to team. Add a workspace member to a team, or change their team role (maintainer manages the team; member is in it). - `remove_team_member` (write): Remove from team. Take someone out of a team (they stay in the workspace). - `list_project_access` (read): List project access. Who can see a project: its visibility (org or restricted), its creator, and every grant to a team or person with its access (read, write, admin). - `set_project_visibility` (write): Set project visibility. org: every workspace member sees the project (viewers read, members write). - `share_project` (write): Share project. Give a team or a person read, write or admin access to a project (replacing what that team or person had). - `unshare_project` (write): Unshare project. Remove a team's or person's grant on a project. - `list_audit_log` (read): List audit log. Membership, role, team, invite, API key, billing, settings and sharing changes in this workspace, newest first: who (a person, an API key, an OAuth client or the system), what, to what, and when. - `list_api_keys` (read): List API keys. API keys of this workspace (prefix only; the full key is shown once at creation), each with the role it acts with and who created it. - `create_api_key` (write): Create API key. Create a workspace API key for the CLI, MCP or CI. - `revoke_api_key` (write): Revoke API key. Revoke an API key immediately; every CLI, CI job or MCP host using it stops working. - `get_pricing` (read): Get pricing. The plans (Free, Pro, Team, Enterprise): price {monthly, yearly} in USD, included AI translations a month, limits (members, projects; null is unlimited), features, overage, a checkout_url per paid plan, and how_to_buy. - `get_account` (read): Get account. Who this credential acts for and what it may use: the workspace, your role in it (viewer, member, admin, owner) and whether you are a person, an OAuth client or an API key (acting_as), the plan in force (status, interval, renewal or end date), usage this calendar month against every limit (AI translations, members, projects) with what remains, and next_tier: what the next plan adds, its price and a checkout_url. - `get_billing` (read): Get billing. This workspace's plan, subscription status, renewal or end date, whether a card is saved (so subscribe can charge it), and usage this month against the plan (AI translations, members, projects). - `create_checkout_link` (write): Create checkout link. A Stripe Checkout URL where a human pays for a plan; hand it to them (or open it in their browser). - `subscribe` (write): Subscribe. Start or change this workspace's paid plan in one call, charging the card already saved for the workspace. - `cancel_subscription` (write): Cancel subscription. Cancel the paid plan at the end of the current period (no refund; the plan stays until then, then the workspace is on Free). - `resume_subscription` (write): Resume subscription. Undo a cancellation that has not taken effect yet, so the plan renews as before. - `claim_checkout` (write): Claim checkout. Attach a checkout paid before signup (create_checkout_link without a credential) to this workspace, by its session_id (cs_…). - `create_billing_portal_link` (write): Create billing portal link. A private Stripe page where a human downloads invoices, updates the card or billing details, or cancels. - `get_billing_link` (write): Get billing link. The Stripe customer portal for a human: invoices, card and billing details, plan change and cancellation. - `list_feedback` (read): List feature requests and issues. The Glossa feedback board: feature requests every customer can see, plus your own issue reports (and ones the team published), with status and upvotes, most upvoted first. - `get_feedback` (read): Get a feature request or issue. One feedback item with its status, upvotes, comments (oldest first; official answers from the Glossa team are marked `official`) and its timeline of status changes with the team's notes. - `list_my_feedback` (read): List my feedback and subscriptions. What your workspace filed (every status), the items you get email about (filed, upvoted, commented, followed) with whether you muted them, your workspace's review, and whether feedback email reaches you. - `request_feature` (write): Request a feature. Files a feature request on the Glossa board and upvotes it for your workspace. - `report_issue` (write): Report an issue. Reports a problem with Glossa itself: a failing or wrong call (pass the request_id from the error or the X-Request-Id header, and the op), a file that does not round-trip, a translation the pipeline mangled, a docs error. - `upvote_feedback` (write): Upvote a feature request or issue. Adds your workspace's upvote to a feature request or issue ("me too"); votes decide what gets built and fixed first, and you get an email when its status changes. - `remove_feedback_vote` (write): Remove an upvote. Takes back your workspace's upvote on a feature request or issue, and stops its emails unless you filed or commented on it. - `comment_on_feedback` (write): Comment on a feature request or issue. Adds context to an existing feature request or issue: your use case, another failing request, a workaround. - `set_feedback_subscription` (write): Start or stop feedback emails. With id: start or stop emails about one feature request or issue. - `submit_review` (write): Post or edit a review. Posts your workspace's public review of Glossa (1–5 stars, what you like, what you don't, what you use it for), or edits it (once an hour; earlier versions are kept). - `list_reviews` (read): List reviews. Published reviews of Glossa with the aggregate (average rating, count and distribution) and the team's responses. - `update_feedback` (write): Update feedback (staff). Glossa team only. - `respond_to_feedback` (write): Respond officially (staff). Glossa team only. - `respond_to_review` (write): Respond to or moderate a review (staff). Glossa team only. ## Pricing Unit: AI translation: one source string translated into one locale by Claude. Imports, reviews and human or agent edits are free. Yearly is two months free. The full pricing document (JSON, no credential, the same shape on every Meter product): `GET https://getglossa.dev/api/v1/pricing`; MCP `get_pricing` (also on the no-auth catalog server https://getglossa.dev/api/mcp/catalog); human page: https://getglossa.dev/pricing. - Free (`free`): free. 2,000 AI translations a month, 3 members, 3 projects. For trying Glossa on one app. - Pro (`pro`): $49/month or $490/year. 25,000 AI translations a month, 10 members, unlimited projects. For a product team shipping in many languages. Buy: https://getglossa.dev/checkout?plan=pro&ref=agent - Team (`team`): $199/month or $1,990/year. 150,000 AI translations a month, unlimited members, unlimited projects. For companies localizing several apps and sites. Buy: https://getglossa.dev/checkout?plan=team&ref=agent - Enterprise (`enterprise`): custom. Volume AI translations a month, unlimited members, unlimited projects. For larger volumes, security reviews and invoicing. Overage: Nothing is charged for going over: usage is reported against the plan (get_account), not enforced yet. Upgrade for a larger allowance, or email for volume. Buying a plan (never collect card details; the human pays on Stripe): - MCP `create_checkout_link`, CLI `glossa upgrade --plan pro [--yearly]`, REST `POST /api/v1/billing/checkout` return a Stripe Checkout URL for a human. Nothing is charged until they complete it. - Before signup: create_checkout_link needs no account: without a credential it returns a Stripe Checkout URL for a human. After paying they sign in to Glossa with any email; the subscription attaches to their workspace on return (or claim_checkout {session_id}). - With a saved card: subscribe {plan, interval, confirm: true} changes the plan on the workspace's saved card, only after a human approved the price. - Account and invoices: get_billing_link (invoices, card, cancel); get_account (plan, usage, what the next plan adds). REST `GET /api/v1/account`, `POST /api/v1/billing/portal`. - CLI: `npx @meterapp/glossa pricing [--json]`, `npx @meterapp/glossa account`, `npx @meterapp/glossa upgrade --plan pro [--yearly]`, `npx @meterapp/glossa billing portal`. ## Feedback and reviews Feature requests are public on https://getglossa.dev/feedback; issue reports are private to the reporter's workspace and the Glossa team (the team may publish a sanitized title so others can upvote it). Everyone who files, upvotes or comments is emailed at every status change (open → planned → in_progress → done, or declined, or merged as a duplicate). Reviews are public on https://getglossa.dev/reviews, one per workspace. Guide: https://getglossa.dev/docs/feedback. | action | MCP tool | CLI | REST | | --- | --- | --- | --- | | list / search the board | `list_feedback` | `npx @meterapp/glossa feedback list` | `GET https://getglossa.dev/api/v1/feedback` (public) | | one item, comments, timeline | `get_feedback` | `npx @meterapp/glossa feedback show ` | `GET https://getglossa.dev/api/v1/feedback/{id}` | | my items and subscriptions | `list_my_feedback` | `npx @meterapp/glossa feedback mine` | `GET https://getglossa.dev/api/v1/feedback?mine=true` | | request a feature | `request_feature` | `npx @meterapp/glossa feedback request ""` | `POST https://getglossa.dev/api/v1/feedback/features` | | report an issue | `report_issue` (title, body, request_id, context) | `npx @meterapp/glossa feedback report "<title>" [--request-id id] [--last]` | `POST https://getglossa.dev/api/v1/feedback/issues` | | upvote / remove | `upvote_feedback` / `remove_feedback_vote` | `npx @meterapp/glossa feedback upvote <id> [--remove]` | `POST`/`DELETE https://getglossa.dev/api/v1/feedback/{id}/votes` | | comment | `comment_on_feedback` | `npx @meterapp/glossa feedback comment <id> "<text>"` | `POST https://getglossa.dev/api/v1/feedback/{id}/comments` | | post / edit a review | `submit_review` | `npx @meterapp/glossa review --rating 5 --body "…"` | `PUT https://getglossa.dev/api/v1/reviews/me` | | read reviews | `list_reviews` | `npx @meterapp/glossa reviews` | `GET https://getglossa.dev/api/v1/reviews` (public) | request_feature and report_issue look for duplicates first: an identical active item gets your vote instead, and likely matches come back in `similar` with `filed: false` (upvote one, or pass `force: true`). MCP tool errors end with the request id and a report_issue hint; the CLI remembers the last failed call for `feedback report --last`. ## Language picker and Translated by Glossa badge For a Next.js site translated with Glossa, `pnpm add @meterapp/glossa-next` (https://www.npmjs.com/package/@meterapp/glossa-next). `glossaAttribution({ project, site, locales })` (server-safe) returns the referral `href` (?ref=<project>), schema.org `jsonLd` (translator, inLanguage), a Next `metadata` fragment (translated-by meta tag), `headers` (X-Translated-By) and `llmsTxt()`. `@meterapp/glossa-next/react` has `LanguagePicker` (native language names, real hreflang links, works without JavaScript, sets NEXT_LOCALE, headless with a render slot for shadcn DropdownMenu/Select) and `TranslatedByGlossa` (the label in the page's language). Guide: https://getglossa.dev/docs/language-picker; what the badge means: https://getglossa.dev/translated-by. ## Formats - [Xcode String Catalog](https://getglossa.dev/formats/xcstrings): .xcstrings (all locales in one file) - [Flutter ARB](https://getglossa.dev/formats/arb): .arb - [JSON (key/value, i18next)](https://getglossa.dev/formats/json): .json - [YAML (Rails i18n)](https://getglossa.dev/formats/yaml): .yml, .yaml - [Apple .strings](https://getglossa.dev/formats/ios-strings): .strings - [Apple .stringsdict](https://getglossa.dev/formats/ios-stringsdict): .stringsdict - [Android strings.xml](https://getglossa.dev/formats/android-xml): .xml - [Gettext PO/POT](https://getglossa.dev/formats/gettext-po): .po, .pot - [XLIFF 1.2 / 2.0](https://getglossa.dev/formats/xliff): .xlf, .xliff (all locales in one file) - [Java .properties](https://getglossa.dev/formats/properties): .properties - [.NET RESX](https://getglossa.dev/formats/resx): .resx - [CSV / TSV (multi-locale)](https://getglossa.dev/formats/csv): .csv, .tsv (all locales in one file) ## Translations This site is written in English (`en`) and translated into Spanish (`es`, Español), German (`de`, Deutsch), French (`fr`, Français), Japanese (`ja`, 日本語) and Portuguese (Brazil) (`pt-BR`, Português (Brasil)) by [Glossa](https://getglossa.dev/translated-by), an AI-native translation management system. Every locale has its own URL, listed as hreflang alternates on each page. ## Optional - [Home](https://getglossa.dev/): Localization your AI agents can run. - [Pricing](https://getglossa.dev/pricing): Free for one app; Pro and Team priced by AI translations, not seats. - [Glossa vs Crowdin](https://getglossa.dev/compare/crowdin): How Glossa compares with Crowdin, feature by feature. - [Formats](https://getglossa.dev/formats): Every translation file format Glossa supports. - [Built for agents](https://getglossa.dev/agents): MCP, CLI, REST and plugins for coding agents. - [Install](https://getglossa.dev/install): Install the Glossa plugin in Claude Code, Codex or Cursor, or connect ChatGPT and any MCP client. - [Translated by Glossa](https://getglossa.dev/translated-by): What the Translated by Glossa link on a website means, and how to add the language picker and badge to your own site. - [Feedback](https://getglossa.dev/feedback): What customers asked for, what is planned and what shipped; upvote or ask for what you need. - [Reviews](https://getglossa.dev/reviews): Ratings and reviews of Glossa from the teams using it, with our replies. - [Privacy](https://getglossa.dev/privacy): What Glossa collects, which services process it and how to have it removed. - [Terms](https://getglossa.dev/terms): The terms for using Glossa during the beta.