curl --request POST \
--url https://eu.phrase.com/connectors/knak/v1/async/upload-raw-file \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Webhook: <x-webhook>' \
--data '
{
"credentials": {
"connectionUid": "7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11",
"organizationUid": "3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10"
},
"path": {
"pathType": "TRANSLATION_REQUEST",
"id": "tr_1234"
},
"targetLocale": "de",
"storageId": "e48eda63928c4155bez9fdbsaadc15f3"
}
'import requests
url = "https://eu.phrase.com/connectors/knak/v1/async/upload-raw-file"
payload = {
"credentials": {
"connectionUid": "7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11",
"organizationUid": "3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10"
},
"path": {
"pathType": "TRANSLATION_REQUEST",
"id": "tr_1234"
},
"targetLocale": "de",
"storageId": "e48eda63928c4155bez9fdbsaadc15f3"
}
headers = {
"X-Webhook": "<x-webhook>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Webhook': '<x-webhook>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
credentials: {
connectionUid: '7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11',
organizationUid: '3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10'
},
path: {pathType: 'TRANSLATION_REQUEST', id: 'tr_1234'},
targetLocale: 'de',
storageId: 'e48eda63928c4155bez9fdbsaadc15f3'
})
};
fetch('https://eu.phrase.com/connectors/knak/v1/async/upload-raw-file', 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://eu.phrase.com/connectors/knak/v1/async/upload-raw-file",
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([
'credentials' => [
'connectionUid' => '7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11',
'organizationUid' => '3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10'
],
'path' => [
'pathType' => 'TRANSLATION_REQUEST',
'id' => 'tr_1234'
],
'targetLocale' => 'de',
'storageId' => 'e48eda63928c4155bez9fdbsaadc15f3'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Webhook: <x-webhook>"
],
]);
$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://eu.phrase.com/connectors/knak/v1/async/upload-raw-file"
payload := strings.NewReader("{\n \"credentials\": {\n \"connectionUid\": \"7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11\",\n \"organizationUid\": \"3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10\"\n },\n \"path\": {\n \"pathType\": \"TRANSLATION_REQUEST\",\n \"id\": \"tr_1234\"\n },\n \"targetLocale\": \"de\",\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Webhook", "<x-webhook>")
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://eu.phrase.com/connectors/knak/v1/async/upload-raw-file")
.header("X-Webhook", "<x-webhook>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"credentials\": {\n \"connectionUid\": \"7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11\",\n \"organizationUid\": \"3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10\"\n },\n \"path\": {\n \"pathType\": \"TRANSLATION_REQUEST\",\n \"id\": \"tr_1234\"\n },\n \"targetLocale\": \"de\",\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.phrase.com/connectors/knak/v1/async/upload-raw-file")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Webhook"] = '<x-webhook>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"credentials\": {\n \"connectionUid\": \"7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11\",\n \"organizationUid\": \"3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10\"\n },\n \"path\": {\n \"pathType\": \"TRANSLATION_REQUEST\",\n \"id\": \"tr_1234\"\n },\n \"targetLocale\": \"de\",\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\"\n}"
response = http.request(request)
puts response.read_body{
"requestId": "e48eda63-928c-4155-bez9-fdbsaadc15f3",
"webHookUrl": "https://example.tld/my-webhook"
}""Upload raw content asynchronously
Upload a translation to a Knak translation request for a given target locale. The request
body must reference an already-stored file by storageId — upload the file to Phrase
file storage first. path must be a TRANSLATION_REQUEST path.
Async variant. This endpoint returns immediately with { requestId, webHookUrl }. The actual upload result is POSTed to the URL supplied in X-Webhook. X-Webhook is required.
curl --request POST \
--url https://eu.phrase.com/connectors/knak/v1/async/upload-raw-file \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Webhook: <x-webhook>' \
--data '
{
"credentials": {
"connectionUid": "7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11",
"organizationUid": "3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10"
},
"path": {
"pathType": "TRANSLATION_REQUEST",
"id": "tr_1234"
},
"targetLocale": "de",
"storageId": "e48eda63928c4155bez9fdbsaadc15f3"
}
'import requests
url = "https://eu.phrase.com/connectors/knak/v1/async/upload-raw-file"
payload = {
"credentials": {
"connectionUid": "7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11",
"organizationUid": "3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10"
},
"path": {
"pathType": "TRANSLATION_REQUEST",
"id": "tr_1234"
},
"targetLocale": "de",
"storageId": "e48eda63928c4155bez9fdbsaadc15f3"
}
headers = {
"X-Webhook": "<x-webhook>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Webhook': '<x-webhook>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
credentials: {
connectionUid: '7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11',
organizationUid: '3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10'
},
path: {pathType: 'TRANSLATION_REQUEST', id: 'tr_1234'},
targetLocale: 'de',
storageId: 'e48eda63928c4155bez9fdbsaadc15f3'
})
};
fetch('https://eu.phrase.com/connectors/knak/v1/async/upload-raw-file', 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://eu.phrase.com/connectors/knak/v1/async/upload-raw-file",
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([
'credentials' => [
'connectionUid' => '7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11',
'organizationUid' => '3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10'
],
'path' => [
'pathType' => 'TRANSLATION_REQUEST',
'id' => 'tr_1234'
],
'targetLocale' => 'de',
'storageId' => 'e48eda63928c4155bez9fdbsaadc15f3'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Webhook: <x-webhook>"
],
]);
$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://eu.phrase.com/connectors/knak/v1/async/upload-raw-file"
payload := strings.NewReader("{\n \"credentials\": {\n \"connectionUid\": \"7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11\",\n \"organizationUid\": \"3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10\"\n },\n \"path\": {\n \"pathType\": \"TRANSLATION_REQUEST\",\n \"id\": \"tr_1234\"\n },\n \"targetLocale\": \"de\",\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Webhook", "<x-webhook>")
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://eu.phrase.com/connectors/knak/v1/async/upload-raw-file")
.header("X-Webhook", "<x-webhook>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"credentials\": {\n \"connectionUid\": \"7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11\",\n \"organizationUid\": \"3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10\"\n },\n \"path\": {\n \"pathType\": \"TRANSLATION_REQUEST\",\n \"id\": \"tr_1234\"\n },\n \"targetLocale\": \"de\",\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.phrase.com/connectors/knak/v1/async/upload-raw-file")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Webhook"] = '<x-webhook>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"credentials\": {\n \"connectionUid\": \"7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11\",\n \"organizationUid\": \"3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10\"\n },\n \"path\": {\n \"pathType\": \"TRANSLATION_REQUEST\",\n \"id\": \"tr_1234\"\n },\n \"targetLocale\": \"de\",\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\"\n}"
response = http.request(request)
puts response.read_body{
"requestId": "e48eda63-928c-4155-bez9-fdbsaadc15f3",
"webHookUrl": "https://example.tld/my-webhook"
}""Authorizations
IDM-issued JWT. Obtain via the IDM authentication flow and pass as: Bearer
Headers
A logging ID of the request. It is propagated through Phrase systems, making it easier to connect logs from various services. If no ActionId is sent with a request, one will be generated by Bifrost and returned with the response.
Required on /async/... endpoints. Bifrost POSTs the operation result to this URL once the connector finishes processing.
Omitting this header on an async endpoint returns 400.
Body
Request body for uploading a translation to a Knak translation request. The file must already be in Phrase file storage — reference it by storageId.
Connection holding the Knak API key.
Show child attributes
Show child attributes
The translation request the translation is uploaded to (TRANSLATION_REQUEST with its id).
- Option 1
- Option 2
Show child attributes
Show child attributes
Target locale to write into (locale code, e.g. de, fr).
1"de"
Storage ID of the raw file (already uploaded to Phrase file storage) to push to Knak.
1"e48eda63928c4155bez9fdbsaadc15f3"
Knak-specific settings (currently none); may be omitted.
Response
Successful operation. If X-ResponseType is set to 'ID' or no value is sent in the header, the file is saved and can be retrieved by sending a GET request to this endpoint. If X-ResponseType is set to 'OBJECT', the file is returned as a stream.
Was this page helpful?