API / Examples
Create an invoice payable
End-to-end: create a vendor invoice with line items and a document, then submit it for approval.
This example walks through creating a vendor invoice programmatically — creating the invoice, adding line items, uploading the document and submitting it for approval.
const API_KEY = process.env.LIGHT_API_KEY;
const BASE_URL = 'https://api.light.inc';
const headers = {
'Authorization': `Basic ${API_KEY}`,
'Content-Type': 'application/json',
};
async function createInvoicePayable() {
// 1. Create the invoice
const invoiceRes = await fetch(`${BASE_URL}/v1/invoice-payables`, {
method: 'POST',
headers,
body: JSON.stringify({
vendorId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
invoiceNumber: 'INV-2026-042',
issueDate: '2026-01-15',
dueDate: '2026-02-15',
currency: 'GBP',
}),
});
const invoice = await invoiceRes.json();
console.log('Created invoice:', invoice.id);
// 2. Add line items
const lines = [
{ description: 'Software license', quantity: 1, unitPrice: 120000 },
{ description: 'Support contract', quantity: 1, unitPrice: 30000 },
];
for (const line of lines) {
await fetch(`${BASE_URL}/v1/invoice-payables/${invoice.id}/line-items`, {
method: 'POST',
headers,
body: JSON.stringify(line),
});
}
console.log('Added', lines.length, 'line items');
// 3. Upload the invoice document
const uploadUrlRes = await fetch(
`${BASE_URL}/v1/invoice-payables/${invoice.id}/document/upload-url`,
{
method: 'POST',
headers,
body: JSON.stringify({
fileName: 'invoice-042.pdf',
contentType: 'application/pdf',
}),
}
);
const { uploadUrl } = await uploadUrlRes.json();
// Upload the file to the presigned URL
const fs = require('fs');
const fileBuffer = fs.readFileSync('./invoice-042.pdf');
await fetch(uploadUrl, {
method: 'PUT',
headers: { 'Content-Type': 'application/pdf' },
body: fileBuffer,
});
console.log('Uploaded document');
// 4. Submit for approval
await fetch(`${BASE_URL}/v1/invoice-payables/${invoice.id}/submit-for-approval`, {
method: 'POST',
headers,
});
console.log('Submitted for approval');
return invoice;
}
createInvoicePayable().catch(console.error);
import requests
import os
API_KEY = os.environ['LIGHT_API_KEY']
BASE_URL = 'https://api.light.inc'
headers = {
'Authorization': f'Basic {API_KEY}',
'Content-Type': 'application/json',
}
# 1. Create the invoice
invoice = requests.post(f'{BASE_URL}/v1/invoice-payables', headers=headers, json={
'vendorId': '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'invoiceNumber': 'INV-2026-042',
'issueDate': '2026-01-15',
'dueDate': '2026-02-15',
'currency': 'GBP',
}).json()
invoice_id = invoice['id']
print(f'Created invoice: {invoice_id}')
# 2. Add line items
lines = [
{'description': 'Software license', 'quantity': 1, 'unitPrice': 120000},
{'description': 'Support contract', 'quantity': 1, 'unitPrice': 30000},
]
for line in lines:
requests.post(
f'{BASE_URL}/v1/invoice-payables/{invoice_id}/line-items',
headers=headers,
json=line,
)
print(f'Added {len(lines)} line items')
# 3. Upload the invoice document
upload_url_data = requests.post(
f'{BASE_URL}/v1/invoice-payables/{invoice_id}/document/upload-url',
headers=headers,
json={'fileName': 'invoice-042.pdf', 'contentType': 'application/pdf'},
).json()
with open('./invoice-042.pdf', 'rb') as f:
requests.put(
upload_url_data['uploadUrl'],
headers={'Content-Type': 'application/pdf'},
data=f.read(),
)
print('Uploaded document')
# 4. Submit for approval
requests.post(f'{BASE_URL}/v1/invoice-payables/{invoice_id}/submit-for-approval', headers=headers)
print('Submitted for approval')