Use these API endpoints to discover what source file formats and target languages your project supports before creating translation jobs.
Using these endpoints, you can query:
- Target languages available for your project (with ISO codes)
- Source file formats you can upload, plus any additional translation output formats PTC can generate for those files
All endpoints require a valid API token:
Authorization: Bearer YOUR_API_TOKEN
API Quick Links
List All Target Languages
Retrieves the list of languages your project can be translated into. You can also use this endpoint to get the correct ISO codes when creating content translation jobs.
HTTP Request
GET https://app.ptc.wpml.org/api/v1/languages
Parameters
This endpoint does not accept any parameters.
Responses
Success Response
- Code:
200 OK
- Content Type:
application/json
{
"languages": [
{
"id": 123,
"iso": "es",
"name": "Spanish"
},
{
"id": 124,
"iso": "fr",
"name": "French"
},
{
"id": 125,
"iso": "de",
"name": "German"
}
]
}
Response Schema
Field | Type | Description |
---|---|---|
languages | array[object] | The array of target language objects configured for this project. |
languages[].id | integer | The unique identifier for the language. |
languages[].iso | string | The ISO 639-1 language code (e.g., en , es , fr ). |
languages[].name | string | The human-readable name of the language. |
Error Responses
Unauthorized
- Code:
401 Unauthorized
{
"error": "Unauthorized access. Please provide a valid API token."
}
Forbidden
- Code:
403 Forbidden
{
"error": "Access denied. Insufficient permissions."
}
Example Requests
Basic request:
curl -X GET "https://app.ptc.wpml.org/api/v1/languages" \
-H "Content-Type: application/json"
Code Examples
const response = await fetch('https://app.ptc.wpml.org/api/v1/languages', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();
console.log('Available target languages:', data.languages);
// Get language codes only
const languageCodes = data.languages.map(lang => lang.iso);
console.log('Language codes:', languageCodes);
import requests
headers = {
'Content-Type': 'application/json'
}
response = requests.get('https://app.ptc.wpml.org/api/v1/languages', headers=headers)
data = response.json()
print("Available target languages:")
for language in data['languages']:
print(f"- {language['name']} ({language['iso']})")
# Get language codes for API calls
language_ids = [lang['id'] for lang in data['languages']]
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://app.ptc.wpml.org/api/v1/languages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
echo "Available target languages:\n";
foreach ($data['languages'] as $language) {
echo "- {$language['name']} ({$language['iso']})\n";
}
?>
const axios = require('axios');
const response = await axios.get('https://app.ptc.wpml.org/api/v1/languages', {
headers: {
'Content-Type': 'application/json'
}
});
console.log('Available target languages:');
response.data.languages.forEach(language => {
console.log(`- ${language.name} (${language.iso})`);
});
// Create a lookup map
const languageMap = response.data.languages.reduce((map, lang) => {
map[lang.iso] = lang;
return map;
}, {});
List Supported File Formats
Retrieves all source file extensions you can upload to PTC, along with any additional translation files PTC can generate for those inputs.
HTTP Request
GET https://app.ptc.wpml.org/api/v1/source_files/supported_extensions
Parameters
This endpoint does not accept any parameters.
Responses
Success Response
- Code:
200 OK
- Content Type:
application/json
{
"extensions": [
{
"extension": "po",
"additional_translation_files": ["mo", "wp", "php"]
},
{
"extension": "pot",
"additional_translation_files": ["mo", "wp", "php"]
},
{
"extension": "json",
"additional_translation_files": []
},
{
"extension": "yml",
"additional_translation_files": []
}
//...
]
}
Response Schema
Field | Type | Description |
---|---|---|
extensions | array | An array of supported file extension objects. |
extensions[].extension | string | The file extension, without the dot. |
extensions[].additional_translation_files | array | An array of additional output formats available for this extension type. |
Additional Translation Files
Some file types can generate extra translation files in other formats. For example, PO and POT files can produce:
mo
– Compiled gettext files, used by many applications for faster loadingwp
– JavaScript translation files used in WordPress for client-side internationalizationphp
– Translation files stored as PHP arrays
Code Examples
- cURL
- C# – HttpClient
- NodeJS – Native
- JavaScript jQuery
- Java – OkHttp
- Go – Native
- PHP – cURL
- Python – httpclient
- Ruby – Net::HTTP
curl -X GET "https://app.ptc.wpml.org/api/v1/source_files/supported_extensions" \
-H "Authorization: Bearer YOUR_API_TOKEN"
using System.Net.Http;
using System.Threading.Tasks;
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "YOUR_API_TOKEN");
var response = await client.GetAsync("https://app.ptc.wpml.org/api/v1/source_files/supported_extensions");
var content = await response.Content.ReadAsStringAsync();
const https = require('https');
const options = {
hostname: 'app.ptc.wpml.org',
path: '/api/v1/source_files/supported_extensions',
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
};
const req = https.request(options, (res) => {
let data = '';
res.on('data', (chunk) => { data += chunk; });
res.on('end', () => { console.log(JSON.parse(data)); });
});
req.end();
$.ajax({
url: 'https://app.ptc.wpml.org/api/v1/source_files/supported_extensions',
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
},
success: function(data) {
console.log(data);
}
});
import okhttp3.*;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://app.ptc.wpml.org/api/v1/source_files/supported_extensions")
.addHeader("Authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
String responseBody = response.body().string();
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
client := &http.Client{}
req, _ := http.NewRequest("GET", "https://app.ptc.wpml.org/api/v1/source_files/supported_extensions", nil)
req.Header.Add("Authorization", "Bearer YOUR_API_TOKEN")
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.ptc.wpml.org/api/v1/source_files/supported_extensions',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer YOUR_API_TOKEN'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
import requests
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
response = requests.get('https://app.ptc.wpml.org/api/v1/source_files/supported_extensions', headers=headers)
print(response.json())
require 'net/http'
require 'uri'
uri = URI('https://app.ptc.wpml.org/api/v1/source_files/supported_extensions')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body