curl --request POST \
--url https://api.upwell.com/api/rest/shipments/{shipmentId}/documents \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {
"base64": "<string>",
"filename": "<string>",
"mimeType": "<string>",
"sourceSystem": "<string>",
"sourceSystemId": "<string>",
"type": "<string>",
"visibleToCarrier": true,
"visibleToCustomer": true
},
"shipmentId": "<string>"
}
'import requests
url = "https://api.upwell.com/api/rest/shipments/{shipmentId}/documents"
payload = {
"input": {
"base64": "<string>",
"filename": "<string>",
"mimeType": "<string>",
"sourceSystem": "<string>",
"sourceSystemId": "<string>",
"type": "<string>",
"visibleToCarrier": True,
"visibleToCustomer": True
},
"shipmentId": "<string>"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {
base64: '<string>',
filename: '<string>',
mimeType: '<string>',
sourceSystem: '<string>',
sourceSystemId: '<string>',
type: '<string>',
visibleToCarrier: true,
visibleToCustomer: true
},
shipmentId: '<string>'
})
};
fetch('https://api.upwell.com/api/rest/shipments/{shipmentId}/documents', 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://api.upwell.com/api/rest/shipments/{shipmentId}/documents",
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([
'input' => [
'base64' => '<string>',
'filename' => '<string>',
'mimeType' => '<string>',
'sourceSystem' => '<string>',
'sourceSystemId' => '<string>',
'type' => '<string>',
'visibleToCarrier' => true,
'visibleToCustomer' => true
],
'shipmentId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$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://api.upwell.com/api/rest/shipments/{shipmentId}/documents"
payload := strings.NewReader("{\n \"input\": {\n \"base64\": \"<string>\",\n \"filename\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\",\n \"type\": \"<string>\",\n \"visibleToCarrier\": true,\n \"visibleToCustomer\": true\n },\n \"shipmentId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://api.upwell.com/api/rest/shipments/{shipmentId}/documents")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"base64\": \"<string>\",\n \"filename\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\",\n \"type\": \"<string>\",\n \"visibleToCarrier\": true,\n \"visibleToCustomer\": true\n },\n \"shipmentId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upwell.com/api/rest/shipments/{shipmentId}/documents")
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"] = 'application/json'
request.body = "{\n \"input\": {\n \"base64\": \"<string>\",\n \"filename\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\",\n \"type\": \"<string>\",\n \"visibleToCarrier\": true,\n \"visibleToCustomer\": true\n },\n \"shipmentId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"createShipmentDocument": {
"documentId": "<string>",
"id": "<string>"
}
}{
"error": "Not-NULL violation. null value in column \"shipment_id\" of relation \"shipments\" violates not-null constraint",
"code": "constraint-violation"
}{
"error": "Authentication hook unauthorized this request",
"path": "$",
"code": "access-denied"
}Create Shipment Document
Create a new shipment document
curl --request POST \
--url https://api.upwell.com/api/rest/shipments/{shipmentId}/documents \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {
"base64": "<string>",
"filename": "<string>",
"mimeType": "<string>",
"sourceSystem": "<string>",
"sourceSystemId": "<string>",
"type": "<string>",
"visibleToCarrier": true,
"visibleToCustomer": true
},
"shipmentId": "<string>"
}
'import requests
url = "https://api.upwell.com/api/rest/shipments/{shipmentId}/documents"
payload = {
"input": {
"base64": "<string>",
"filename": "<string>",
"mimeType": "<string>",
"sourceSystem": "<string>",
"sourceSystemId": "<string>",
"type": "<string>",
"visibleToCarrier": True,
"visibleToCustomer": True
},
"shipmentId": "<string>"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {
base64: '<string>',
filename: '<string>',
mimeType: '<string>',
sourceSystem: '<string>',
sourceSystemId: '<string>',
type: '<string>',
visibleToCarrier: true,
visibleToCustomer: true
},
shipmentId: '<string>'
})
};
fetch('https://api.upwell.com/api/rest/shipments/{shipmentId}/documents', 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://api.upwell.com/api/rest/shipments/{shipmentId}/documents",
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([
'input' => [
'base64' => '<string>',
'filename' => '<string>',
'mimeType' => '<string>',
'sourceSystem' => '<string>',
'sourceSystemId' => '<string>',
'type' => '<string>',
'visibleToCarrier' => true,
'visibleToCustomer' => true
],
'shipmentId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$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://api.upwell.com/api/rest/shipments/{shipmentId}/documents"
payload := strings.NewReader("{\n \"input\": {\n \"base64\": \"<string>\",\n \"filename\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\",\n \"type\": \"<string>\",\n \"visibleToCarrier\": true,\n \"visibleToCustomer\": true\n },\n \"shipmentId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://api.upwell.com/api/rest/shipments/{shipmentId}/documents")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"base64\": \"<string>\",\n \"filename\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\",\n \"type\": \"<string>\",\n \"visibleToCarrier\": true,\n \"visibleToCustomer\": true\n },\n \"shipmentId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upwell.com/api/rest/shipments/{shipmentId}/documents")
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"] = 'application/json'
request.body = "{\n \"input\": {\n \"base64\": \"<string>\",\n \"filename\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\",\n \"type\": \"<string>\",\n \"visibleToCarrier\": true,\n \"visibleToCustomer\": true\n },\n \"shipmentId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"createShipmentDocument": {
"documentId": "<string>",
"id": "<string>"
}
}{
"error": "Not-NULL violation. null value in column \"shipment_id\" of relation \"shipments\" violates not-null constraint",
"code": "constraint-violation"
}{
"error": "Authentication hook unauthorized this request",
"path": "$",
"code": "access-denied"
}Authorizations
Your API key, sent in the Authorization header: Authorization: YOUR_API_KEY. A Bearer prefix is also accepted (Authorization: Bearer YOUR_API_KEY). Keys are created in the Upwell dashboard (Account → API keys) and are scoped to one organization.
Path Parameters
"shipmentId" is required (enter it either in parameters or request body)
Body
Query parameters can also be provided in the request body as a JSON object
Object containing the fields to create or update. Only the fields in this endpoint schema are accepted.
Show child attributes
Show child attributes
Shipment identifier. On a shipment record this is the source load/shipment number; on invoiceShipments it is the Upwell shipment id (shi_…).
Response
Responses for POST /api/rest/shipments/{shipmentId}/documents
Create shipment document. See the schema for its JSON type and allowed values.
Show child attributes
Show child attributes

