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.
Docs
Everything from your first sign-in to deploying a language to production, and how to automate it with the API.
Use Google, Microsoft, or a one-time code sent to your email. The first time, an account is made for you.
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.
Choose the primary language, add the languages you translate into, and import the JSON files you already have.
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.
Load the translations Sleekdocs deploys straight into your app.
Each team member has one role, with the same permissions in every project in the team.
| Can | Admin | Creator | Editor |
|---|---|---|---|
| Edit texts, import and export files, compare revisions | Yes | Yes | Yes |
| Create API keys for themselves | Yes | Yes | Yes |
| Create projects, add and delete languages | Yes | Yes | No |
| Add, rename and delete keys | Yes | Yes | No |
| Invite and manage members, manage webhooks, see and revoke everyone's API keys | Yes | No | No |
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.
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'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.
A project usually matches one application. Its Overview shows the languages, the number of keys and the project settings.
The language your developers write keys and texts in. Keys are added there, and the other languages are translated from it.
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.
Use Add language on the Overview. Deleting a language also deletes its translations, revisions and deploy history.
Delete its languages first; then Delete project becomes available.
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%".
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.
Search keys and texts, or filter on Untranslated or Same as primary, the texts that were copied but not yet translated.
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.
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.
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.
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.
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.
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 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.
Download the working copy of a language as <language>.json, in the project's file format, with the keys sorted alphabetically.
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.
Saves a language's working copy as the next revision. Before you publish, View changes shows what was added, changed and removed.
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.
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.
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.
The 10 newest revisions of each language are kept, together with revision 0 and any revision that's deployed somewhere.
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.
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.
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.
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.
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.
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}.
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.