Upload translation files
Upload one or more JSON translation files for a specific workflow. Files name must match the locale, e.g. en_US.json. Supports both “files” and “files[]” field names for backwards compatibility.
import { Novu } from "@novu/api";
const novu = new Novu({
secretKey: "YOUR_SECRET_KEY_HERE",
});
async function run() {
const result = await novu.translations.upload({
resourceId: "welcome-email",
resourceType: "workflow",
files: [],
});
console.log(result);
}
run();using Novu;
using Novu.Models.Components;
using Novu.Models.Requests;
using System.Collections.Generic;
var sdk = new NovuSDK(secretKey: "YOUR_SECRET_KEY_HERE");
var res = await sdk.Translations.UploadAsync(requestBody: new TranslationControllerUploadTranslationFilesRequestBody() {
ResourceId = "welcome-email",
ResourceType = Novu.Models.Requests.ResourceType.Workflow,
Files = new List<Files>() {},
});
// handle responsedeclare(strict_types=1);
require 'vendor/autoload.php';
use novu;
use novu\Models\Operations;
$sdk = novu\Novu::builder()
->setSecurity(
'YOUR_SECRET_KEY_HERE'
)
->build();
$requestBody = new Operations\TranslationControllerUploadTranslationFilesRequestBody(
resourceId: 'welcome-email',
resourceType: Operations\ResourceType::Workflow,
files: [],
);
$response = $sdk->translations->upload(
requestBody: $requestBody
);
if ($response->uploadTranslationsResponseDto !== null) {
// handle response
}import novu_py
from novu_py import Novu
with Novu(
secret_key="YOUR_SECRET_KEY_HERE",
) as novu:
res = novu.translations.upload(request_body={
"resource_id": "welcome-email",
"resource_type": novu_py.TranslationControllerUploadTranslationFilesResourceType.WORKFLOW,
"files": [],
})
# Handle response
print(res)package main
import(
"context"
"github.com/novuhq/novu-go/v3"
"github.com/novuhq/novu-go/v3/models/operations"
"log"
)
func main() {
ctx := context.Background()
s := v3.New(
v3.WithSecurity("YOUR_SECRET_KEY_HERE"),
)
res, err := s.Translations.Upload(ctx, operations.TranslationControllerUploadTranslationFilesRequestBody{
ResourceID: "welcome-email",
ResourceType: operations.ResourceTypeWorkflow,
Files: []operations.Files{},
}, nil)
if err != nil {
log.Fatal(err)
}
if res.UploadTranslationsResponseDto != nil {
// handle response
}
}curl --request POST \
--url https://api.novu.co/v2/translations/upload \
--header 'Authorization: <api-key>' \
--header 'Content-Type: multipart/form-data' \
--form resourceId=welcome-email \
--form 'files=<string>' \
--form files.items='@example-file'const form = new FormData();
form.append('resourceId', 'welcome-email');
form.append('files', '<string>');
form.append('files.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
options.body = form;
fetch('https://api.novu.co/v2/translations/upload', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.novu.co/v2/translations/upload")
.header("Authorization", "<api-key>")
.header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"resourceId\"\r\n\r\nwelcome-email\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novu.co/v2/translations/upload")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"resourceId\"\r\n\r\nwelcome-email\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"totalFiles": 3,
"successfulUploads": 2,
"failedUploads": 1,
"errors": [
"Invalid JSON in file: es-ES.json"
]
}Authorizations
API key authentication. Allowed headers-- "Authorization: ApiKey <novu_secret_key>".
Headers
A header for idempotency purposes
Body
The resource ID to associate localizations with. Accepts identifier or slug format
"welcome-email"
The resource type to associate localizations with
workflow, layout One or more JSON translation files. Filenames must match locale format (e.g., en_US.json, fr_FR.json). Field name can be "files" or "files[]".
Response
Upload results
Total number of files processed
3
Number of files successfully uploaded
2
Number of files that failed to upload
1
List of error messages for failed uploads
["Invalid JSON in file: es-ES.json"]
Was this page helpful?
import { Novu } from "@novu/api";
const novu = new Novu({
secretKey: "YOUR_SECRET_KEY_HERE",
});
async function run() {
const result = await novu.translations.upload({
resourceId: "welcome-email",
resourceType: "workflow",
files: [],
});
console.log(result);
}
run();using Novu;
using Novu.Models.Components;
using Novu.Models.Requests;
using System.Collections.Generic;
var sdk = new NovuSDK(secretKey: "YOUR_SECRET_KEY_HERE");
var res = await sdk.Translations.UploadAsync(requestBody: new TranslationControllerUploadTranslationFilesRequestBody() {
ResourceId = "welcome-email",
ResourceType = Novu.Models.Requests.ResourceType.Workflow,
Files = new List<Files>() {},
});
// handle responsedeclare(strict_types=1);
require 'vendor/autoload.php';
use novu;
use novu\Models\Operations;
$sdk = novu\Novu::builder()
->setSecurity(
'YOUR_SECRET_KEY_HERE'
)
->build();
$requestBody = new Operations\TranslationControllerUploadTranslationFilesRequestBody(
resourceId: 'welcome-email',
resourceType: Operations\ResourceType::Workflow,
files: [],
);
$response = $sdk->translations->upload(
requestBody: $requestBody
);
if ($response->uploadTranslationsResponseDto !== null) {
// handle response
}import novu_py
from novu_py import Novu
with Novu(
secret_key="YOUR_SECRET_KEY_HERE",
) as novu:
res = novu.translations.upload(request_body={
"resource_id": "welcome-email",
"resource_type": novu_py.TranslationControllerUploadTranslationFilesResourceType.WORKFLOW,
"files": [],
})
# Handle response
print(res)package main
import(
"context"
"github.com/novuhq/novu-go/v3"
"github.com/novuhq/novu-go/v3/models/operations"
"log"
)
func main() {
ctx := context.Background()
s := v3.New(
v3.WithSecurity("YOUR_SECRET_KEY_HERE"),
)
res, err := s.Translations.Upload(ctx, operations.TranslationControllerUploadTranslationFilesRequestBody{
ResourceID: "welcome-email",
ResourceType: operations.ResourceTypeWorkflow,
Files: []operations.Files{},
}, nil)
if err != nil {
log.Fatal(err)
}
if res.UploadTranslationsResponseDto != nil {
// handle response
}
}curl --request POST \
--url https://api.novu.co/v2/translations/upload \
--header 'Authorization: <api-key>' \
--header 'Content-Type: multipart/form-data' \
--form resourceId=welcome-email \
--form 'files=<string>' \
--form files.items='@example-file'const form = new FormData();
form.append('resourceId', 'welcome-email');
form.append('files', '<string>');
form.append('files.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
options.body = form;
fetch('https://api.novu.co/v2/translations/upload', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.novu.co/v2/translations/upload")
.header("Authorization", "<api-key>")
.header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"resourceId\"\r\n\r\nwelcome-email\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novu.co/v2/translations/upload")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"resourceId\"\r\n\r\nwelcome-email\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"totalFiles": 3,
"successfulUploads": 2,
"failedUploads": 1,
"errors": [
"Invalid JSON in file: es-ES.json"
]
}