Skip to main content

API Documentation

Integrate XLIFF AI Translator into your applications

Overview

The XLIFF AI Translator API allows you to programmatically translate XLIFF files using our advanced AI models. The API is RESTful and returns JSON responses.

Base URL

https://api.xliffai.com/v1

Authentication

All API requests require authentication using your API key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Authentication

Getting Your API Key

API keys are available for Pro and Enterprise users in your Settings page.

  1. Go to your Settings page
  2. Navigate to the API Access section
  3. Copy your API key
  4. Keep it secure and never share it publicly

Using Your API Key

Include your API key in the Authorization header of all requests:

curl -X POST \
-H "Authorization: Bearer sk-...your-api-key" \
-H "Content-Type: application/json" \
-d '{"file": "base64-encoded-xliff", "target_language": "es"}' \
https://api.xliffai.com/v1/translate

Translations Management

List Translations

GET /api/v1/translations

Query Parameters

page Optional
per_page Optional (default: 20)

Response

{
"translations": [
{
"id": 123,
"title": "My Translation Project",
"status": "completed",
"source_language": "English",
"target_language": "Spanish",
"created_at": "2024-01-15T10:30:00Z",
"document_url": "https://...",
"final_document_url": "https://...",
"download_url": "https://..."
}
],
"pagination": {
"current_page": 1,
"total_pages": 5,
"total_count": 100,
"per_page": 20
}
}

Get Translation

GET /api/v1/translations/{id}

Response

{
"id": 123,
"title": "My Translation Project",
"status": "completed",
"source_language": "English",
"target_language": "Spanish",
"overwrite_target": true,
"ai_model": "claude",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:32:00Z",
"document_url": "https://...",
"final_document_url": "https://...",
"download_url": "https://...",
"error_message": null
}

Create Translation

POST /api/v1/translations

Request Body (multipart/form-data)

document: [file] // XLIFF file
translation[title]: "My Translation Project"
translation[source_language_id]: 1
translation[target_language_id]: 2
translation[overwrite_target]: true
translation[ai_model]: "claude"

Parameters

document Required
translation[title] Optional
translation[source_language_id] Required
translation[target_language_id] Required
translation[overwrite_target] Optional
translation[ai_model] Optional

Update Translation

PATCH /api/v1/translations/{id}

Request Body (JSON)

{
"translation": {
"title": "Updated Project Title",
"overwrite_target": false
}
}

Delete Translation

DELETE /api/v1/translations/{id}

Returns 204 No Content on successful deletion.

Download Translation

GET /api/v1/translations/{id}/download

Downloads the final translated document as a file attachment.

Error Handling

Error Response Format

{
"error": {
"code": "invalid_file_format",
"message": "Unsupported file format",
"details": "Only XLIFF 1.2 and 2.0 formats are supported"
}
}

Common Error Codes

invalid_api_key 401 - Invalid or missing API key
rate_limit_exceeded 429 - API rate limit exceeded
invalid_file_format 400 - Unsupported file format
file_too_large 400 - File size exceeds limit
unsupported_language 400 - Language not supported

Rate Limits

Free Plan

5

requests per month

Pro Plan

100

requests per month

Enterprise

unlimited requests

Rate Limit Headers

API responses include rate limit information in headers:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1642233600

Code Examples

JavaScript/Node.js

const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');
// Create translation
const form = new FormData();
form.append('document', fs.createReadStream('file.xliff'));
form.append('translation[title]', 'My Translation Project');
form.append('translation[source_language_id]', '1');
form.append('translation[target_language_id]', '2');
const response = await axios.post('https://api.xliffai.com/v1/translations', form, {
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
...form.getHeaders()
}
});
// List translations
const translations = await axios.get('https://api.xliffai.com/v1/translations', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});

Python

import requests
# Create translation
files = {'document': open('file.xliff', 'rb')}
data = {
'translation[title]': 'My Translation Project',
'translation[source_language_id]': '1',
'translation[target_language_id]': '2'
}
response = requests.post(
'https://api.xliffai.com/v1/translations',
files=files,
data=data,
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
# List translations
translations = requests.get(
'https://api.xliffai.com/v1/translations',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)

Ruby

require 'net/http'
require 'json'
# Create translation
uri = URI('https://api.xliffai.com/v1/translations')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer YOUR_API_KEY'
request.set_form_data({
'translation[title]' => 'My Translation Project',
'translation[source_language_id]' => '1',
'translation[target_language_id]' => '2'
}, 'multipart/form-data')
# Add file to request
request.body_stream = File.open('file.xliff')
response = http.request(request)
# List translations
list_uri = URI('https://api.xliffai.com/v1/translations')
list_request = Net::HTTP::Get.new(list_uri)
list_request['Authorization'] = 'Bearer YOUR_API_KEY'
list_response = http.request(list_request)