Docs

How Sleekdocs Translate works

Everything from your first sign-in to deploying a language to production, and how to automate it with the API.

Getting started

  1. Sign in

    Use Google, Microsoft, or a one-time code sent to your email. The first time, an account is made for you.

  2. Join or create a team

    If you were invited, accept the invite and you're in. Otherwise create a team: you become its admin, and it starts with 14 days of Pro.

  3. Create a project and import your files

    Choose the primary language, add the languages you translate into, and import the JSON files you already have.

  4. Translate, publish and deploy

    Translate next to the primary text, publish a revision, and deploy it to development, test or production. Your app loads it from the Sleekdocs CDN.

Guides

Load the translations Sleekdocs deploys straight into your app.

Concepts

Team
Users belong to one or more teams. A team holds the projects its members work on, and is what's on a plan.
Project
An application being translated, with a primary language and one or more languages to translate into.
Revision
Publishing a language saves its texts as the next numbered revision. The texts you edit are the working copy until then.
Environment
Development, test and production. Deploying puts a revision's file on the CDN for one environment, so your test app and your live app can run different revisions.

Teams and roles

Each team member has one role, with the same permissions in every project in the team.

What each role can do
CanAdminCreatorEditor
Edit texts, import and export files, compare revisionsYesYesYes
Create API keys for themselvesYesYesYes
Create projects, add and delete languagesYesYesNo
Add, rename and delete keysYesYesNo
Invite and manage members, manage webhooks, see and revoke everyone's API keysYesNoNo

Deploying needs a separate right for each environment (development, test and production), which an admin gives in the member's settings. Publishing needs at least one of them. That way a translator can publish and deploy to test while only some people deploy to production.

Inviting members Admin

Choose Invite member on the team page and enter an email address and a role. The invite is emailed, and the person accepts it after signing in with that address.

The team log

The team's Log lists who did what: invites and members, projects and languages created or removed, and every publish and deploy, including changes made through the API.

Projects and languages

A project usually matches one application. Its Overview shows the languages, the number of keys and the project settings.

Primary language Creator

The language your developers write keys and texts in. Keys are added there, and the other languages are translated from it.

File format Creator

JSON - Flat keeps keys like menu.file.open on one level; JSON - Nested turns the dots into nested objects. Deployed and exported files use it, so pick what your i18n library reads.

Adding and deleting languages Creator

Use Add language on the Overview. Deleting a language also deletes its translations, revisions and deploy history.

Deleting a project Creator

Delete its languages first; then Delete project becomes available.

Translating

Open a language to see every key with the primary text next to the translation, and how far along it is: "120 of 140 translated · 86%".

Editing texts

Choose Enter edit mode, change as many texts as you like, then Save. A counter shows unsaved changes, and you're asked before leaving with changes unsaved.

Finding what to do

Search keys and texts, or filter on Untranslated or Same as primary, the texts that were copied but not yet translated.

Status at a glance

Each row is marked Translated, Untranslated or Same as primary, and Space at start or end flags stray spaces. Each language shows whether it has changed since it was last published.

Clean texts

Spaces at the start and end of keys and texts are removed when they're saved or imported, including no-break spaces, so they never end up in your app.

Adding and renaming keys Creator

In the primary language, Add translation key adds a key with its primary text. Select a key's name to rename it in every language at once.

Deleting keys Creator

Empty a key's text and choose Delete key in its row. Delete unused keys in the primary language removes keys that no language has a text for.

Import and export

Bring in the translation files your app already has, and take the texts out again at any time. Flat or nested JSON for translation files? explains the two file formats.

Importing a file

Choose a JSON file, flat or nested, up to 10 MB. Before anything changes you see a preview: which keys are created, updated, deleted or unchanged, with the old and new text for each update.

Update or replace

Update keeps existing texts and changes them from the file. Replace also removes texts for keys that aren't in the file. The first import into an empty language is kept as revision 0, the starting point.

Exporting

Download the working copy of a language as <language>.json, in the project's file format, with the keys sorted alphabetically.

