curl --request POST \
--url https://api.sunbird.ai/tasks/translate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"target_language": "<string>",
"text": "<string>",
"source_language": "<string>"
}
'import requests
url = "https://api.sunbird.ai/tasks/translate"
payload = {
"target_language": "<string>",
"text": "<string>",
"source_language": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({target_language: '<string>', text: '<string>', source_language: '<string>'})
};
fetch('https://api.sunbird.ai/tasks/translate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sunbird.ai/tasks/translate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'target_language' => '<string>',
'text' => '<string>',
'source_language' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sunbird.ai/tasks/translate"
payload := strings.NewReader("{\n \"target_language\": \"<string>\",\n \"text\": \"<string>\",\n \"source_language\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sunbird.ai/tasks/translate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"target_language\": \"<string>\",\n \"text\": \"<string>\",\n \"source_language\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sunbird.ai/tasks/translate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"target_language\": \"<string>\",\n \"text\": \"<string>\",\n \"source_language\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"delayTime": 123,
"executionTime": 123,
"id": "<string>",
"output": {
"text": "<string>",
"translated_text": "<string>",
"source_language": "<string>",
"target_language": "<string>",
"Error": "<string>"
},
"status": "<string>",
"workerId": "<string>",
"usage": {
"prompt_tokens": 123,
"completion_tokens": 123,
"total_tokens": 123
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Translate
Translate text between supported languages using the sunflower-9b model.
Languages are accepted as ISO 639-3 codes (e.g. lug) or full names
(e.g. Luganda), case-insensitively. source_language is optional — when
omitted, Sunflower infers the source language from the text. Translation
works between any pair of supported languages.
Supported languages — English plus the 67 African languages
sunflower-9b supports. Quality varies by language; see the model’s
good/moderate/basic tiers.
Acholi (ach), Afrikaans (afr), Akan (aka), Alur (alz), Amharic (amh),
Aringa (luc), Ateso (teo), Bambara (bam), Bari (bfa), Bemba (bem),
Berber (ber), Chichewa (nya), Dagaare (dga), Dagbani (dag),
Dinka (din), English (eng), Ewe (ewe), Fulani (ful), Hausa (hau),
Igbo (ibo), Ik (ikx), Jopadhola (adh), Kabyle (kab), Kakwa (keo),
Kalenjin (kln), Kanuri (kau), Karamojong (kdj), Kikuyu (kik),
Kinyarwanda (kin), Kirundi (run), Kumam (kdi), Kupsabiny (kpz),
Kwamba (rwm), Lango (laj), Lendu (led), Lingala (lin), Lubwisi (tlj),
Luganda (lug), Lugbara (lgg), Lugungu (rub), Lugwere (gwr),
Luhya (luy), Lumasaba (myx), Lunyole (nuj), Luo (luo), Lusoga (xog),
Ma’di (mhi), Malagasy (mlg), Ndebele (nbl), Nigerian Pidgin (pcm),
Oromo (orm), Pokot (pok), Rukiga (cgg), Rukonjo (koo),
Runyankole (nyn), Runyoro (nyo), Ruruuli (ruc), Rutooro (ttj),
Samia (lsm), Shona (sna), Somali (som), Sotho (sot), Swahili (swa),
Tswana (tsn), Wolof (wol), Xhosa (xho), Yoruba (yor), Zulu (zul).
Example request
{
"source_language": "eng",
"target_language": "lug",
"text": "Hello, how are you?"
}
Example response
{
"id": "trans-1a2b3c...",
"status": "COMPLETED",
"output": {
"translated_text": "Oli otya?",
"source_language": "eng",
"target_language": "lug"
}
}
Errors
400— unsupported language, orsource_languageequalstarget_language502— the model returned empty output or failed unexpectedly503— the model is still loading or inference timed out
curl --request POST \
--url https://api.sunbird.ai/tasks/translate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"target_language": "<string>",
"text": "<string>",
"source_language": "<string>"
}
'import requests
url = "https://api.sunbird.ai/tasks/translate"
payload = {
"target_language": "<string>",
"text": "<string>",
"source_language": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({target_language: '<string>', text: '<string>', source_language: '<string>'})
};
fetch('https://api.sunbird.ai/tasks/translate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sunbird.ai/tasks/translate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'target_language' => '<string>',
'text' => '<string>',
'source_language' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sunbird.ai/tasks/translate"
payload := strings.NewReader("{\n \"target_language\": \"<string>\",\n \"text\": \"<string>\",\n \"source_language\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sunbird.ai/tasks/translate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"target_language\": \"<string>\",\n \"text\": \"<string>\",\n \"source_language\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sunbird.ai/tasks/translate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"target_language\": \"<string>\",\n \"text\": \"<string>\",\n \"source_language\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"delayTime": 123,
"executionTime": 123,
"id": "<string>",
"output": {
"text": "<string>",
"translated_text": "<string>",
"source_language": "<string>",
"target_language": "<string>",
"Error": "<string>"
},
"status": "<string>",
"workerId": "<string>",
"usage": {
"prompt_tokens": 123,
"completion_tokens": 123,
"total_tokens": 123
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
Request body for Sunflower-backed text translation.
Languages may be given as ISO 639-3 codes (e.g. lug) or full names
(e.g. Luganda), case-insensitively. Unsupported languages are rejected
with a 400 that lists the supported set.
Response
Successful Response
Translation worker output wrapped with job-execution metadata.
Time spent waiting in queue (ms)
Time spent executing the job (ms)
Unique job identifier
The translation output data
Show child attributes
Show child attributes
Job status (e.g., COMPLETED, FAILED)
Identifier of the worker that processed the job
Token usage for the Sunflower translation call
Show child attributes
Show child attributes

