Skip to main content
A project is the top-level container for your localization work. Each project has a source language (the language your strings are written in) and one or more target languages that you want to translate into. All translation keys, translations, AI jobs, imports, and exports live under a project. Projects are scoped to an organization. API tokens are associated with an organization, so all project endpoints automatically filter to the organization that owns the token.

Endpoints

POST   /api/projects                        Create a project
GET    /api/projects                        List projects
GET    /api/projects/:id                    Get a project
PATCH  /api/projects/:id                    Update a project
DELETE /api/projects/:id                    Archive a project
DELETE /api/projects/:id/permanent          Permanently delete a project
POST   /api/projects/:id/languages          Add a target language
DELETE /api/projects/:id/languages/:lang    Remove a target language

Create a Project

curl -X POST https://app.nt3.io/api/projects \
  -H "X-API-Key: entri_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Marketing Website",
    "description": "All strings for the public marketing site",
    "sourceLanguage": "en",
    "targetLanguages": ["fr", "de", "es"]
  }'
Response:
{
  "_id": "proj_6abc123def456",
  "name": "Marketing Website",
  "description": "All strings for the public marketing site",
  "sourceLanguage": "en",
  "targetLanguages": ["fr", "de", "es"],
  "organization": "org_789xyz",
  "createdAt": "2025-03-01T10:00:00.000Z",
  "updatedAt": "2025-03-01T10:00:00.000Z"
}

List Projects

Returns all projects belonging to your organization.
curl https://app.nt3.io/api/projects \
  -H "X-API-Key: entri_your_token_here"

Get a Project

curl https://app.nt3.io/api/projects/proj_6abc123def456 \
  -H "X-API-Key: entri_your_token_here"

Update a Project

All fields are optional — only the fields you include will be updated.
curl -X PATCH https://app.nt3.io/api/projects/proj_6abc123def456 \
  -H "X-API-Key: entri_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{"description": "Updated description"}'

Archive a Project

Deleting a project archives it rather than permanently destroying it. Archived projects and their data are retained for a recovery period.
curl -X DELETE https://app.nt3.io/api/projects/proj_6abc123def456 \
  -H "X-API-Key: entri_your_token_here"

Permanently Delete a Project

Permanently deletes a project and all of its data: translation keys, translations, key and translation history, comments, project-scoped translation memory entries, project-scoped webhooks, and project-scoped API tokens. Activity logs are retained at the organization level as an audit trail, including a final project.deleted entry. Unlike the other project endpoints, this endpoint cannot be called with an API key. It requires the session cookie of a signed-in organization owner:
curl -X DELETE https://app.nt3.io/api/projects/proj_6abc123def456/permanent \
  -H "Cookie: better-auth.session_token=<owner_session_token>"
Response:
{ "success": true }
This action cannot be undone. Requests from any non-owner role — or authenticated with an API key, which carries no member session — receive a 403 Forbidden.

Manage Target Languages

Add a language to a project’s target language list:
curl -X POST https://app.nt3.io/api/projects/proj_6abc123def456/languages \
  -H "X-API-Key: entri_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{"language": "ja"}'
Remove a target language:
curl -X DELETE https://app.nt3.io/api/projects/proj_6abc123def456/languages/ja \
  -H "X-API-Key: entri_your_token_here"
Removing a target language does not delete the existing translations for that language, but the language will no longer appear in the editor or be returned by export endpoints.

Key Notes

  • Language codes follow the BCP 47 standard (for example en, fr, zh-TW, pt-BR).
  • The sourceLanguage of a project cannot be changed after creation.
  • Every action on a project is recorded in the Activity log.