curl --request POST \
--url https://api.upwell.com/api/rest/vendor-invoices/search \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"sourceSystem": "<string>",
"sourceSystemId": "<string>"
}
'import requests
url = "https://api.upwell.com/api/rest/vendor-invoices/search"
payload = {
"sourceSystem": "<string>",
"sourceSystemId": "<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({sourceSystem: '<string>', sourceSystemId: '<string>'})
};
fetch('https://api.upwell.com/api/rest/vendor-invoices/search', 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/vendor-invoices/search",
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([
'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/vendor-invoices/search"
payload := strings.NewReader("{\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<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/vendor-invoices/search")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upwell.com/api/rest/vendor-invoices/search")
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 \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"vendorInvoices": [
{
"accountNumber": "<string>",
"amountReceived": 123,
"annotations": [
{
"confidence": 123,
"fieldLabel": "<string>",
"id": "<string>",
"markType": "MARK",
"pageNumber": 123,
"reasoning": "<string>",
"stampTitle": "<string>",
"text": "<string>",
"type": "DIGITAL",
"valueDate": "2023-12-25",
"valueNumber": "<string>"
}
],
"billTo": {
"address": {
"city": "<string>",
"country": "AD",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"streetLine3": "<string>",
"zipOrPostalCode": "<string>"
},
"email": "<string>",
"name": "<string>",
"phone": "<string>"
},
"createdAt": "2026-10-16T14:30:00",
"currency": "AED",
"customerNumber": "<string>",
"department": "<string>",
"documentId": "<string>",
"dueDate": "2023-12-25",
"fobPoint": "<string>",
"freightAmount": 123,
"id": "<string>",
"incoterms": "<string>",
"invoiceDate": "2023-12-25",
"invoiceNumber": "<string>",
"legibilityScore": 1.5,
"matchedPurchaseOrder": {
"id": "<string>",
"poDate": "2023-12-25",
"poNumber": "<string>",
"totalAmount": 123
},
"matchedPurchaseOrderId": "<string>",
"notes": "<string>",
"orderDate": "2023-12-25",
"paymentTermsDescription": "<string>",
"paymentTermsDiscountDays": 123,
"paymentTermsDiscountPercent": 1.5,
"paymentTermsNetDays": 123,
"poNumber": "<string>",
"projectNumber": "<string>",
"referenceNumbers": [
{
"name": "PO",
"value": "PO-123"
}
],
"remitTo": {
"address": {
"city": "<string>",
"country": "AD",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"streetLine3": "<string>",
"zipOrPostalCode": "<string>"
},
"email": "<string>",
"name": "<string>",
"phone": "<string>"
},
"requisitionerName": "<string>",
"salesOrderNumber": "<string>",
"shipTo": {
"address": {
"city": "<string>",
"country": "AD",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"streetLine3": "<string>",
"zipOrPostalCode": "<string>"
},
"email": "<string>",
"name": "<string>",
"phone": "<string>"
},
"shipVia": "<string>",
"specialInstructions": "<string>",
"subtotalAmount": 123,
"surchargeAmount": 123,
"taxAmount": 123,
"taxExempt": true,
"totalAmount": 123,
"vendor": {
"address": {
"city": "<string>",
"country": "AD",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"streetLine3": "<string>",
"zipOrPostalCode": "<string>"
},
"email": "<string>",
"name": "<string>",
"phone": "<string>"
},
"vendorInvoiceLineItems": [
{
"chargeType": "<string>",
"customerPartNumber": "<string>",
"description": "<string>",
"discountPercent": 1.5,
"extendedAmount": 123,
"id": "<string>",
"lineNumber": 123,
"notes": "<string>",
"poLineNumber": "<string>",
"poNumber": "<string>",
"quantity": 1.5,
"quantityBackordered": 1.5,
"quantityOrdered": 1.5,
"quantityShipped": 1.5,
"taxAmount": 123,
"taxable": true,
"unitOfMeasure": "<string>",
"unitPriceAmount": 123,
"unitPriceBasis": 1.5,
"vendorPartNumber": "<string>",
"weight": 1.5,
"weightUnit": "<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"
}Search Vendor Invoices By Source System
Find the vendor invoice(s) created from a document you uploaded, keyed by the sourceSystem + sourceSystemId you supplied at presign time. Records from a multi-document upload are included: the search matches the uploaded documentās ids even when the vendor invoice was parsed from an automatically split piece of it. Body: { "sourceSystem": "...", "sourceSystemId": "..." }.
curl --request POST \
--url https://api.upwell.com/api/rest/vendor-invoices/search \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"sourceSystem": "<string>",
"sourceSystemId": "<string>"
}
'import requests
url = "https://api.upwell.com/api/rest/vendor-invoices/search"
payload = {
"sourceSystem": "<string>",
"sourceSystemId": "<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({sourceSystem: '<string>', sourceSystemId: '<string>'})
};
fetch('https://api.upwell.com/api/rest/vendor-invoices/search', 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/vendor-invoices/search",
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([
'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/vendor-invoices/search"
payload := strings.NewReader("{\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<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/vendor-invoices/search")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upwell.com/api/rest/vendor-invoices/search")
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 \"sourceSystem\": \"<string>\",\n \"sourceSystemId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"vendorInvoices": [
{
"accountNumber": "<string>",
"amountReceived": 123,
"annotations": [
{
"confidence": 123,
"fieldLabel": "<string>",
"id": "<string>",
"markType": "MARK",
"pageNumber": 123,
"reasoning": "<string>",
"stampTitle": "<string>",
"text": "<string>",
"type": "DIGITAL",
"valueDate": "2023-12-25",
"valueNumber": "<string>"
}
],
"billTo": {
"address": {
"city": "<string>",
"country": "AD",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"streetLine3": "<string>",
"zipOrPostalCode": "<string>"
},
"email": "<string>",
"name": "<string>",
"phone": "<string>"
},
"createdAt": "2026-10-16T14:30:00",
"currency": "AED",
"customerNumber": "<string>",
"department": "<string>",
"documentId": "<string>",
"dueDate": "2023-12-25",
"fobPoint": "<string>",
"freightAmount": 123,
"id": "<string>",
"incoterms": "<string>",
"invoiceDate": "2023-12-25",
"invoiceNumber": "<string>",
"legibilityScore": 1.5,
"matchedPurchaseOrder": {
"id": "<string>",
"poDate": "2023-12-25",
"poNumber": "<string>",
"totalAmount": 123
},
"matchedPurchaseOrderId": "<string>",
"notes": "<string>",
"orderDate": "2023-12-25",
"paymentTermsDescription": "<string>",
"paymentTermsDiscountDays": 123,
"paymentTermsDiscountPercent": 1.5,
"paymentTermsNetDays": 123,
"poNumber": "<string>",
"projectNumber": "<string>",
"referenceNumbers": [
{
"name": "PO",
"value": "PO-123"
}
],
"remitTo": {
"address": {
"city": "<string>",
"country": "AD",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"streetLine3": "<string>",
"zipOrPostalCode": "<string>"
},
"email": "<string>",
"name": "<string>",
"phone": "<string>"
},
"requisitionerName": "<string>",
"salesOrderNumber": "<string>",
"shipTo": {
"address": {
"city": "<string>",
"country": "AD",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"streetLine3": "<string>",
"zipOrPostalCode": "<string>"
},
"email": "<string>",
"name": "<string>",
"phone": "<string>"
},
"shipVia": "<string>",
"specialInstructions": "<string>",
"subtotalAmount": 123,
"surchargeAmount": 123,
"taxAmount": 123,
"taxExempt": true,
"totalAmount": 123,
"vendor": {
"address": {
"city": "<string>",
"country": "AD",
"stateOrProvince": "<string>",
"streetLine1": "<string>",
"streetLine2": "<string>",
"streetLine3": "<string>",
"zipOrPostalCode": "<string>"
},
"email": "<string>",
"name": "<string>",
"phone": "<string>"
},
"vendorInvoiceLineItems": [
{
"chargeType": "<string>",
"customerPartNumber": "<string>",
"description": "<string>",
"discountPercent": 1.5,
"extendedAmount": 123,
"id": "<string>",
"lineNumber": 123,
"notes": "<string>",
"poLineNumber": "<string>",
"poNumber": "<string>",
"quantity": 1.5,
"quantityBackordered": 1.5,
"quantityOrdered": 1.5,
"quantityShipped": 1.5,
"taxAmount": 123,
"taxable": true,
"unitOfMeasure": "<string>",
"unitPriceAmount": 123,
"unitPriceBasis": 1.5,
"vendorPartNumber": "<string>",
"weight": 1.5,
"weightUnit": "<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.
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
Response
Responses for POST /api/rest/vendor-invoices/search
Vendor invoices. See the schema for its JSON type and allowed values.
Show child attributes
Show child attributes

