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.
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
.
For POST, PUT, and DELETE project related 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
.
For non project related requests the Personal Access Token must be placed in Authorization header. Example: Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxx
.
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
.
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}
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.
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.
Operations associated with translations. Please note that the terms Entry
and Translation
are synonymous and are used interchangeably or sometimes together.
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. |
{- "<language>1": {
- "accepted": 0,
- "needsAttention": 0,
- "inOrder": 0,
- "new": 0,
- "needsTranslation": 0,
- "needsReview": 0,
- "rejected": 0,
- "all": 0,
- "draft": 0,
- "translated": 0,
- "notTranslated": 0,
- "locked": 0,
- "additionalProperties": "string"
}, - "<language>2": {
- "accepted": 0,
- "needsAttention": 0,
- "inOrder": 0,
- "new": 0,
- "needsTranslation": 0,
- "needsReview": 0,
- "rejected": 0,
- "all": 0,
- "draft": 0,
- "translated": 0,
- "notTranslated": 0,
- "locked": 0,
- "additionalProperties": "string"
}
}
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.
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. |
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: |
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
to set the language display of name of
| |
required | object Top-level data object |
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 |
Basic example with no only the setStatus
set to needs review
(2) in options and the value
, draft
set in entry data.
{- "options": {
- "setStatus": "2"
}, - "data": {
- "en": {
- "main": {
- "entries": {
- "key1": {
- "v": "Value1",
- "d": "draft1"
}
}
}
}
}
}
{- "total": 1,
- "added": 1,
- "updated": 1,
- "tagUpdates": 0,
- "groupChanged": 1,
- "groupCountChanges": {
- "5e258d3e1f7363cb911dd535": 1
}, - "_additionalData": {
- "skippedEntries": [
- {
- "_id": "608fbe4db764186e651f8e2b",
- "key": "en",
- "language": "string",
- "group": "608fbe4db764186e651f8e2b",
- "user": "608fbe4db764186e651f8e2b",
- "updatedAt": "2024-01-22T12:40:51.711Z",
- "value": "string",
- "draft": "string",
- "locked": false,
- "src": "/src/File1",
- "comment": "string",
- "status": "string"
}
]
}, - "keys": [
- "key1"
]
}
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.
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 |
includeStatus | boolean Default: false Example: includeStatus=true If set to |
includeComment | boolean Default: false Example: includeComment=true If set to |
includeLockInfo | boolean Default: false Example: includeLockInfo=true If set to |
includeDescription | boolean Default: false Example: includeDescription=true If set to |
includeMeta | boolean Default: false Example: includeMeta=true If set to |
includeMetaForAllLanguages | boolean Default: false Example: includeMetaForAllLanguages=true If set to |
includeDraft | boolean Default: true Example: includeDraft=false If set to |
includeValue | boolean Default: true Example: includeValue=false If set to |
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 |
includeUpdateDate | boolean Default: false Example: includeUpdateDate=true If set to |
includeUserId | boolean Default: false Example: includeUserId=true If set to |
includeLanguageId | boolean Default: false Example: includeLanguageId=true If set to |
includeGroupId | boolean Default: false Example: includeGroupId=true If set to |
removeCrChar | boolean Default: false Example: removeCrChar=true If set to |
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
In the preceding example all the known translation status are present including a custom string status Example to include additionally src, status and status description: |
requestedGroups | Array of strings Example: requestedGroups=["main"] Limit scope of entries returned to the specified groups. Note that the group names are expected here. |
requestedLanguages | Array of strings Example: requestedLanguages=["en","de"] Limit scope of entries returned to the specified languages. Note that the language codes are expected here. |
requestedTagIds | Array of strings Example: requestedTagIds=["669a94819a3e29a04018320e","669a94819a3e29a040183204"] Limit scope of entries returned to the specified Tags. Note that the tag id's are expected here. If both the |
requestedOrderId | string Example: requestedOrderId=608fbe4db764186e651f8e2b Limit scope of entries returned to the specified Order. Note an order id is needed. If both the |
requestedStatus | Array of integers Example: requestedStatus=[1, 2] Limit scope of entries returned to the specified statuses. |
_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. |
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&requestedOrderId=608fbe4db764186e651f8e2b&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);
{- "_id": "608fbe4db764186e651f8e2b",
- "__v": "1.0",
- "draftModeEnabled": true,
- "collectMissingEnabled": false,
- "baseLanguage": "en",
- "name": "yourAppName",
- "data": {
- "en": {
- "main": {
- "version": "25",
- "entries": {
- "MenuTitle1 key": {
- "d": "Menu Title1 draft",
- "v": "Menu Title1 value",
- "desc": "description",
- "updatedAt": "2020-02-26T15:00:08.676Z",
- "userId": "5e5688e0d7xxxx73391817c8",
- "src": "/en/menu_strings.xml",
- "meta": {
- "metaKey1": "metadata value 1",
- "metaKey2": "metadata value 2"
}
}, - "MenuTitle2 key": {
- "d": "Menu Title2 draft",
- "v": "Menu Title2 value",
- "updatedAt": "2020-02-25T15:00:08.676Z",
- "userId": "5e5688e0d7xxxx73391817c8",
- "src": "/en/menu_strings.xml"
}
}
}
}
}
}
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. |
tagId | string Example: tagId=608fbe4db764186e651f8e2b This is the id of a tag, inside the given project, to filter a query by. The query will always be limited to the given Tag scope |
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. |
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&tagId=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);
{- "de": {
- "all": 39,
- "draft": 0,
- "translated": 7,
- "notTranslated": 32,
- "locked": 0,
- "outdated": 0,
- "inTranslation": 0,
- "accepted": 0,
- "needsAttention": 0,
- "inOrder": 0,
- "new": 39,
- "needsTranslation": 0,
- "needsReview": 0,
- "rejected": 0,
- "customStatus-Crescent": 0,
- "customStatus-Violet": 0
}, - "en": {
- "accepted": 4,
- "needsAttention": 3,
- "inOrder": 0,
- "new": 32,
- "needsTranslation": 0,
- "needsReview": 2,
- "rejected": 1,
- "customStatus-Crescent": 0,
- "customStatus-Violet": 0,
- "all": 39,
- "draft": 4,
- "translated": 37,
- "notTranslated": 0,
- "locked": 0,
- "outdated": 0,
- "inTranslation": 0
}
}
Permission Requirements(Personal access tokens):
delete_translations
Use this endpoint to delete entries in a project. The entries are deleted in all languages.
If any of the keys provided is locked, the endpoint would return an error, showing the locked key and languages.
The API will identify your project and authenticate the token and delete the entries.
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. |
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: |
entries required | Array of strings Array of entry keys to be deleted |
{- "entries": [
- "key1",
- "key2"
]
}
{ }
Operations related to tags. Please see the following guide for more information about tags.
Operations associated with screenshots. Please see these guides for more information regarding screenshots
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;
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.
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. |
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: |
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 |
{ "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>" }
{ }
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.
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. |
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. |
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);
[- {
- "originalName": "CyOrcrgVIAAJLDt.jpg_Test1",
- "mimetype": "image/jpeg",
- "tag": {
- "name": "Test1",
- "created": "2017-11-28T14:16:59.083Z",
- "updatedAt": "2017-11-28T15:12:29.651Z",
- "languageEntryIds": [
- "Test1"
]
}, - "metadata": {
- "width": 480,
- "height": 635,
- "deviceModel": "IPhone",
- "operatingSystem": "iOS",
- "bundleVersion": "1.0",
- "deviceLanguageLong": "English",
- "updatedAt": "2017-11-28T14:17:32.241Z",
- "sha1": "907d14fb3af2b0d4f18c2d46abe8aedce17367bd",
- "stringPositions": [
- {
- "key": "Test1",
- "x": 100,
- "y": 10,
- "width": 200,
- "height": 40
}
]
}
}
]
Permission Requirements(Personal access tokens):
delete_tags_screenshots
This endpoint deletes screenshots based on the specified parameters in the request body.
The deletion is performed for screenshots that match all given criteria, where conditions are combined using AND
operations.
Additionally, it will silently delete tags associated with affected screenshots if no screenshots remain for those tags (only for those affected screenshots).
Deletions will only happen when we find matching screenshots. If no matching screenshots were found for a given query no screenshots
or tags
will be deleted.
The API will identify your project and authenticate the token.
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. |
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: |
tagNames required | Array of strings Array of tag names of screenshots to be deleted (Only one of |
tagIds required | Array of strings Array of tag ids of screenshots to be deleted. (Only one of |
latestOnly | integer Default: false
|
languages | Array of strings Array of language codes. ex) Empty Array: Causes the endpoint to return Required: If any of the additional filter values, Ommited: All |
resolutions | Array of strings Array of resolution strings (ex. 100x100, width x height) of screenshots to be deleted. ex) Empty Array: Causes the endpoint to return Ommited: All |
tagCategories | Array of strings Array of tag categories. ex) Empty Array: Causes the endpoint to return Ommited: All |
os | Array of strings Array of operating system names. ex) Empty Array: Causes the endpoint to return Ommited: All |
devices | Array of strings Array of devices. ex) Empty Array: Causes the endpoint to return Ommited: All |
versions | Array of strings Array of version strings. ex) Empty Array: Causes the endpoint to return Ommited: All |
screenshotsDeletedCount | integer Count of actual screenshots deleted |
{- "tagNames": [
- "test-tag-name1",
- "test-tag-name2",
- "test-tag-name2"
], - "latestOnly": false,
- "devices": [
- "phone"
], - "languages": [
- "de",
- "da"
], - "versions": [
- "1.0"
], - "resolutions": [
- "1214x354",
- "1026x184",
- "1106x814"
], - "tagCategories": [
- "Jira",
- "example"
]
}
{- "screenshotsDeletedCount": 2
}
Operations related to tags and screenshots deletion. Please see the delete tag by id and the mass screenshot delete api for more information.
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.
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. |
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: |
name required | string Name of te branch. |
sourceBranch required | string Indicates which branch to copy. |
createInitialSettingsFile | boolean If set to |
object Object with the permissions for the branch. allowed permissions to set are 'readOnly' (default: false) and 'editableByTranslator' (default: true) (optional). |
_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). | |
settingsFileUrl | string Only present if createInitialSettingsFile was true within the request. Will contain a download Url that is valid for 15 minutes for getting the settings file of the new Branch |
{- "name": "my_new_branch",
- "sourceBranch": "608fbe4db764186e651f8e2b",
- "permissions": {
- "readOnly": false,
- "editableByTranslator": true
}
}
{- "_id": "608fbe4db764186e651f8e27",
- "name": "my_new_branch",
- "permissions": {
- "readOnly": false,
- "editableByTranslator": true
}
}
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. |
defaultBranch | string Id of the default branch. |
Array of objects List of all branches that exist in the project. |
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);
{- "branches": [
- {
- "name": "main",
- "_id": "608fbe4db764186e651f8e2b"
}, - {
- "name": "development",
- "_id": "608fbe4db764186e651f8e2c"
}
], - "defaultBranch": "608fbe4db764186e651f8e2b"
}
Permission Requirements(Personal access tokens):
get_project_list
Return list of projects the owner of the personal access token has access to. Authenticate via personal access token.
userroles | Array of strings Example: userroles=["admin","owner"] When the parameter is used, only the projects in which the user has a specified role will be listed. The following roles are supported: 'owner', 'admin', 'manager', 'translator', 'tptadmin', 'tptservices' and 'tpttranslator'. By default all projects are returned. |
Authorization required | string Example: 52b82d945c6115f2c4cc3844ee872f83 For this GET request it is required to provide a Personal Access Token in Authorization header. To do so, set the Authorization header with your token. Example: |
_id | string Unique identifier of the object |
name | string Project name |
role | string The user role in the project |
created | string Timestamp of when the project was created. |
team | string Unique identifier of the object |
CURL *hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET"); curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/projects?userroles=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);
[- {
- "name": "Branching",
- "_id": "6560610d98d6ea2a18d5ad9f",
- "team": "64cb9e7c8bc9574c49de627a",
- "created": "2023-11-24T08:38:37.257Z",
- "role": "owner"
}, - {
- "name": "Test app",
- "_id": "650176053f36024b5109cab9",
- "team": "64cb9e7c8bc9574c49de627a",
- "created": "2023-09-13T08:42:45.418Z",
- "role": "admin"
}
]
Permission Requirements(Personal access tokens):
get_project_token
Return the project API access token. Authenticate via personal access token.
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. |
Authorization required | string Example: 52b82d945c6115f2c4cc3844ee872f83 For this GET request it is required to provide a Personal Access Token in Authorization header. To do so, set the Authorization header with your token. Example: |
accessToken | string Api access token for the project. |
CURL *hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET"); curl_easy_setopt(hnd, CURLOPT_URL, "https://api.applanga.com/v1/api/projects/token?app=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);
{- "accessToken": "YOUR-PROJECT-!-ACCESS-TOKEN"
}
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.
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. |
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: |
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 |
identicalGroups | boolean Default: false If set to |
identicalProjectSettings | boolean Default: false If set to |
identicalBranches | boolean Default: false If set to |
createInitialSettingsFile | boolean If set to |
accessToken | string Api access token for the newly created project. |
string or object |
{- "projectName": "Sibling",
- "identicalLanguages": true,
- "identicalGroups": true,
- "identicalProjectSettings": true,
- "identicalBranches": true
}
{- "accessToken": "YOUR-PROJECT-!-ACCESS-TOKEN"
}
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.
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. |
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: |
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
|
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: |
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:
|
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. |
ignoreOutdatedInActiveOrders | boolean By default, the strings that are already in an order but they have become outdated (their source has changed) will be added to a new order. The exception is when sourceLanguage option and the project base language differ. Set the option to false to skip the strings with changed source.. |
_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. |
updatedAt | string Timestamp of when the order was last updated. |
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"
|
tags | Array of strings List of used tag ids to filter by |
includeNoTagKeys | boolean Order includes all keys that are not Tagged |
object |
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": [
- "fr-CA",
- "es-MX",
- "pt-BR"
], - "orderToCopy": "64cb9e7c8bc9574c49de627f",
- "languageToCopy": "de"
}
{- "order": {
- "_id": "64df2527e867564bdd15663e",
- "orderNumber": 3017,
- "created": "2023-12-26T14:09:49.556Z",
- "dueDate": "2023-11-28T12:56:46.510Z",
- "requester": "John Doe",
- "status": "requested",
- "sourceLanguage": "en",
- "sourceWordCount": 235,
- "stringOption": "all",
- "targetLanguages": {
- "fr-CA": {
- "words": 235,
- "deliveryStatus": "notDelivered"
}, - "es-MX": {
- "words": 235,
- "deliveryStatus": "notDelivered"
}
}
}
}
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. |
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. |
updatedAt | string Timestamp of when the order was last updated. |
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"
|
tags | Array of strings List of used tag ids to filter by |
includeNoTagKeys | boolean Order includes all keys that are not Tagged |
languages | Array of strings List of languages included in the order. |
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);
[- {
- "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": [
- "de",
- "fr-FR"
]
}
]
orderId required | string Example: 5fd77160c876c25340b17404 Unique identifier of an order |
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. |
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. |
updatedAt | string Timestamp of when the order was last updated. |
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"
|
tags | Array of strings List of used tag ids to filter by |
includeNoTagKeys | boolean Order includes all keys that are not Tagged |
languages | Array of strings List of languages included in the order. |
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);
{- "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": [
- "de",
- "fr-FR"
]
}
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.
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. |
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 | string List of predefined values to be used when the field type is |
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 |
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). |
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);
In the below example there are 4 custom order brief fields defined. The example custom brief should be interpreted as follows:
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" }
> ],
> ...
[- {
- "name": "Project name",
- "type": "text",
- "mandatory": true
}, - {
- "name": "Project type",
- "type": "selection",
- "mandatory": true,
- "selectionList": [
- "translation",
- "review"
], - "defaultValue": "translation"
}, - {
- "name": "Review rounds",
- "type": "text",
- "mandatory": false,
- "defaultValue": "One",
- "conditional": {
- "conditionField": "Project type",
- "condition": "is",
- "conditionValue": "translation"
}
}, - {
- "name": "Screens Review",
- "type": "selection",
- "mandatory": true,
- "selectionList": [
- "Yes",
- "No"
], - "conditional": {
- "conditionField": "Project name",
- "condition": "conatins",
- "conditionValue": "screen"
}
}
]
Operations associated with orders. Learn more about webhooks here.
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.
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. |
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: |
eventType | string Enum: "TranslationChanges" "StatusChanges" "AllChanges" Refers to the activities that will trigger a webhook. |
disabled | boolean Default: false This is an optional parameter, if set to |
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 |
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 |
_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 | |
userId | string Id of the user thatcreated teh webhook. |
eventType | string Enum: "TranslationChanges" "StatusChanges" "AllChanges" Refers to the activities that will trigger a webhook. |
{- "httpMethod": "post",
- "headers": [
- {
- "key": "sample-header",
- "value": "header value",
- "description": "Header description"
}
], - "body": {
- "content": "Example content",
- "contentType": "application/json"
}
}
{- "_id": "6581afcfd90bf002ebc4f4b7",
- "created": "2023-12-19T14:59:27.607Z",
- "httpMethod": "post",
- "body": {
- "content": "Example content",
- "contentType": "application/json"
}, - "headers": [
- {
- "key": "sample-header",
- "value": "header value",
- "description": "Header description"
}
], - "disabled": false,
- "eventType": "TranslationChanges",
- "userId": "5fd7709070b8bd529ed8f3a8"
}
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. |
_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 | |
userId | string Id of the user thatcreated teh webhook. |
eventType | string Enum: "TranslationChanges" "StatusChanges" "AllChanges" Refers to the activities that will trigger a webhook. |
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);
[- {
- "_id": "6581afcfd90bf002ebc4f4b7",
- "created": "2023-12-19T14:59:27.607Z",
- "httpMethod": "post",
- "body": {
- "content": "Example content",
- "contentType": "application/json"
}, - "headers": [
- {
- "key": "sample-header",
- "value": "header value",
- "description": "Header description"
}
], - "disabled": false,
- "eventType": "TranslationChanges",
- "userId": "5fd7709070b8bd529ed8f3a8"
}
]