curl --request PUT \
--url https://api.upwell.com/api/rest/invoices \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {},
"sourceSystem": "<string>",
"sourceSystemId": "<string>"
}
'import requests
url = "https://api.upwell.com/api/rest/invoices"
payload = {
"input": {},
"sourceSystem": "<string>",
"sourceSystemId": "<string>"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({input: {}, sourceSystem: '<string>', sourceSystemId: '<string>'})
};
fetch('https://api.upwell.com/api/rest/invoices', 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/invoices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'input' => [
],
'sourceSystem' => '<string>',
'sourceSystemId' => '<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/invoices"
payload := strings.NewReader("{\n \"input\": {},\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.upwell.com/api/rest/invoices")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {},\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upwell.com/api/rest/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": {},\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"updateInvoice": {
"affectedRows": 123,
"returning": [
{
"balance": 450000,
"companyDivision": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"customerId": "<string>",
"customerReferenceNumber": "<string>",
"dueDate": "2023-12-25",
"exceptionsLastEvaluatedAt": "2023-11-07T05:31:56Z",
"id": "<string>",
"invoiceLineItems": [
{
"createdAt": "2023-11-07T05:31:56Z",
"id": "<string>",
"item": "<string>",
"remoteId": "<string>",
"sourceSystem": "<string>",
"sourceSystemId": "<string>",
"totalAmount": 123,
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"invoiceShipments": [
{
"shipment": {
"consigneeAddress": {
"city": "<string>",
"companyName": "<string>",
"country": "AD",
"id": "<string>",
"name": "<string>",
"phoneNumber": "<string>",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"zipOrPostalCode": "<string>"
},
"createdAt": "2023-11-07T05:31:56Z",
"currency": "AED",
"customerId": "<string>",
"deliveredAt": "2026-10-16T14:30:00",
"id": "<string>",
"invoiceId": "<string>",
"loadDescription": "<string>",
"pickupAddress": {
"city": "<string>",
"companyName": "<string>",
"country": "AD",
"id": "<string>",
"name": "<string>",
"phoneNumber": "<string>",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"zipOrPostalCode": "<string>"
},
"pickupAt": "2026-10-16T14:30:00",
"shipmentId": "<string>",
"status": "<string>",
"stops": [
{
"address": {
"city": "<string>",
"companyName": "<string>",
"country": "AD",
"id": "<string>",
"name": "<string>",
"phoneNumber": "<string>",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"zipOrPostalCode": "<string>"
},
"id": "<string>",
"metadata": "{}",
"pieceCount": 123,
"sequenceNumber": 123,
"stopType": "<string>",
"weightAmount": 42.5,
"weightUnit": "<string>"
}
],
"trailerNumber": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"volume": 42.5,
"volumeUnit": "<string>",
"weight": 42.5,
"weightUnit": "<string>"
}
}
],
"issueDate": "2023-12-25",
"metadata": {
"externalBatchId": "BATCH-123"
},
"missingDocuments": "<string>",
"number": "<string>",
"portalSlug": "<string>",
"referenceNumbers": {
"billOfLadingNumber": "BOL-123",
"customerPoNumber": "PO-456",
"otherReferenceNumbers": [
{
"name": "Booking",
"value": "BK-789"
}
]
},
"sourceSystem": "<string>",
"sourceSystemId": "<string>",
"status": "APPROVED",
"totalAmount": 450000,
"totalTaxAmount": 450000,
"updatedAt": "2023-11-07T05:31:56Z"
}
]
}
}{
"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"
}Update One Invoice By Source System Id
Update an invoice by source system id
curl --request PUT \
--url https://api.upwell.com/api/rest/invoices \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {},
"sourceSystem": "<string>",
"sourceSystemId": "<string>"
}
'import requests
url = "https://api.upwell.com/api/rest/invoices"
payload = {
"input": {},
"sourceSystem": "<string>",
"sourceSystemId": "<string>"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({input: {}, sourceSystem: '<string>', sourceSystemId: '<string>'})
};
fetch('https://api.upwell.com/api/rest/invoices', 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/invoices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'input' => [
],
'sourceSystem' => '<string>',
'sourceSystemId' => '<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/invoices"
payload := strings.NewReader("{\n \"input\": {},\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.upwell.com/api/rest/invoices")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {},\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upwell.com/api/rest/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": {},\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"updateInvoice": {
"affectedRows": 123,
"returning": [
{
"balance": 450000,
"companyDivision": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"customerId": "<string>",
"customerReferenceNumber": "<string>",
"dueDate": "2023-12-25",
"exceptionsLastEvaluatedAt": "2023-11-07T05:31:56Z",
"id": "<string>",
"invoiceLineItems": [
{
"createdAt": "2023-11-07T05:31:56Z",
"id": "<string>",
"item": "<string>",
"remoteId": "<string>",
"sourceSystem": "<string>",
"sourceSystemId": "<string>",
"totalAmount": 123,
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"invoiceShipments": [
{
"shipment": {
"consigneeAddress": {
"city": "<string>",
"companyName": "<string>",
"country": "AD",
"id": "<string>",
"name": "<string>",
"phoneNumber": "<string>",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"zipOrPostalCode": "<string>"
},
"createdAt": "2023-11-07T05:31:56Z",
"currency": "AED",
"customerId": "<string>",
"deliveredAt": "2026-10-16T14:30:00",
"id": "<string>",
"invoiceId": "<string>",
"loadDescription": "<string>",
"pickupAddress": {
"city": "<string>",
"companyName": "<string>",
"country": "AD",
"id": "<string>",
"name": "<string>",
"phoneNumber": "<string>",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"zipOrPostalCode": "<string>"
},
"pickupAt": "2026-10-16T14:30:00",
"shipmentId": "<string>",
"status": "<string>",
"stops": [
{
"address": {
"city": "<string>",
"companyName": "<string>",
"country": "AD",
"id": "<string>",
"name": "<string>",
"phoneNumber": "<string>",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"zipOrPostalCode": "<string>"
},
"id": "<string>",
"metadata": "{}",
"pieceCount": 123,
"sequenceNumber": 123,
"stopType": "<string>",
"weightAmount": 42.5,
"weightUnit": "<string>"
}
],
"trailerNumber": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"volume": 42.5,
"volumeUnit": "<string>",
"weight": 42.5,
"weightUnit": "<string>"
}
}
],
"issueDate": "2023-12-25",
"metadata": {
"externalBatchId": "BATCH-123"
},
"missingDocuments": "<string>",
"number": "<string>",
"portalSlug": "<string>",
"referenceNumbers": {
"billOfLadingNumber": "BOL-123",
"customerPoNumber": "PO-456",
"otherReferenceNumbers": [
{
"name": "Booking",
"value": "BK-789"
}
]
},
"sourceSystem": "<string>",
"sourceSystemId": "<string>",
"status": "APPROVED",
"totalAmount": 450000,
"totalTaxAmount": 450000,
"updatedAt": "2023-11-07T05:31:56Z"
}
]
}
}{
"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"
}sourceSystem + sourceSystemId inside input to update without the Upwell id. See Idempotency & retries.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.
Query Parameters
"sourceSystem" is required (enter it either in parameters or request body)
"sourceSystemId" 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
input type for updating data in table "invoices"
Show child attributes
Show child attributes
Name of the originating system. Together with sourceSystemId, identifies the external record within your organization.
Record identifier in the originating system. Preserve leading zeros; use it with sourceSystem for lookup/update.
Response
Responses for PUT /api/rest/invoices
response of any mutation on the table "invoices"
Show child attributes
Show child attributes

