# 1. Create job
curl -X POST https://api.runconvert.com/v3/jobs \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tag": "abw-to-docx",
"tasks": {
"upload-file": {
"operation": "import/upload"
},
"convert": {
"operation": "convert",
"input": "upload-file",
"output_format": "docx"
},
"export-result": {
"operation": "export/url",
"input": "convert"
}
}
}'
# 2. Upload your file (use upload_url from the response)
curl -X PUT "$UPLOAD_URL" --upload-file input.abw
# 3. Poll for result
curl https://api.runconvert.com/v3/jobs/$JOB_ID?include=tasks \
-H "Authorization: Bearer YOUR_API_KEY"
const API_KEY = 'YOUR_API_KEY';
const BASE = 'https://api.runconvert.com/v3';
// 1. Create job
const { data: job } = await fetch(`${BASE}/jobs`, {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
tag: 'abw-to-docx',
tasks: {
'upload-file': { operation: 'import/upload' },
convert: {
operation: 'convert',
input: 'upload-file',
output_format: 'docx',
},
'export-result': { operation: 'export/url', input: 'convert' },
},
}),
}).then((r) => r.json());
// 2. Upload file
const uploadTask = job.tasks.find((t) => t.name === 'upload-file');
await fetch(uploadTask.upload_url, { method: 'PUT', body: fileBlob });
// 3. Poll until finished
let downloadUrl;
while (!downloadUrl) {
await new Promise((r) => setTimeout(r, 1000));
const { data } = await fetch(
`${BASE}/jobs/${job.id}?include=tasks`,
{ headers: { Authorization: `Bearer ${API_KEY}` } },
).then((r) => r.json());
if (data.status === 'finished') {
const exportTask = data.tasks.find((t) => t.name === 'export-result');
downloadUrl = exportTask.result.files[0].url;
}
}
console.log('Download URL:', downloadUrl);
import requests, time
API_KEY = 'YOUR_API_KEY'
BASE = 'https://api.runconvert.com/v3'
HEADERS = {'Authorization': f'Bearer {API_KEY}'}
# 1. Create job
job = requests.post(f'{BASE}/jobs', headers=HEADERS, json={
'tag': 'abw-to-docx',
'tasks': {
'upload-file': {'operation': 'import/upload'},
'convert': {
'operation': 'convert',
'input': 'upload-file',
'output_format': 'docx',
},
'export-result': {'operation': 'export/url', 'input': 'convert'},
},
}).json()['data']
# 2. Upload file
upload_task = next(t for t in job['tasks'] if t['name'] == 'upload-file')
with open('input.abw', 'rb') as f:
requests.put(upload_task['upload_url'], data=f)
# 3. Poll until finished
while True:
data = requests.get(
f"{BASE}/jobs/{job['id']}?include=tasks",
headers=HEADERS,
).json()['data']
if data['status'] == 'finished':
export_task = next(t for t in data['tasks'] if t['name'] == 'export-result')
print('Download URL:', export_task['result']['files'][0]['url'])
break
time.sleep(1)