---
title: "Invite project contributor"
method: POST
path: "/api/v1/projects/{projectToken}/contributors"
tags: ["Projects"]
---

# Invite project contributor

`POST /api/v1/projects/{projectToken}/contributors`

## Request

- Base URL: `https://api.simplelocalize.io`
- URL: `https://api.simplelocalize.io/api/v1/projects/{projectToken}/contributors`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/simplelocalize/apis/simplelocalize-api/docs/api/v1/projects/:projectToken/contributors/post.ts> (a function with typed inputs; its response is checked against the schema)

Invite a new contributor to the project. The contributor will receive an email with an invitation link same as in the web app.
- The contributor will be able to accept the invitation and join the project.
- The endpoint requires Personal Token for authentication and the project must be on a paid plan to manage contributors.
- The endpoint is rate-limited to 1 request per second.
- The request body must contain the contributor's email, role, and optional assigned languages, tags, and customers.
- The role can be either `TRANSLATOR` or `ADMIN`. Only `TRANSLATOR` role allows to define assigned languages, tags, and customers.
- The assigned languages, tags, and customers must be defined in the request body.
- The default access level for languages, tags, and customers can be defined in the request body.

### Translator role permissions

- `VIEW_ACTIVITY`
- `IMPORT_FILES`
- `EXPORT_FILES`
- `MANAGE_TRANSLATION_KEYS`
- `MANAGE_LANGUAGES`
- `AUTO_TRANSLATE`
- `CHANGE_TRANSLATIONS`
- `REVIEW_TRANSLATIONS`
- `CHANGE_CUSTOMER_TRANSLATIONS`
- `REVIEW_CUSTOMER_TRANSLATIONS`
- `CHANGE_DESCRIPTION`
- `PUBLISH_TRANSLATIONS`
- `ACCESS_COMMENTS`

Access levels: `ALLOW` and `DENY`.

### Language access levels:
- `WRITE_READ` means the contributor can perform the action.
- `READ` means the contributor can read the translations, but cannot write them.
- `HIDDEN` means the contributor cannot perform the action.


### Tag and Customer access levels:
- `WRITE_READ` means the contributor can perform the action.
- `HIDDEN` means the contributor cannot perform the action.

## Path parameters

- `projectToken` string, required

## Request body

- ApiProjectContributorInviteRequest
  - `email` string, email, required: Email of the contributor. Must be a valid email address.
  - `role` 'TRANSLATOR' | 'ADMIN' | 'DEVELOPER', required: Role of the contributor. Only 'TRANSLATOR' role allows to define assigned languages, tags, and customers. 'DEVELOPER' has the same access as 'ADMIN', except for the project Settings tab and managing project members.
  - `assignedLanguages` AssignedLanguage[]: Assigned languages with access levels. Only applicable if role is 'TRANSLATOR'.
    - `key` string, required: Language key, e.g. 'en', 'fr', 'de'
    - `access` 'ALLOW' | 'DENY', required: Access level for the language
  - `defaultLanguageAccess` 'ALLOW' | 'DENY': Default access level for languages. Only applicable if role is 'TRANSLATOR'.
  - `assignedTags` AssignedTag[]: Assigned tags with access levels. Only applicable if role is 'TRANSLATOR'.
    - `name` string, required: Tag name
    - `access` 'ALLOW' | 'DENY', required: Access level for the tag
  - `defaultTagAccess` 'ALLOW' | 'DENY': Default access level for tags. Only applicable if role is 'TRANSLATOR'.
  - `assignedCustomers` AssignedCustomer[]: Assigned customers with access levels. Only applicable if role is 'TRANSLATOR'.
    - `key` string, required: Customer key
    - `access` 'ALLOW' | 'DENY', required: Access level for the customer
  - `defaultCustomerAccess` 'ALLOW' | 'DENY': Default access level for customers. Only applicable if role is 'TRANSLATOR'.
  - `permissions` Permission[]: List of permissions for the contributor. If not provided, default permissions will be assigned based on the role.
    - `key` 'AUTO_TRANSLATE, CHANGE_TRANSLATIONS, REVIEW_TRANSLATIONS, PUBLISH_TRANSLATIONS, MANAGE_TRANSLATION_KEYS, MANAGE_LANGUAGES, IMPORT_FILES, EXPORT_FILES, VIEW_ACTIVITY, ACCESS_COMMENTS, CHANGE_CUSTOMER_TRANSLATIONS, REVIEW_CUSTOMER_TRANSLATIONS, CHANGE_DESCRIPTION', required: Permission key, e.g. 'AUTO_TRANSLATE'
    - `access` 'ALLOW' | 'DENY', required: Access level for the permission

## Response `200`

OK

## Other responses

- `400`: Bad Request
- `402`: Payment Required
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `429`: Too Many Requests
- `500`: Internal Server Error

## Changes

- **2026-11-07** `67a25a25863a`: 1 breaking, 2 info
  - removed the enum value `AUTO_TRANSLATE, CHANGE_TRANSLATIONS, REVIEW_TRANSLATIONS, PUBLISH_TRANSLATIONS, MANAGE_TRANSLATION_KEYS, ADD_LANGUAGES, UPDATE_LANGUAGES, DELETE_LANGUAGES, IMPORT_FILES, EXPORT_FILES, VIEW_ACTIVITY, ACCESS_COMMENTS, CHANGE_CUSTOMER_TRANSLATIONS, REVIEW_CUSTOMER_TRANSLATIONS, CHANGE_DESCRIPTION` of the request property `permissions/items/key`
  - added the new `AUTO_TRANSLATE, CHANGE_TRANSLATIONS, REVIEW_TRANSLATIONS, PUBLISH_TRANSLATIONS, MANAGE_TRANSLATION_KEYS, MANAGE_LANGUAGES, IMPORT_FILES, EXPORT_FILES, VIEW_ACTIVITY, ACCESS_COMMENTS, CHANGE_CUSTOMER_TRANSLATIONS, REVIEW_CUSTOMER_TRANSLATIONS, CHANGE_DESCRIPTION` enum value to the request property `permissions/items/key`
  - added the new `DEVELOPER` enum value to the request property `role`
- **2025-11-12** `0329534cd557`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/simplelocalize/apis/simplelocalize-api/changes/api/v1/projects/:projectToken/contributors/post.md)

---

[API](https://skmtc.dev/simplelocalize/apis/simplelocalize-api.md) - [All operations](https://skmtc.dev/simplelocalize/apis/simplelocalize-api/llms.txt) - [OpenAPI document](https://skmtc.dev/simplelocalize/apis/simplelocalize-api/revisions/67a25a25863a?raw)