Publishing and deploying

Nothing reaches your app until you publish and deploy, so translators can work on the next release while the current one stays live. Deploy translations without rebuilding your app explains why it works this way.

  1. Publish

    Saves a language's working copy as the next revision. Before you publish, View changes shows what was added, changed and removed.

  2. Deploy

    Puts a revision on the CDN for one environment, at https://cdn.sleekdocs.com/<project>/<environment>/<language>.json, and clears the CDN's cached copy so your app gets it at once.

The Release section

On the project's Overview, a table of languages and environments shows which have unpublished changes and which environments are behind. Publish and deploy several languages in one go.

Rolling back

Choose Deploy an older revision to put an earlier revision back in an environment. Compare any two revisions, or a revision with the working copy, to see what differs.

How long revisions are kept

The 10 newest revisions of each language are kept, together with revision 0 and any revision that's deployed somewhere.

API keys and the API

Read and change translations, publish and deploy from scripts and build pipelines. Every call is described in the API reference, and the paths stay stable: fields may be added, but nothing is removed or renamed. Automate translations with the Sleekdocs API shows the calls in a build pipeline and with an AI agent.

Creating a key

On the API keys page, name the key, limit it to one project or all, choose what it may do and how long it lasts: 8 hours, 7, 30 or 90 days, a year, or, for creators and admins, never. The key, starting sdt_, is shown once.

What a key may do

A key acts as you, with the scopes you chose: read, write (change texts), keys (add, rename and delete keys), publish, and deploy:dev, deploy:test or deploy:prod. It can never do more than your role allows today, and stops working if you leave the team.

Limits and revoking

Each key may make 120 requests a minute. The page shows when each key was last used, and revoking a key stops it at once.

Examples

Send the key as a bearer token. With these set:

API=https://translate.sleekdocs.com/api/v1/api/translate
PROJECT=<your project ID>
SLEEKDOCS_KEY=sdt_…

download the latest published Swedish file, flat:

curl -H "Authorization: Bearer $SLEEKDOCS_KEY" \
  "$API/projects/$PROJECT/languages/sv/file?revision=latest&format=flat"

Add or update keys from your code, first as a dry run that only reports what would change:

curl -X PATCH -H "Authorization: Bearer $SLEEKDOCS_KEY" -H "Content-Type: application/json" \
  "$API/projects/$PROJECT/keys" \
  -d '{"mode": "upsert", "dryRun": true,
       "items": [{"key": "checkout.title", "values": {"en": "Checkout", "sv": "Kassa"}}]}'

Publish the changed languages, then deploy the latest revision of all languages to test:

curl -X POST -H "Authorization: Bearer $SLEEKDOCS_KEY" -H "Content-Type: application/json" \
  "$API/projects/$PROJECT/publish" \
  -d '{"languages": "changed"}'

curl -X POST -H "Authorization: Bearer $SLEEKDOCS_KEY" -H "Content-Type: application/json" \
  "$API/projects/$PROJECT/deploy" \
  -d '{"env": "test", "languages": "all", "revision": "latest"}'

The API can also list keys that are untranslated or changed since the last publish, import whole files, compare revisions, and rename and delete keys. The API reference has every call.

Using an AI assistant such as Claude Code, Cursor or VS Code? Connect it with MCP and it can do all of this for you.

Webhooks

Sleekdocs can tell another service when a language is published or deployed, for example a Slack or Teams channel or your build server. A webhook covers a whole team or one project, and sends an HTTP POST with a JSON body you can shape with the language, revision, environment and user. A receiver that fails never stops the publish or deploy.

Team admins add webhooks on the team page, under Webhooks, and can send a test message to check the receiver. The address must be https, and the message can use ${language.code}, ${language.name}, ${revision}, ${env}, ${user.name} and ${user.email}.

Security and personal data

Sign-in goes through Clerk, with Google, Microsoft or a one-time email code, so Sleekdocs Translate never handles or stores a password. About you, we store your name and email address. Every request is checked against your role in the team that owns the project. The privacy policy has the details.