curl --request POST \
--url https://eu.phrase.com/connectors/braze_multilang/v1/async/convert-to-xliff \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Webhook: <x-webhook>' \
--data '
{
"rawFiles": [
{
"storageId": "e48eda63928c4155bez9fdbsaadc15f3",
"info": {
"name": "content-block-123.json"
}
}
],
"sourceLocale": "en-US",
"targetLocale": "de-DE",
"remoteSourceLocale": "en",
"remoteTargetLocale": "de"
}
'import requests
url = "https://eu.phrase.com/connectors/braze_multilang/v1/async/convert-to-xliff"
payload = {
"rawFiles": [
{
"storageId": "e48eda63928c4155bez9fdbsaadc15f3",
"info": { "name": "content-block-123.json" }
}
],
"sourceLocale": "en-US",
"targetLocale": "de-DE",
"remoteSourceLocale": "en",
"remoteTargetLocale": "de"
}
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({
rawFiles: [
{
storageId: 'e48eda63928c4155bez9fdbsaadc15f3',
info: {name: 'content-block-123.json'}
}
],
sourceLocale: 'en-US',
targetLocale: 'de-DE',
remoteSourceLocale: 'en',
remoteTargetLocale: 'de'
})
};
fetch('https://eu.phrase.com/connectors/braze_multilang/v1/async/convert-to-xliff', 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/braze_multilang/v1/async/convert-to-xliff",
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([
'rawFiles' => [
[
'storageId' => 'e48eda63928c4155bez9fdbsaadc15f3',
'info' => [
'name' => 'content-block-123.json'
]
]
],
'sourceLocale' => 'en-US',
'targetLocale' => 'de-DE',
'remoteSourceLocale' => 'en',
'remoteTargetLocale' => 'de'
]),
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/braze_multilang/v1/async/convert-to-xliff"
payload := strings.NewReader("{\n \"rawFiles\": [\n {\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\",\n \"info\": {\n \"name\": \"content-block-123.json\"\n }\n }\n ],\n \"sourceLocale\": \"en-US\",\n \"targetLocale\": \"de-DE\",\n \"remoteSourceLocale\": \"en\",\n \"remoteTargetLocale\": \"de\"\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/braze_multilang/v1/async/convert-to-xliff")
.header("X-Webhook", "<x-webhook>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rawFiles\": [\n {\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\",\n \"info\": {\n \"name\": \"content-block-123.json\"\n }\n }\n ],\n \"sourceLocale\": \"en-US\",\n \"targetLocale\": \"de-DE\",\n \"remoteSourceLocale\": \"en\",\n \"remoteTargetLocale\": \"de\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.phrase.com/connectors/braze_multilang/v1/async/convert-to-xliff")
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 \"rawFiles\": [\n {\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\",\n \"info\": {\n \"name\": \"content-block-123.json\"\n }\n }\n ],\n \"sourceLocale\": \"en-US\",\n \"targetLocale\": \"de-DE\",\n \"remoteSourceLocale\": \"en\",\n \"remoteTargetLocale\": \"de\"\n}"
response = http.request(request)
puts response.read_body{
"requestId": "e48eda63-928c-4155-bez9-fdbsaadc15f3",
"webHookUrl": "https://example.tld/my-webhook"
}{
"problemDetail": {
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"properties": {}
}
}Convert stored raw Braze content to XLIFF asynchronously
Convert raw Braze content already in Phrase file storage to XLIFF 2.0, without
re-downloading from Braze. Each entry in rawFiles references a stored file
(storageId) plus the metadata the connector needs to segment correctly.
Use this when you have a snapshot from download-raw-file and want to defer the
conversion step (e.g. to apply custom pre-processing first).
Async variant. Returns { requestId, webHookUrl } immediately; the XLIFF (or its storageId) is POSTed to X-Webhook.
curl --request POST \
--url https://eu.phrase.com/connectors/braze_multilang/v1/async/convert-to-xliff \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Webhook: <x-webhook>' \
--data '
{
"rawFiles": [
{
"storageId": "e48eda63928c4155bez9fdbsaadc15f3",
"info": {
"name": "content-block-123.json"
}
}
],
"sourceLocale": "en-US",
"targetLocale": "de-DE",
"remoteSourceLocale": "en",
"remoteTargetLocale": "de"
}
'import requests
url = "https://eu.phrase.com/connectors/braze_multilang/v1/async/convert-to-xliff"
payload = {
"rawFiles": [
{
"storageId": "e48eda63928c4155bez9fdbsaadc15f3",
"info": { "name": "content-block-123.json" }
}
],
"sourceLocale": "en-US",
"targetLocale": "de-DE",
"remoteSourceLocale": "en",
"remoteTargetLocale": "de"
}
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({
rawFiles: [
{
storageId: 'e48eda63928c4155bez9fdbsaadc15f3',
info: {name: 'content-block-123.json'}
}
],
sourceLocale: 'en-US',
targetLocale: 'de-DE',
remoteSourceLocale: 'en',
remoteTargetLocale: 'de'
})
};
fetch('https://eu.phrase.com/connectors/braze_multilang/v1/async/convert-to-xliff', 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/braze_multilang/v1/async/convert-to-xliff",
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([
'rawFiles' => [
[
'storageId' => 'e48eda63928c4155bez9fdbsaadc15f3',
'info' => [
'name' => 'content-block-123.json'
]
]
],
'sourceLocale' => 'en-US',
'targetLocale' => 'de-DE',
'remoteSourceLocale' => 'en',
'remoteTargetLocale' => 'de'
]),
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/braze_multilang/v1/async/convert-to-xliff"
payload := strings.NewReader("{\n \"rawFiles\": [\n {\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\",\n \"info\": {\n \"name\": \"content-block-123.json\"\n }\n }\n ],\n \"sourceLocale\": \"en-US\",\n \"targetLocale\": \"de-DE\",\n \"remoteSourceLocale\": \"en\",\n \"remoteTargetLocale\": \"de\"\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/braze_multilang/v1/async/convert-to-xliff")
.header("X-Webhook", "<x-webhook>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rawFiles\": [\n {\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\",\n \"info\": {\n \"name\": \"content-block-123.json\"\n }\n }\n ],\n \"sourceLocale\": \"en-US\",\n \"targetLocale\": \"de-DE\",\n \"remoteSourceLocale\": \"en\",\n \"remoteTargetLocale\": \"de\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.phrase.com/connectors/braze_multilang/v1/async/convert-to-xliff")
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 \"rawFiles\": [\n {\n \"storageId\": \"e48eda63928c4155bez9fdbsaadc15f3\",\n \"info\": {\n \"name\": \"content-block-123.json\"\n }\n }\n ],\n \"sourceLocale\": \"en-US\",\n \"targetLocale\": \"de-DE\",\n \"remoteSourceLocale\": \"en\",\n \"remoteTargetLocale\": \"de\"\n}"
response = http.request(request)
puts response.read_body{
"requestId": "e48eda63-928c-4155-bez9-fdbsaadc15f3",
"webHookUrl": "https://example.tld/my-webhook"
}{
"problemDetail": {
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"properties": {}
}
}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.
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 converting already-stored raw Braze multilingual content into XLIFF 2.0 without re-downloading from Braze.
List of stored raw files (each carrying its storageId and original metadata) to convert.
Show child attributes
Show child attributes
Source locale used inside the resulting XLIFF (Phrase-side locale code).
"en-US"
Target locale the XLIFF will be translated into (Phrase-side locale code).
"de-DE"
Source locale code as understood by Braze. Mapped to/from sourceLocale to bridge any difference between Phrase locale codes and Braze locale codes.
"en"
Target locale code as understood by Braze. Mapped to/from targetLocale.
"de"
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?