Create a file upload for the return portal
curl --request POST \
--url https://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form additionalProperties='@example-file'import requests
url = "https://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads"
files = { "additionalProperties": ("example-file", open("example-file", "rb")) }
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('additionalProperties', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads', 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://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additionalProperties\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additionalProperties\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additionalProperties\"; 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://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additionalProperties\"; 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[
{
"filename": "1dca5757ed2a47dd89ddc99ce308e6b4.webp",
"name": "product-12345-abc",
"path": "https://cdn.example.com/link/1dca5757ed2a47dd89ddc99ce308e6b4.webp"
},
{
"filename": "ed013a200348477bb2c79fc27bb33dc8.webp",
"name": "product-67891-cde",
"path": "https://cdn.example.com/link/ed013a200348477bb2c79fc27bb33dc8.webp"
}
]{
"error": {
"code": "invalid_postal_code",
"request": "api/v2/brand/devtest/return-portal/outgoing",
"message": "The postal code you provided is invalid."
}
}Return portal API
Create a file upload for the return portal
Upload an image for use in the return portal.
POST
/
brand
/
{brand_domain}
/
return-portal
/
uploads
Create a file upload for the return portal
curl --request POST \
--url https://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form additionalProperties='@example-file'import requests
url = "https://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads"
files = { "additionalProperties": ("example-file", open("example-file", "rb")) }
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('additionalProperties', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads', 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://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additionalProperties\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additionalProperties\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additionalProperties\"; 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://panel.sendcloud.sc/api/v2/brand/{brand_domain}/return-portal/uploads")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additionalProperties\"; 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[
{
"filename": "1dca5757ed2a47dd89ddc99ce308e6b4.webp",
"name": "product-12345-abc",
"path": "https://cdn.example.com/link/1dca5757ed2a47dd89ddc99ce308e6b4.webp"
},
{
"filename": "ed013a200348477bb2c79fc27bb33dc8.webp",
"name": "product-67891-cde",
"path": "https://cdn.example.com/link/ed013a200348477bb2c79fc27bb33dc8.webp"
}
]{
"error": {
"code": "invalid_postal_code",
"request": "api/v2/brand/devtest/return-portal/outgoing",
"message": "The postal code you provided is invalid."
}
}API v2 is entering maintenance mode. New users should start with API v3 to access our latest features and improved performance. Already using v2? Don’t worry, your current integration remains fully functional. Read more about maintenance mode, or check out the migration guide for API v3.
- Files are only kept for 48 hours after upload, unless used somewhere else (for example, when creating a return).
- The URLs returned in this response will only be available for 48 hours.
- The endpoint allows a maximum of 10 files, so groups larger than that should be batched.
- Files should be smaller than 10MB.
This API is currently in in beta, and may change in the near future.
Authorizations
The JWT generated when starting the Return Portal process
Path Parameters
The brand domain, found in the brand or return portal settings
Body
multipart/form-data
The files to be uploaded, with a maximum file size of 10MB.
⌘I