curl --request POST \
--url https://eu.phrase.com/connectors/knak/v1/async/preview \
--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"
}
}
'import requests
url = "https://eu.phrase.com/connectors/knak/v1/async/preview"
payload = {
"credentials": {
"connectionUid": "7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11",
"organizationUid": "3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10"
},
"path": {
"pathType": "TRANSLATION_REQUEST",
"id": "tr_1234"
}
}
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'}
})
};
fetch('https://eu.phrase.com/connectors/knak/v1/async/preview', 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/preview",
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'
]
]),
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/preview"
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}")
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/preview")
.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}")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.phrase.com/connectors/knak/v1/async/preview")
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}"
response = http.request(request)
puts response.read_body{
"requestId": "e48eda63-928c-4155-bez9-fdbsaadc15f3",
"webHookUrl": "https://example.tld/my-webhook"
}""Generate preview package asynchronously
Generate the live preview package of a Knak translation request. The connector renders the
HTML of the request’s base asset and stores it as a zip package (index.html in the root,
referenced assets under assets/) in Phrase file storage. path must be a
TRANSLATION_REQUEST path (use list-files to discover ids).
The preview shows the asset as it currently is in its source language.
Choosing sync vs async
/sync/previewblocks until the connector finishes. Subject to gateway timeouts (~60 s)./async/previewreturns immediately with arequestIdand posts the result to the URL inX-Webhookwhen ready.
Response shape (sync only) is controlled by X-ResponseType:
ID(default) — JSON{ "storageId": "..." }. The caller downloads the zip package from Phrase file storage.OBJECT— the zip package itself asapplication/octet-stream.
No preview available. When the translation request has no base asset or the asset has
no HTML, the call still succeeds (HTTP 200) with the JSON body
{ "available": false, "message": "..." }, whatever X-ResponseType is. For the async
variant the same body is POSTed to the webhook.
Async variant. This endpoint returns immediately with { requestId, webHookUrl }. The preview 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/preview \
--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"
}
}
'import requests
url = "https://eu.phrase.com/connectors/knak/v1/async/preview"
payload = {
"credentials": {
"connectionUid": "7d1b0a52-4c0e-4f4e-9d52-1f2f5b0b8a11",
"organizationUid": "3f9a6d0e-8c1b-4a57-b0a1-6c2d9e4f7a10"
},
"path": {
"pathType": "TRANSLATION_REQUEST",
"id": "tr_1234"
}
}
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'}
})
};
fetch('https://eu.phrase.com/connectors/knak/v1/async/preview', 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/preview",
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'
]
]),
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/preview"
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}")
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/preview")
.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}")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.phrase.com/connectors/knak/v1/async/preview")
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}"
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.
Specify if the response should contain the processed object itself in an application/octet-stream body, or a application/json body with an ID that can be then used to retrieve the object using a /load-content endpoint. Note that for larger files (> 1 MB), it is advised to use the ID option which is also default.
ID, OBJECT 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 generating the live preview package of a Knak translation request. Authenticates via the credentials connection reference.
Connection holding the Knak API key.
Show child attributes
Show child attributes
The translation request to preview (TRANSLATION_REQUEST with its id). Any other path type is rejected by the connector.
- Option 1
- Option 2
Show child attributes
Show child attributes
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?