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.
- Go to your Settings page
- Navigate to the API Access section
- Copy your API key
- 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)