Find Supported File Formats and Languages via the API

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

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
FieldTypeDescription
languagesarray[object]The array of target language objects configured for this project.
languages[].idintegerThe unique identifier for the language.
languages[].isostringThe ISO 639-1 language code (e.g., en, es, fr).
languages[].namestringThe 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
FieldTypeDescription
extensionsarrayAn array of supported file extension objects.
extensions[].extensionstringThe file extension, without the dot.
extensions[].additional_translation_filesarrayAn 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 loading
  • wp – JavaScript translation files used in WordPress for client-side internationalization
  • php – Translation files stored as PHP arrays

Code Examples

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

Scroll to Top