Applanga REST API

Applanga REST API (1.0)

Introduction

The Applanga Rest API allows you to access the platform to request or send translation data as JSON, edit your content on Applanga (e.g. changing, adding, deleting, etc) and to control certain features of the platform (e.g. adding tags, uploading screenshots, etc) via API calls.

Applanga API is organized around REST, accepts and returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.

To make requests to the Applanga API you first need to create a Project in the Applanga Dashboard.

Then you need to get an API Token from the Project Settings (click Project Settings in the Project overview), and click Show API Token.

POST Requests may also require a Personal Access Token to be able to trace actions to a specific user. The Personal Access Token can be sent on any POST request but it is mandatory for some.

Authorization

1. API Token

To authenticate your request you need to set the Authorization header to carry your API Token in the bearer format (as described here https://tools.ietf.org/html/rfc6750#page-5 ). The value of the Authorization header needs to be 'Bearer {apiToken}'. Example: Authorization: Bearer xxxxxxxxxxxxxxxxxxxx!xxxxxxxxxxxxxxxxxxxxxx.

2. Personal Access Token

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token. Example: X-Personal-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxx.

3. Project Identifier

You also need to pass the id of your app to the query with the app parameter. https://api.applanga.com/v1/api?app={app_id}. The app_id is the first part of your API token until the ! e.g. if your API Token would be 54e49f570de187711f9a5936!64d6e85c0111f758748898e3181a25b7 the app_id is 54e49f570de187711f9a5936.

4. Branching Projects

If you are using a project with Branching and want to target a specific branch you also need to provide the branch_id through the branch parameter. You can get the branch_id either in the Settings of your application or request it via an api route (see Request Branch Info). Example: https://api.applanga.com/v1/api?app={app_id}&branch={branch_id}

5. Authorized IP's

For API write access, as an additional security measure you have to specify a list of authorized IP's or IP ranges. Go to your Project in the Applanga Dashboard, click Project Settings, if you have API access you will have an input field below Show API Token which will allow you to enter IP addresses (ipv4 and ipv6) or address ranges in CIDR Notation (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). To allow write access from all ipv4 addresses add 0.0.0.0/0, for all ipv6 addresses ::/0. For unrestricted access add both. Not adding any IP addresses/ranges will block all write access.

Payload Compression

Optional payload compression for API requests is by default supported.

To receive a response with a compressed payload you only need to set the Accept-Encoding header to gzip on a request.

The client then receives the response with a content-encoding: gzip response header and GZIP-encoded payload.

Entries

Operations associated with translations. Please note that the terms Entry and Translation are synonymous and are used interchangeably or sometimes together.

Posting translation data.

Permission Requirements(Personal access tokens):

  • create_and_update_translations

Use this endpoint to upload translation strings to a project or to a specific branch if the project is a branching project. The API will identify your project and authenticate the token. If your request is authorized the data will be written to your app and a json object describing the changes will be returned. Otherwise you will receive an http error.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

header Parameters
X-Personal-Access-Token
string
Example: 52b82d945c6115f2c4cc3844ee872f83

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token.

Example: X-Personal-Access-Token: 52b82d945c6115f2c4cc3844ee872f83.

Request Body schema: application/json
object
object

Set a custom name for any language in the request body. A language code should be set as the key and the custom language name as the value. The language set here must correspond to one of the languages in the request data or else it will be ignored.

Note that the language code must be a valid ISO language code. Applanga supports all ISO 639-1, 639-2, and 639-3 language codes. For more informations where to find them please see: Adding and Removing Languages.

Addtionally you can also specify a custom language code either as 2 letter lowercase language e.g. "pt" or combined with an uppercase region code e.g. "pt-BR". If the language code is not valid as described above an error response will be returned. As an example if you want to upload some strings for a language xx-ZZ as shown below

{
    "data": {
        "xx-ZZ" {
            "main": {
                "entries": {
                    "key1":{
                        "d":"draft1",
                        "v":"value1",
                        "src":"/src/File1"
                    },
                }
            }
        }
    }
}

to set the language display of name of xx-ZZ to Custom display name for xx-ZZ for example, update the request body like so

{
    "data": {
        "xx-ZZ" {
            "main": {
                "entries": {
                    "key1":{
                        "d":"draft1",
                        "v":"value1",
                        "src":"/src/File1"
                    },
                }
            }
        }
    },
    "languageDisplayNames": {
        "xx-ZZ": "Custom display name for xx-ZZ"
    }
}
required
object

Top-level data object

Responses

Response Schema: application/json
total
integer

Total number of entries uploaded

added
integer

Number of new entries added

updated
integer

Number of existing entries updated

tagUpdates
integer

Number of tags updated

groupChanged
integer

Count of entries reassigned to a different group

groupCountChanges
object

Maps group ids to the count of entries added

object
keys
Array of strings

Request samples

Content type
application/json
Example

Basic example with no only the setStatus set to needs review(2) in options and the value, draft set in entry data.

{
  • "options": {
    },
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "total": 1,
  • "added": 1,
  • "updated": 1,
  • "tagUpdates": 0,
  • "groupChanged": 1,
  • "groupCountChanges": {
    },
  • "_additionalData": {
    },
  • "keys": [
    ]
}

Requesting translation data.

The API will identify your project and authenticate the token and return your Project's translation data.

Note If you are using a Branching Project and want to request a specific branch you also need to provide the branch_id as a parameter, please see here The API is using a Content Delivery Network for fast and reliable content distribution. It is updated in fixed intervals and it therefore might take up to 10 minutes until changes made in the dashboard appear live in the api.

To limit the response data to certain groups, and/or languages, and/or tags, and/or status you can add query parameters requestedLanguages, requestedGroups, requestedTagIds and requestedStatus, as json string arrays which have to be urlencoded as well.

An Example for requested group main and languages en and de: https://api.applanga.com/v1/api?app=<app_id>&requestedGroups=[%22main%22]&requestedLanguages=[%22en%22,%22de%22]&requestedTagIds=[%22tag_id_1%22, %22tag_id_2%22]&requestedStatus=[1,%202].

If you do not request any languages or groups, all groups and languages will be returned. If you have not activated groups and created additional groups, all your translations will be in group main.

It is also possible to include additional data or remove data from the response by adding additional query parameters, see the query parameters below.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

includeSrc
boolean
Default: false
Example: includeSrc=true

If set to true, adds src property which describes a file origin for the specific string in that specific language. These file sources can originate from imported .xliff files or from data writte through this API.

includeStatus
boolean
Default: false
Example: includeStatus=true

If set to true, adds status property which describes the current state of the translation. Use the option in combination with keepEmptyDataEntries to include the status for entries without translation.

includeComment
boolean
Default: false
Example: includeComment=true

If set to true, adds comment property of the translation if a comment was made.

includeLockInfo
boolean
Default: false
Example: includeLockInfo=true

If set to true, adds locked property to the translation, to indicate if it is locked or not. Use the option in combination with keepEmptyDataEntries to include the locking information for entries without translation.

includeDescription
boolean
Default: false
Example: includeDescription=true

If set to true, adds description property of the translation keys in the base language.

includeMeta
boolean
Default: false
Example: includeMeta=true

If set to true, adds meta (metadata) property of the translation keys in the base language. Empty metadata values are not included.

includeMetaForAllLanguages
boolean
Default: false
Example: includeMetaForAllLanguages=true

If set to true, adds meta (metadata) property of the translation keys in all languages. Empty metadata values are not included.

includeDraft
boolean
Default: true
Example: includeDraft=false

If set to true, adds d(draft) property.

includeValue
boolean
Default: true
Example: includeValue=false

If set to true, adds v(value) property.

keepEmptyDataEntries
boolean
Default: false
Example: keepEmptyDataEntries=true

By default all groups and entries that do not have values or draft get deleted from response. Set this to true to include them.

includeUpdateDate
boolean
Default: false
Example: includeUpdateDate=true

If set to true, adds updatedAt property.

includeUserId
boolean
Default: false
Example: includeUserId=true

If set to true, adds userId property.

includeLanguageId
boolean
Default: false
Example: includeLanguageId=true

If set to true, adds languageId property under each group.

includeGroupId
boolean
Default: false
Example: includeGroupId=true

If set to true, adds groupId property under each group.

removeCrChar
boolean
Default: false
Example: removeCrChar=true

If set to true, removes Windows CR character from downloaded data.

includeStatusDescription
boolean
Default: false
Example: includeStatusDescription=true

When this parameter is set to true, the response body includes a property statusDescription, which is an object that maps translation status description to status value. An example of what this could look like is as follows

 "statusDescription": {
     "nostatus/new": 0,
     "accepted": 1,
     "needs review": 2,
     "needs translation": 3,
     "rejected": 4,
     "in order": 5,
     "testing": 1001,
     ...
 }

In the preceding example all the known translation status are present including a custom string status testing.

Example to include additionally src, status and status description: https://api.applanga.com/v1/api?app={app_id}?includeSrc=true&includeStatus=true&includeStatusDescription=true.

requestedGroups
Array of strings
Example: requestedGroups=%22main%22

Limit scope of entries returned to the specified groups. Note that the group names are expected here.

requestedLanguages
Array of strings
Example: requestedLanguages=%22en%22&requestedLanguages=%22de%22

Limit scope of entries returned to the specified languages. Note that the language codes are expected here.

requestedTagIds
Array of strings
Example: requestedTagIds=%22tag_id_1%22&requestedTagIds=%22tag_id_2%22

Limit scope of entries returned to the specified tags. Note that the tag names are expected here

requestedStatus
Array of integers
Example: requestedStatus=1&requestedStatus=2

Limit scope of entries returned to the specified statuses.

Responses

Response Schema: application/json
_id
string

Project id

__v
string

Project version

draftModeEnabled
boolean
Default: false

Indicates if draft mode is enabled for the project, see this guide for more info on draft mode /docs/applanga-mobile-sdks/draft_on-device-testing.

collectMissingEnabled
boolean
Default: false
baseLanguage
string

This is also referred to as the source language of a project. Entries are translated from this language to other lnaguages.

name
string

This is the name of the project.

object

Top-level data object.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b&includeSrc=true&includeStatus=true&includeComment=true&includeLockInfo=true&includeDescription=true&includeMeta=true&includeMetaForAllLanguages=true&includeDraft=false&includeValue=false&keepEmptyDataEntries=true&includeUpdateDate=true&includeUserId=true&includeLanguageId=true&includeGroupId=true&removeCrChar=true&includeStatusDescription=true&requestedGroups=SOME_ARRAY_VALUE&requestedLanguages=SOME_ARRAY_VALUE&requestedTagIds=SOME_ARRAY_VALUE&requestedStatus=SOME_ARRAY_VALUE");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
{
  • "_id": "608fbe4db764186e651f8e2b",
  • "__v": "1.0",
  • "draftModeEnabled": true,
  • "collectMissingEnabled": false,
  • "baseLanguage": "en",
  • "name": "yourAppName",
  • "data": {
    }
}

Requesting project entry counts.

The API will identify your project and authenticate the token and return your App translation data.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
additional property
object

Dataset mapped to a language name. ISO language codes corresponding to languages in the project is mapped to various entries statistics described here. Essentially the counts are calculated per language.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/entryCount?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
{
  • "de": {
    },
  • "en": {
    }
}

Tags

Operations related to tags. Please see the following guide for more information about tags.

Creating a new tag.

Permission Requirements(Personal access tokens):

  • create_and_update_tags

Create a new tag in a project using this endpoint. The API will identify your project and authenticate the token and create a new tag.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

header Parameters
X-Personal-Access-Token
string
Example: 52b82d945c6115f2c4cc3844ee872f83

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token.

Example: X-Personal-Access-Token: 52b82d945c6115f2c4cc3844ee872f83.

Request Body schema: application/json
name
required
string

Name of the tag.

entryKeys
Array of strings

List of keys for entries assigned to the tag.

category
string

Tags can have specific category associations. Categories are used for more specific tracking of keys. Categories exist within a project and can be used to easily differentiate between tags and to track things like platforms, releases, and workflows (e.g. design review, development review, etc.) The Applanga dashboard is pre-populated with some platform-related categories: iOS, Android, Web, and Jira. Category options can be managed on the Project Settings page.

Responses

Response Schema: application/json
name
required
string

Name of the tag.

entryKeys
Array of strings

List of keys for entries assigned to the tag.

category
string

Tags can have specific category associations. Categories are used for more specific tracking of keys. Categories exist within a project and can be used to easily differentiate between tags and to track things like platforms, releases, and workflows (e.g. design review, development review, etc.) The Applanga dashboard is pre-populated with some platform-related categories: iOS, Android, Web, and Jira. Category options can be managed on the Project Settings page.

id
string

Unique identifier of the object

createdAt
string

Timestamp of when the tag was created.

updatedAt
string

Timestamp of when the tag was last updated.

Request samples

Content type
application/json
{
  • "name": "my_tag_2",
  • "entryKeys": [
    ],
  • "category": "Web"
}

Response samples

Content type
application/json
{
  • "id": "5e2996645a463ed6feabdebc",
  • "name": "my_tag_2",
  • "entryKeys": [
    ],
  • "category": "Web",
  • "createdAt": "2020-01-23T12:49:40.376Z",
  • "updatedAt": "2020-01-23T17:22:05.276Z"
}

Requesting a list of tags.

Request tags in a project with this endpoint. The API will identify your project and authenticate the token and return all the tags in the Project.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
Array
name
required
string

Name of the tag.

entryKeys
Array of strings

List of keys for entries assigned to the tag.

category
string

Tags can have specific category associations. Categories are used for more specific tracking of keys. Categories exist within a project and can be used to easily differentiate between tags and to track things like platforms, releases, and workflows (e.g. design review, development review, etc.) The Applanga dashboard is pre-populated with some platform-related categories: iOS, Android, Web, and Jira. Category options can be managed on the Project Settings page.

id
string

Unique identifier of the object

createdAt
string

Timestamp of when the tag was created.

updatedAt
string

Timestamp of when the tag was last updated.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/tags?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
[
  • {
    }
]

Requesting a tag by id.

Request for a single tag in a project with this endpoint. The API will identify your project and authenticate the token and then return the tag whose id is specified in the url denoted by tagId.

Authorizations:
apiAccessToken
path Parameters
tagId
required
string
Example: 5fd77160c876c25340b17404

Unique identifier of a tag

query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
name
required
string

Name of the tag.

entryKeys
Array of strings

List of keys for entries assigned to the tag.

category
string

Tags can have specific category associations. Categories are used for more specific tracking of keys. Categories exist within a project and can be used to easily differentiate between tags and to track things like platforms, releases, and workflows (e.g. design review, development review, etc.) The Applanga dashboard is pre-populated with some platform-related categories: iOS, Android, Web, and Jira. Category options can be managed on the Project Settings page.

id
string

Unique identifier of the object

createdAt
string

Timestamp of when the tag was created.

updatedAt
string

Timestamp of when the tag was last updated.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/tags/%7BtagId%7D?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
{
  • "id": "5e2996645a463ed6feabdebc",
  • "name": "my_tag_2",
  • "entryKeys": [
    ],
  • "category": "Web",
  • "createdAt": "2020-01-23T12:49:40.376Z",
  • "updatedAt": "2020-01-23T17:22:05.276Z"
}

Updating a tag by id.

Update a tag in a project with this endpoint. The API will identify your project and authenticate the token and then the API will update the tag whose id is specified in the url with the request body.

Authorizations:
apiAccessToken
path Parameters
tagId
required
string
Example: 5fd77160c876c25340b17404

Unique identifier of a tag

query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

header Parameters
X-Personal-Access-Token
string
Example: 52b82d945c6115f2c4cc3844ee872f83

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token.

Example: X-Personal-Access-Token: 52b82d945c6115f2c4cc3844ee872f83.

Request Body schema: application/json
name
string

Name of the tag.

entryKeys
Array of strings

List of keys for entries assigned to the tag.

category
string

Tags can have specific category associations. Categories are used for more specific tracking of keys. Categories exist within a project and can be used to easily differentiate between tags and to track things like platforms, releases, and workflows (e.g. design review, development review, etc.) The Applanga dashboard is pre-populated with some platform-related categories: iOS, Android, Web, and Jira. Category options can be managed on the Project Settings page.

Responses

Response Schema: application/json
name
required
string

Name of the tag.

entryKeys
Array of strings

List of keys for entries assigned to the tag.

category
string

Tags can have specific category associations. Categories are used for more specific tracking of keys. Categories exist within a project and can be used to easily differentiate between tags and to track things like platforms, releases, and workflows (e.g. design review, development review, etc.) The Applanga dashboard is pre-populated with some platform-related categories: iOS, Android, Web, and Jira. Category options can be managed on the Project Settings page.

id
string

Unique identifier of the object

createdAt
string

Timestamp of when the tag was created.

updatedAt
string

Timestamp of when the tag was last updated.

Request samples

Content type
application/json
{
  • "name": "my_tag_2",
  • "entryKeys": [
    ],
  • "category": "Web"
}

Response samples

Content type
application/json
{
  • "id": "5e2996645a463ed6feabdebc",
  • "name": "my_tag_2",
  • "entryKeys": [
    ],
  • "category": "Web",
  • "createdAt": "2020-01-23T12:49:40.376Z",
  • "updatedAt": "2020-01-23T17:22:05.276Z"
}

Screenshots

Operations associated with screenshots. Please see these guides for more information regarding screenshots

Screenshot Hashes

If you want to save time and bandwidth you can reduce the amount of screenshot uploads by checking the sha1 hash property of an already uploaded screenshot to see if your local file is different and only upload if thats the case. But be aware that the sha1 hash is only available for screenshots uploaded after 15. Nov. 2023.

The sha1 hash is stored in hex format and you could generate the hash locally in nodejs with the following code:

const Crypto = require('crypto');
const fs = require('fs');

const hashSum = Crypto.createHash('sha1');
const buffer = fs.readFileSync('/path/to/your/screenshot');
hashSum.update(buffer);

const hex = hashSum.digest('hex');
return hex;

Uploading screenshot

Permission Requirements(Personal access tokens):

  • upload_screenshots

Upload screenshots to a project using this endpoint. Send a POST request to https://api.applanga.com/v1/api/screenshots?app={app_id} with a FormData containing two keys data and file. The API will identify your project and authenticate the token. If your request is authorized the screenshot will be uploaded to your app and a json object describing the changes will be returned. Otherwise you will receive an http error.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

header Parameters
X-Personal-Access-Token
string
Example: 52b82d945c6115f2c4cc3844ee872f83

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token.

Example: X-Personal-Access-Token: 52b82d945c6115f2c4cc3844ee872f83.

Request Body schema: multipart/form-data

Note: the useOCR option which enables the detection of string positions on the image is no longer supported. String postions on images should be managed on the Applanga dashboard. Find out more information on how to manage screenshots from the dashboard here.

object

Object containing screenshot data.

file
string <binary>

Image file to upload

Responses

Response Schema: application/json
object

Request samples

Content type
multipart/form-data
{
  "data": {
    "screenTag": "tag99",
    "width": 600,
    "height": 400,
    "deviceModel": "test device model",
    "platform": "iOS",
    "operatingSystem": "iOS 16",
    "bundleVersion": "1.0.5",
    "deviceLanguageLong": "en",
    "useFuzzyMatching": true,
    "stringPositions": [
      {
        "key": "Key99",
        "x": 100,
        "y": 10,
        "width": 200,
        "height": 40
      },
      {
        "text": "myText",
        "x": 100,
        "y": 300,
        "width": 100,
        "height": 20
      }
    ]
  },
  "file": "<binary file content>"
}

Response samples

Content type
application/json
{ }

Requesting screenshot data.

Request screenshots in a project with this endpoint. The API will identify your project and authenticate the token and return all the screenshots in the Project.

Note: The generated url's are only working for 15 minutes for security reasons. Be aware that you have to download the images within that timeframe or redo the request to get newly generated urls.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
Array
url
string

Screenshot URL. Note: The generated URLs are only working for 15 minutes for security reasons. Be aware that you have to download the images within that timeframe or redo the request to get newly generated URLs.

originalName
string

Name for the screenshot file as uploaded.

mimetype
string
Enum: "image/jpeg" "image/png" "image/jpg"
object

Screenshot tag

object

More information about the screenshot.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/screenshots?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
[
  • {
    }
]

Branches

Operations associated with branches. To learn more about branching please have a look at our Branching Documentation.

All availible API features can be extended with the "branch" parameter and will perform the same thing just on the specified branch. If no branch is specified the original Branch will be taken.

Create Branch

Permission Requirements(Personal access tokens):

create_branch

Use this endpoint to create a new branch in a branching Project. The API will identify your project and authenticate the token.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

header Parameters
X-Personal-Access-Token
required
string
Example: 52b82d945c6115f2c4cc3844ee872f83

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token.

Example: X-Personal-Access-Token: 52b82d945c6115f2c4cc3844ee872f83.

Request Body schema: application/json
name
required
string

Name of te branch.

sourceBranch
required
string

Indicates which branch to copy.

object

Object with the permissions for the branch. allowed permissions to set are 'readOnly' (default: false) and 'editableByTranslator' (default: true) (optional).

Responses

Response Schema: application/json
_id
string

Unique identifier of the object

name
string

Name of te branch.

object

Object with the permissions for the branch. allowed permissions to set are 'readOnly' (default: false) and 'editableByTranslator' (default: true) (optional).

Request samples

Content type
application/json
{
  • "name": "my_new_branch",
  • "sourceBranch": "608fbe4db764186e651f8e2b",
  • "permissions": {
    }
}

Response samples

Content type
application/json
{
  • "_id": "608fbe4db764186e651f8e27",
  • "name": "my_new_branch",
  • "permissions": {
    }
}

Request Branch Info

Use this endpoint to fetch information regarding the branches that exists in a project. The API will identify your project and authenticate the token, then an object that contains the list of all branches for the given project is returned.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
defaultBranch
string

Id of the default branch.

Array of objects

List of all branches that exist in the project.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/branches?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
{
  • "branches": [
    ],
  • "defaultBranch": "608fbe4db764186e651f8e2b"
}

Projects

Operations associated with projects.

Create sibling project

Permission Requirements(Personal access tokens):

  • create_sibling

Create a new project and based of another existing project. This allows you to copy settings, attributes and configs from the existing project into the new one. The API will identify your project and authenticate the token and create a new project that is a copy of the existing project.

By default an empty project is created when the request is completed with only a default language set for the new project. However it is possible to copy some more data, like the project settings, groups, languages, webhooks and other project settings. To enable this, some parameters described below should be set to true in the request body.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

header Parameters
X-Personal-Access-Token
string
Example: 52b82d945c6115f2c4cc3844ee872f83

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token.

Example: X-Personal-Access-Token: 52b82d945c6115f2c4cc3844ee872f83.

Request Body schema: application/json
projectName
required
string

This is required and must be set in the request body. It is the name that will be set for the new project.

identicalLanguages
boolean
Default: false

If set to true creates all the languages in the requested project in the new project.

identicalGroups
boolean
Default: false

If set to true creates all the groups in the requested project in the new project, else only a single default group(main) is created.

identicalProjectSettings
boolean
Default: false

If set to true, applies all the settings in the requested project in the new project.

identicalBranches
boolean
Default: false

If set to true creates all the branches in the requested project in the new project. Only applicable if the requested project is a branching project.

Responses

Response Schema: application/json
accessToken
string

Api access token for the newly created project.

Request samples

Content type
application/json
{
  • "projectName": "Sibling",
  • "identicalLanguages": true,
  • "identicalGroups": true,
  • "identicalProjectSettings": true,
  • "identicalBranches": true
}

Response samples

Content type
application/json
{
  • "accessToken": "65bb80085a9c521aca5e5d99!6f00ed014d46c1cc5a4e05673315fa57"
}

Orders

Operations associated with orders.

Create a new order

Permission Requirements (Personal access tokens):

  • create_and_update_orders

The API will identify your project and authenticate the token and creates a new order based on the provided parameters. If you are using a Branching Project you also need to provide the branch_id as a parameter.

The order will be created if any translatable strings can be found for the given order creation parameters. If only some but not all of specified tags, groups or languages are found, the order will be created for the found scope as well. No order will be created if there are 0 words to translate.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

header Parameters
X-Personal-Access-Token
required
string
Example: 52b82d945c6115f2c4cc3844ee872f83

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token.

Example: X-Personal-Access-Token: 52b82d945c6115f2c4cc3844ee872f83.

Request Body schema: application/json
sourceLanguage
required
string

The source language ISO code. The language must exist in the project. The order will not be created if no value or invalid value is provided.

dueDate
string

Order delivery due date. If the provided date is in the past or less than a day ahead, it will be replaced with default value of 28 days

languages
required
Array of strings

An array of language ISO codes. These will be languages, into which the order will be translated. At least some of these languages must exist in the project and there must be an orderable content for at least one of them. Otherwise an error is returned (no order will be created).

stringOption
string
Default: "untranslated"

What type of strings should be selected for translation. The following values are available

all - all content

untranslated - all untranslated keys without Draft and without Target value (default)

sourceChanged - all keys with outdated Target values.

invalidTarget - all keys without Draft and without Target values, or with outdated Target values. Current Drafts will be overwritten.

needsTranslation - all keys with "Needs Translation" status.

needsReview - all keys with "Rejected" status.

needsTranslationOrRejected - all keys with "Needs Translation" or "Rejected" status.

<name_of_custom_status> - all keys with the particular custom status assigned.

withoutTarget - all keys which don't have Target values.

withTarget - all keys which have published values.

tooLong - all keys for which Target or Draft value exceeds the required Max Length

brief
string

Order brief text.

tags
Array of strings

Array of tag (or screenshot) names. Only the tagged keys will be included in the order scope. If additionally there is a source file created for each tag, each key must belong to exactly one tag (in such cases tags cannot "overlap").

includeNoTagKeys
boolean

Indicates if the strings without any assigned tag are in the order scope.

groups
Array of strings

Array of group names. Only strings in the indicated groups will be included in the scope. If the parameter is not specified, strings from all groups will be included in the scope. A maximum of 10 group names is allowed.

customBrief
Array of arrays

Array of custom order brief data consisting of pairs: { name: 'field name', value: 'field value' }. Please see Request custom order brief template for more details.

orderToCopy
string

translation scope is copied from a reference order. The order must be created for the same project. The option is useful, if exactly the same content needs to be included in a new order. If this option is used:

  • sourceLanguage value must match the reference order
  • Only dueDate, brief, notifyAddtionalUsers and customBrief fields will be taken into consideration. All other data will be taken over from the reference order
  • The reference order must have testing or done status (otherwise the same strings cannot be included into a new translation order, because they already have In-Order status)
languageToCopy
string

This option can only be used in combination with orderToCopy. The translation scope of the language specified in languageToCopy is re-used for another language in the same project. For that reason there is no restriction on status of the reference order and additionally the languages array must be provided.

notifyAddtionalUsers
Array of strings

Array of email addresses of users to be notified about order progress. These addresses must belong to the client team members.

Responses

Response Schema: application/json
_id
string

Unique identifier of the object

orderNumber
integer
sourceLanguage
string

Language code of the source language in the project.

sourceWordCount
number

Total number of words in the source language from all entries requested.

created
string

Timestamp of when the order was created.

dueDate
string

Order delivery due date.

requester
string

Name of the person placing the order.

status
string
Enum: "draft" "requested" "created" "declined" "accepted" "processing" "testing" "done" "canceled" "onHold"

draft - A recently initiated order that is still in the creation phase.

requested - Relates to the quoting step of the translation ordering process. Please see here. This status means the order requester has requested a quote proposal for the order.

created - Relates to the quoting step of the translation ordering process. Please see here. This status means that a quote proposal has been created for the order and uploaded to Applanga, which the requester has to review.

declined - Relates to the quoting step of the translation ordering process. Please see here. This means the recent quote proposal created for the order was rejected by the requester.

accepted - Relates to the quoting step of the translation ordering process. Please see here. This means the requester accepts the recent quote proposal.

processing - This means the translation process has started.

testing - Some orders can be marked with the status 'testing' when the translations are delivered instead of done. The translations have been delivered, and testing is in progress. The strings belonging to this order no longer have 'In Order' status.

done - The translations have been delivered, and the order is completed.

canceled - The order was canceled.

onHold - Some orders have automated configurations that send them directly to translation. Sometimes a config misalignment could occur requiring review from an Applanga admin. In this case, the order status is automatically set to this status.

object

Request samples

Content type
application/json

In this sample request a new order is created based on scope of de language in existing order with id 64cb9e7c8bc9574c49de627f. The source language is en to be translated into fr-CA and es-MX languages in the same project.

{
  • "sourceLanguage": "en",
  • "languages": [
    ],
  • "orderToCopy": "64cb9e7c8bc9574c49de627f",
  • "languageToCopy": "de"
}

Response samples

Content type
application/json
{
  • "order": {
    }
}

Request list of all project orders

Use this endpoint to fetch all the orders in a project. The API will identify your project and authenticate the token and return a list of all orders for the project.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
Array
id
string

Unique identifier of the object

orderNumber
integer
sourceLanguage
string

Language code of the source language in the project.

created
string

Timestamp of when the order was created.

dueDate
string

Order delivery due date.

requester
string

Name of the person placing the order.

status
string
Enum: "draft" "requested" "created" "declined" "accepted" "processing" "testing" "done" "canceled" "onHold"

draft - A recently initiated order that is still in the creation phase.

requested - Relates to the quoting step of the translation ordering process. Please see here. This status means the order requester has requested a quote proposal for the order.

created - Relates to the quoting step of the translation ordering process. Please see here. This status means that a quote proposal has been created for the order and uploaded to Applanga, which the requester has to review.

declined - Relates to the quoting step of the translation ordering process. Please see here. This means the recent quote proposal created for the order was rejected by the requester.

accepted - Relates to the quoting step of the translation ordering process. Please see here. This means the requester accepts the recent quote proposal.

processing - This means the translation process has started.

testing - Some orders can be marked with the status 'testing' when the translations are delivered instead of done. The translations have been delivered, and testing is in progress. The strings belonging to this order no longer have 'In Order' status.

done - The translations have been delivered, and the order is completed.

canceled - The order was canceled.

onHold - Some orders have automated configurations that send them directly to translation. Sometimes a config misalignment could occur requiring review from an Applanga admin. In this case, the order status is automatically set to this status.

languages
Array of strings

List of languages included in the order.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/order?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
[
  • {
    }
]

Request an order by id

Use this endpoint to fetch a single order by id. The API will identify your project and authenticate the token and return details of the requested order.

Authorizations:
apiAccessToken
path Parameters
orderId
required
string
Example: 5fd77160c876c25340b17404

Unique identifier of an order

query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
id
string

Unique identifier of the object

orderNumber
integer
sourceLanguage
string

Language code of the source language in the project.

created
string

Timestamp of when the order was created.

dueDate
string

Order delivery due date.

requester
string

Name of the person placing the order.

status
string
Enum: "draft" "requested" "created" "declined" "accepted" "processing" "testing" "done" "canceled" "onHold"

draft - A recently initiated order that is still in the creation phase.

requested - Relates to the quoting step of the translation ordering process. Please see here. This status means the order requester has requested a quote proposal for the order.

created - Relates to the quoting step of the translation ordering process. Please see here. This status means that a quote proposal has been created for the order and uploaded to Applanga, which the requester has to review.

declined - Relates to the quoting step of the translation ordering process. Please see here. This means the recent quote proposal created for the order was rejected by the requester.

accepted - Relates to the quoting step of the translation ordering process. Please see here. This means the requester accepts the recent quote proposal.

processing - This means the translation process has started.

testing - Some orders can be marked with the status 'testing' when the translations are delivered instead of done. The translations have been delivered, and testing is in progress. The strings belonging to this order no longer have 'In Order' status.

done - The translations have been delivered, and the order is completed.

canceled - The order was canceled.

onHold - Some orders have automated configurations that send them directly to translation. Sometimes a config misalignment could occur requiring review from an Applanga admin. In this case, the order status is automatically set to this status.

languages
Array of strings

List of languages included in the order.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/orders/%7BorderId%7D?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
{
  • "id": "650c075c9db5e5ab0e661277",
  • "orderNumber": 3926,
  • "sourceLanguage": "en",
  • "created": "2023-12-26T14:09:49.556Z",
  • "dueDate": "2023-11-28T12:56:46.510Z",
  • "requester": "Jane Doe",
  • "status": "processing",
  • "languages": [
    ]
}

Request custom order brief template

The Custom Order Brief feature is currently only available for Enterprise plans. It enables to pass on additional order brief information in a predefined, structured way in a new order request.

The same custom order brief template will be returned for all projects and branches in a particular team. Using branch parameter is possible, but not necessary.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
Array
name
required
string

Field name to be used in new order request. In case the field name is not matched to any in the template, it will be ignored, or if the order brief template contains a mandatory fields that is not provided, an error will be returned.

type
required
string

The field can be of type: - text - a free text value is accepted - selection - only values predefined in selectionList are accepted.

selectionList
string

List of predefined values to be used when the field type is selection.

defaultValue
string

If no value is provided, this will be the value used in the custom order brief.

placeholder
string

Placeholder that defines the value.

mandatory
string

A valid value for this field must be provided: non-empty text or item from selectionList. In case of conditional fields, the value must be provided only if the condition is fulfilled.

object

Some fields are used in order brief conditionally. For simplicity the conditions are only one level deep (a conditional field is not included in condition of another field).

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/orderBriefTemplate?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json

In the below example there are 4 custom order brief fields defined. The example custom brief should be interpreted as follows:

  1. Project name is a mandatory text field. The non-empty value must be provided, otherwise the order will not be created.
  2. Project type is a selection field. The value in the new order request must match one of the provided selection options. If not provided or not matching, the default value translation will be used.
  3. Review rounds is a conditional text field and can only be used when review value is selected in Project type field.
  4. Screens Review is a conditional and mandatory selection field. If the condition is fulfilled, the field must be provided. In the example, the field is necessary if the value of Project name contains the text screen. The field doesn't have a default value, so if no value or invalid value is provided, the order is not created.

Note The field names and values are case-sensitive, so in particular the custom order brief names in new order request must be exactly as in the response here.

Example values that can be put in customBrief array in a new order creation request based on the below example order brief template:

>     ...
>     "customBrief":[
>         { "name": "Project name", "value": "My app translation project" },
>         { "name": "Project type", "value": "translation" }
>         { "name": "Screens Review", "value": "Yes" }
>     ],
>     ...
[
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]

Webhooks

Operations associated with orders. Learn more about webhooks here.

Create or update project webhooks

Permission Requirements(Personal access tokens):

  • create_and_update_webhooks

Use this endpoint to create a new webhook and update existing webhook. When it is an update, the webhookEndpointId parameter should be set, where webhookEndpointId is the id of the webhook that should be updated. A webhook's id can be copied from the webhook modal in the project settings.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

webhookEndpointId
string

This should be set when a webhook should be updated, set the id of the webhook that should be updated here.

header Parameters
X-Personal-Access-Token
required
string
Example: 52b82d945c6115f2c4cc3844ee872f83

For POST requests it is recommended and in some cases required to provide a Personal Access Token. To do so, set the X-Personal-Access-Token header with your token.

Example: X-Personal-Access-Token: 52b82d945c6115f2c4cc3844ee872f83.

Request Body schema: application/json
disabled
boolean
Default: false

This is an optional parameter, if set to true, Applanga will no longer send requests to the configured url. This is false by default when.

url
string

This is a required parameter when creating a new webhook. It is the endpoint that Applanga will make a request when needed. A valid https url is expected here

httpMethod
string
Enum: "get" "post"

This is a required parameter when creating a new webhook. Only get and post http methods are allowed, setting any other value would result in an error response.

Array of objects

It is an array of objects representing HTTP headers, where each object must contain the following fields key, value and optionally description.

object

When the httpMethod is set to post, the content will be set in the webhook request, and in the webhook request a Content-Type header will be set to the value of contentType.

Responses

Response Schema: application/json
_id
string

Unique identifier of the object

disabled
boolean
Default: false

Indicates if the webhook is disabled or not. If set to true then Applanga will no longer send requests to the configured url.

url
string

It is the endpoint that Applanga will make a request when needed.

httpMethod
string
Enum: "get" "post"
Array of objects

It is an array of objects representing HTTP headers, where each object contains the following fields key, value and optionally description.

object

When the httpMethod is set to post, the content will be set in the webhook request, and in the webhook request a Content-Type header will be set to the value of contentType.

userId
string

Id of the user thatcreated teh webhook.

Request samples

Content type
application/json
{
  • "httpMethod": "post",
  • "headers": [
    ],
  • "body": {
    }
}

Response samples

Content type
application/json
{
  • "_id": "6581afcfd90bf002ebc4f4b7",
  • "created": "2023-12-19T14:59:27.607Z",
  • "httpMethod": "post",
  • "body": {
    },
  • "headers": [
    ],
  • "disabled": false,
  • "userId": "5fd7709070b8bd529ed8f3a8"
}

Request list of all project webhooks

Use this endpoints to fetch webhooks configured in a project. The API will identify your project and authenticate the token and return all the webhooks in the project.

Authorizations:
apiAccessToken
query Parameters
app
required
string
Example: app=608fbe4db764186e651f8e2b

This is the id of the project that the translations should be uploaded to. It is required for both legacy and branching projects.

branch
string
Example: branch=608fbe4db764186e651f8e2b

If you are using a branching project and want to specify the branch, then this parameter should be set to the id of the branch. You can get the branch id either in the settings of your project or request it via an api route (see Requesting Branches) or for more information on branching have a look at our branching documentation).

All available Api features can be extended with the "branch" parameter and will perform the requested action on the specified branch. If there is no branch parameter in the request, the action is performed on the "main" branch.

Responses

Response Schema: application/json
Array
name
required
string

Name of the tag.

entryKeys
Array of strings

List of keys for entries assigned to the tag.

category
string

Tags can have specific category associations. Categories are used for more specific tracking of keys. Categories exist within a project and can be used to easily differentiate between tags and to track things like platforms, releases, and workflows (e.g. design review, development review, etc.) The Applanga dashboard is pre-populated with some platform-related categories: iOS, Android, Web, and Jira. Category options can be managed on the Project Settings page.

id
string

Unique identifier of the object

createdAt
string

Timestamp of when the tag was created.

updatedAt
string

Timestamp of when the tag was last updated.

Request samples

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/webhooks?app=608fbe4db764186e651f8e2b&branch=608fbe4db764186e651f8e2b");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer REPLACE_BEARER_TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);

Response samples

Content type
application/json
[
  • {
    }
]