Create expense
curl --request POST \
--url https://sandbox.layerfi.com/v1/businesses/{businessId}/expenses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"external_id": "exp-001",
"paid_at": "2025-01-01T01:46:59.309329Z",
"vendor_external_id": "Office Depot",
"reference_number": "EXP-001",
"memo": "Office supplies",
"line_items": [
{
"account_identifier": {
"type": "StableName",
"stable_name": "OTHER_OFFICE_EXPENSES"
},
"description": "Paper",
"product_name": "Copy paper",
"unit_price": 1001,
"quantity": 1.5
}
],
"payment": {
"method": "CHECK"
}
}
'import requests
url = "https://sandbox.layerfi.com/v1/businesses/{businessId}/expenses"
payload = {
"external_id": "exp-001",
"paid_at": "2025-01-01T01:46:59.309329Z",
"vendor_external_id": "Office Depot",
"reference_number": "EXP-001",
"memo": "Office supplies",
"line_items": [
{
"account_identifier": {
"type": "StableName",
"stable_name": "OTHER_OFFICE_EXPENSES"
},
"description": "Paper",
"product_name": "Copy paper",
"unit_price": 1001,
"quantity": 1.5
}
],
"payment": { "method": "CHECK" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
external_id: 'exp-001',
paid_at: '2025-01-01T01:46:59.309329Z',
vendor_external_id: 'Office Depot',
reference_number: 'EXP-001',
memo: 'Office supplies',
line_items: [
{
account_identifier: {type: 'StableName', stable_name: 'OTHER_OFFICE_EXPENSES'},
description: 'Paper',
product_name: 'Copy paper',
unit_price: 1001,
quantity: 1.5
}
],
payment: {method: 'CHECK'}
})
};
fetch('https://sandbox.layerfi.com/v1/businesses/{businessId}/expenses', 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://sandbox.layerfi.com/v1/businesses/{businessId}/expenses",
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([
'external_id' => 'exp-001',
'paid_at' => '2025-01-01T01:46:59.309329Z',
'vendor_external_id' => 'Office Depot',
'reference_number' => 'EXP-001',
'memo' => 'Office supplies',
'line_items' => [
[
'account_identifier' => [
'type' => 'StableName',
'stable_name' => 'OTHER_OFFICE_EXPENSES'
],
'description' => 'Paper',
'product_name' => 'Copy paper',
'unit_price' => 1001,
'quantity' => 1.5
]
],
'payment' => [
'method' => 'CHECK'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://sandbox.layerfi.com/v1/businesses/{businessId}/expenses"
payload := strings.NewReader("{\n \"external_id\": \"exp-001\",\n \"paid_at\": \"2025-01-01T01:46:59.309329Z\",\n \"vendor_external_id\": \"Office Depot\",\n \"reference_number\": \"EXP-001\",\n \"memo\": \"Office supplies\",\n \"line_items\": [\n {\n \"account_identifier\": {\n \"type\": \"StableName\",\n \"stable_name\": \"OTHER_OFFICE_EXPENSES\"\n },\n \"description\": \"Paper\",\n \"product_name\": \"Copy paper\",\n \"unit_price\": 1001,\n \"quantity\": 1.5\n }\n ],\n \"payment\": {\n \"method\": \"CHECK\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://sandbox.layerfi.com/v1/businesses/{businessId}/expenses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"external_id\": \"exp-001\",\n \"paid_at\": \"2025-01-01T01:46:59.309329Z\",\n \"vendor_external_id\": \"Office Depot\",\n \"reference_number\": \"EXP-001\",\n \"memo\": \"Office supplies\",\n \"line_items\": [\n {\n \"account_identifier\": {\n \"type\": \"StableName\",\n \"stable_name\": \"OTHER_OFFICE_EXPENSES\"\n },\n \"description\": \"Paper\",\n \"product_name\": \"Copy paper\",\n \"unit_price\": 1001,\n \"quantity\": 1.5\n }\n ],\n \"payment\": {\n \"method\": \"CHECK\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.layerfi.com/v1/businesses/{businessId}/expenses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"external_id\": \"exp-001\",\n \"paid_at\": \"2025-01-01T01:46:59.309329Z\",\n \"vendor_external_id\": \"Office Depot\",\n \"reference_number\": \"EXP-001\",\n \"memo\": \"Office supplies\",\n \"line_items\": [\n {\n \"account_identifier\": {\n \"type\": \"StableName\",\n \"stable_name\": \"OTHER_OFFICE_EXPENSES\"\n },\n \"description\": \"Paper\",\n \"product_name\": \"Copy paper\",\n \"unit_price\": 1001,\n \"quantity\": 1.5\n }\n ],\n \"payment\": {\n \"method\": \"CHECK\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"type": "Bill",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"business_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"status": "RECEIVED",
"terms": "NET_30",
"received_at": "2023-11-07T05:31:56Z",
"due_at": "2023-11-07T05:31:56Z",
"paid_at": "2023-11-07T05:31:56Z",
"voided_at": "2023-11-07T05:31:56Z",
"memo": "<string>",
"line_items": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_identifier": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"ledger_account": {
"type": "Single_Chart_Account",
"id": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"name": "Current Assets",
"account_number": "4000",
"stable_name": {
"type": "StableName",
"stable_name": "CURRENT_ASSETS"
},
"normality": "DEBIT",
"account_type": {
"value": "ASSET",
"display_name": "Asset"
},
"account_subtype": {
"value": "BANK_ACCOUNTS",
"display_name": "Current Assets"
}
},
"prepayment_account": {
"type": "Single_Chart_Account",
"id": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"name": "Current Assets",
"account_number": "4000",
"stable_name": {
"type": "StableName",
"stable_name": "CURRENT_ASSETS"
},
"normality": "DEBIT",
"account_type": {
"value": "ASSET",
"display_name": "Asset"
},
"account_subtype": {
"value": "BANK_ACCOUNTS",
"display_name": "Current Assets"
}
},
"description": "<string>",
"product_name": "<string>",
"unit_price": 123,
"quantity": 123,
"subtotal": 123,
"discount_amount": 123,
"sales_taxes": [
{
"tax_account": {
"name": "CALIFORNIA_VAT",
"type": "Tax_Name"
},
"tax_ledger_account": {
"id": "c4007474-f604-4d57-9690-b7f40f7a1cee",
"name": "Sales tax: CALIFORNIA",
"stable_name": "SALES_TAXES:CALIFORNIA",
"normality": "CREDIT",
"account_type": {
"value": "EXPENSE",
"display_name": "Expenses"
},
"account_subtype": {
"value": "SALES_TAXES",
"display_name": "Sales Taxes"
}
},
"amount": 123
}
],
"sales_taxes_total": 123,
"total_amount": 123,
"transaction_tags": [
{
"key": "department",
"value": "sales",
"dimension_display_name": "Department",
"value_display_name": "Sales Department"
}
],
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
}
],
"additional_sales_taxes": [
{
"tax_account": {
"name": "CALIFORNIA_VAT",
"type": "Tax_Name"
},
"tax_ledger_account": {
"id": "c4007474-f604-4d57-9690-b7f40f7a1cee",
"name": "Sales tax: CALIFORNIA",
"stable_name": "SALES_TAXES:CALIFORNIA",
"normality": "CREDIT",
"account_type": {
"value": "EXPENSE",
"display_name": "Expenses"
},
"account_subtype": {
"value": "SALES_TAXES",
"display_name": "Sales Taxes"
}
},
"amount": 123
}
],
"additional_sales_taxes_total": 123,
"additional_discount": 123,
"subtotal": 123,
"total_amount": 123,
"outstanding_balance": 123,
"payment_allocations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"payment": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"vendor": {
"type": "VendorData",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"individual_name": "<string>",
"company_name": "<string>",
"email": "<string>",
"mobile_phone": "<string>",
"office_phone": "<string>",
"address_string": "<string>",
"memo": "<string>",
"status": "ACTIVE",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
]
},
"at": "2023-11-07T05:31:56Z",
"method": "ACH",
"amount": 123,
"processor": "<string>",
"payment_clearing_account": {
"type": "Single_Chart_Account",
"id": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"name": "Current Assets",
"account_number": "4000",
"stable_name": {
"type": "StableName",
"stable_name": "CURRENT_ASSETS"
},
"normality": "DEBIT",
"account_type": {
"value": "ASSET",
"display_name": "Asset"
},
"account_subtype": {
"value": "BANK_ACCOUNTS",
"display_name": "Current Assets"
}
},
"imported_at": "2023-11-07T05:31:56Z",
"allocations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
}
],
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
},
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
}
],
"vendor_credits": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_credit_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"vendor_credit": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor": {
"type": "VendorData",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"individual_name": "<string>",
"company_name": "<string>",
"email": "<string>",
"mobile_phone": "<string>",
"office_phone": "<string>",
"address_string": "<string>",
"memo": "<string>",
"status": "ACTIVE",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
]
},
"received_at": "2023-11-07T05:31:56Z",
"line_items": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"ledger_account": {
"type": "Single_Chart_Account",
"id": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"name": "Current Assets",
"account_number": "4000",
"stable_name": {
"type": "StableName",
"stable_name": "CURRENT_ASSETS"
},
"normality": "DEBIT",
"account_type": {
"value": "ASSET",
"display_name": "Asset"
},
"account_subtype": {
"value": "BANK_ACCOUNTS",
"display_name": "Current Assets"
}
},
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
]
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"type": "Vendor_Credit",
"external_id": "<string>",
"allocations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_credit_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"deleted_at": "2023-11-07T05:31:56Z",
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
},
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"imported_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"vendor": {
"type": "VendorData",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"individual_name": "<string>",
"company_name": "<string>",
"email": "<string>",
"mobile_phone": "<string>",
"office_phone": "<string>",
"address_string": "<string>",
"memo": "<string>",
"status": "ACTIVE",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
]
},
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"is_expense": true,
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
}
}{
"data": {
"id": "c845d116-cd28-41a1-b4ea-84a2768b6e15",
"business_id": "188eb399-f171-4849-861c-5c02d91f800b",
"external_id": "exp-001",
"status": "PAID",
"terms": "DUE_ON_RECEIPT",
"received_at": "2025-01-01T01:46:59.309329Z",
"due_at": "2025-01-01T01:46:59.309329Z",
"paid_at": "2025-01-01T01:46:59.309329Z",
"voided_at": null,
"reference_number": "EXP-001",
"is_expense": true,
"vendor": {
"id": "a4c38874-8c01-4986-b8d0-4f159a52dd39",
"external_id": "Office Depot",
"company_name": "Office Depot",
"status": "ACTIVE"
},
"line_items": [],
"subtotal": 1502,
"additional_sales_taxes": [],
"additional_sales_taxes_total": 0,
"total_amount": 1502,
"outstanding_balance": 0,
"memo": "Office supplies",
"payment_allocations": [],
"vendor_credits": [],
"imported_at": "2025-01-01T01:46:59.309329Z",
"updated_at": "2025-01-01T01:46:59.309329Z",
"transaction_tags": [],
"metadata": {}
}
}Expenses
Create expense
Creates an expense for a business. An expense is a type of bill for a purchase paid at the time of the transaction. Use this endpoint to provide purchase, vendor, line item, and payment details in one request. The response is a bill with is_expense: true and status: PAID.
POST
/
v1
/
businesses
/
{businessId}
/
expenses
Create expense
curl --request POST \
--url https://sandbox.layerfi.com/v1/businesses/{businessId}/expenses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"external_id": "exp-001",
"paid_at": "2025-01-01T01:46:59.309329Z",
"vendor_external_id": "Office Depot",
"reference_number": "EXP-001",
"memo": "Office supplies",
"line_items": [
{
"account_identifier": {
"type": "StableName",
"stable_name": "OTHER_OFFICE_EXPENSES"
},
"description": "Paper",
"product_name": "Copy paper",
"unit_price": 1001,
"quantity": 1.5
}
],
"payment": {
"method": "CHECK"
}
}
'import requests
url = "https://sandbox.layerfi.com/v1/businesses/{businessId}/expenses"
payload = {
"external_id": "exp-001",
"paid_at": "2025-01-01T01:46:59.309329Z",
"vendor_external_id": "Office Depot",
"reference_number": "EXP-001",
"memo": "Office supplies",
"line_items": [
{
"account_identifier": {
"type": "StableName",
"stable_name": "OTHER_OFFICE_EXPENSES"
},
"description": "Paper",
"product_name": "Copy paper",
"unit_price": 1001,
"quantity": 1.5
}
],
"payment": { "method": "CHECK" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
external_id: 'exp-001',
paid_at: '2025-01-01T01:46:59.309329Z',
vendor_external_id: 'Office Depot',
reference_number: 'EXP-001',
memo: 'Office supplies',
line_items: [
{
account_identifier: {type: 'StableName', stable_name: 'OTHER_OFFICE_EXPENSES'},
description: 'Paper',
product_name: 'Copy paper',
unit_price: 1001,
quantity: 1.5
}
],
payment: {method: 'CHECK'}
})
};
fetch('https://sandbox.layerfi.com/v1/businesses/{businessId}/expenses', 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://sandbox.layerfi.com/v1/businesses/{businessId}/expenses",
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([
'external_id' => 'exp-001',
'paid_at' => '2025-01-01T01:46:59.309329Z',
'vendor_external_id' => 'Office Depot',
'reference_number' => 'EXP-001',
'memo' => 'Office supplies',
'line_items' => [
[
'account_identifier' => [
'type' => 'StableName',
'stable_name' => 'OTHER_OFFICE_EXPENSES'
],
'description' => 'Paper',
'product_name' => 'Copy paper',
'unit_price' => 1001,
'quantity' => 1.5
]
],
'payment' => [
'method' => 'CHECK'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://sandbox.layerfi.com/v1/businesses/{businessId}/expenses"
payload := strings.NewReader("{\n \"external_id\": \"exp-001\",\n \"paid_at\": \"2025-01-01T01:46:59.309329Z\",\n \"vendor_external_id\": \"Office Depot\",\n \"reference_number\": \"EXP-001\",\n \"memo\": \"Office supplies\",\n \"line_items\": [\n {\n \"account_identifier\": {\n \"type\": \"StableName\",\n \"stable_name\": \"OTHER_OFFICE_EXPENSES\"\n },\n \"description\": \"Paper\",\n \"product_name\": \"Copy paper\",\n \"unit_price\": 1001,\n \"quantity\": 1.5\n }\n ],\n \"payment\": {\n \"method\": \"CHECK\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://sandbox.layerfi.com/v1/businesses/{businessId}/expenses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"external_id\": \"exp-001\",\n \"paid_at\": \"2025-01-01T01:46:59.309329Z\",\n \"vendor_external_id\": \"Office Depot\",\n \"reference_number\": \"EXP-001\",\n \"memo\": \"Office supplies\",\n \"line_items\": [\n {\n \"account_identifier\": {\n \"type\": \"StableName\",\n \"stable_name\": \"OTHER_OFFICE_EXPENSES\"\n },\n \"description\": \"Paper\",\n \"product_name\": \"Copy paper\",\n \"unit_price\": 1001,\n \"quantity\": 1.5\n }\n ],\n \"payment\": {\n \"method\": \"CHECK\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.layerfi.com/v1/businesses/{businessId}/expenses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"external_id\": \"exp-001\",\n \"paid_at\": \"2025-01-01T01:46:59.309329Z\",\n \"vendor_external_id\": \"Office Depot\",\n \"reference_number\": \"EXP-001\",\n \"memo\": \"Office supplies\",\n \"line_items\": [\n {\n \"account_identifier\": {\n \"type\": \"StableName\",\n \"stable_name\": \"OTHER_OFFICE_EXPENSES\"\n },\n \"description\": \"Paper\",\n \"product_name\": \"Copy paper\",\n \"unit_price\": 1001,\n \"quantity\": 1.5\n }\n ],\n \"payment\": {\n \"method\": \"CHECK\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"type": "Bill",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"business_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"status": "RECEIVED",
"terms": "NET_30",
"received_at": "2023-11-07T05:31:56Z",
"due_at": "2023-11-07T05:31:56Z",
"paid_at": "2023-11-07T05:31:56Z",
"voided_at": "2023-11-07T05:31:56Z",
"memo": "<string>",
"line_items": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_identifier": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"ledger_account": {
"type": "Single_Chart_Account",
"id": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"name": "Current Assets",
"account_number": "4000",
"stable_name": {
"type": "StableName",
"stable_name": "CURRENT_ASSETS"
},
"normality": "DEBIT",
"account_type": {
"value": "ASSET",
"display_name": "Asset"
},
"account_subtype": {
"value": "BANK_ACCOUNTS",
"display_name": "Current Assets"
}
},
"prepayment_account": {
"type": "Single_Chart_Account",
"id": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"name": "Current Assets",
"account_number": "4000",
"stable_name": {
"type": "StableName",
"stable_name": "CURRENT_ASSETS"
},
"normality": "DEBIT",
"account_type": {
"value": "ASSET",
"display_name": "Asset"
},
"account_subtype": {
"value": "BANK_ACCOUNTS",
"display_name": "Current Assets"
}
},
"description": "<string>",
"product_name": "<string>",
"unit_price": 123,
"quantity": 123,
"subtotal": 123,
"discount_amount": 123,
"sales_taxes": [
{
"tax_account": {
"name": "CALIFORNIA_VAT",
"type": "Tax_Name"
},
"tax_ledger_account": {
"id": "c4007474-f604-4d57-9690-b7f40f7a1cee",
"name": "Sales tax: CALIFORNIA",
"stable_name": "SALES_TAXES:CALIFORNIA",
"normality": "CREDIT",
"account_type": {
"value": "EXPENSE",
"display_name": "Expenses"
},
"account_subtype": {
"value": "SALES_TAXES",
"display_name": "Sales Taxes"
}
},
"amount": 123
}
],
"sales_taxes_total": 123,
"total_amount": 123,
"transaction_tags": [
{
"key": "department",
"value": "sales",
"dimension_display_name": "Department",
"value_display_name": "Sales Department"
}
],
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
}
],
"additional_sales_taxes": [
{
"tax_account": {
"name": "CALIFORNIA_VAT",
"type": "Tax_Name"
},
"tax_ledger_account": {
"id": "c4007474-f604-4d57-9690-b7f40f7a1cee",
"name": "Sales tax: CALIFORNIA",
"stable_name": "SALES_TAXES:CALIFORNIA",
"normality": "CREDIT",
"account_type": {
"value": "EXPENSE",
"display_name": "Expenses"
},
"account_subtype": {
"value": "SALES_TAXES",
"display_name": "Sales Taxes"
}
},
"amount": 123
}
],
"additional_sales_taxes_total": 123,
"additional_discount": 123,
"subtotal": 123,
"total_amount": 123,
"outstanding_balance": 123,
"payment_allocations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"payment": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"vendor": {
"type": "VendorData",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"individual_name": "<string>",
"company_name": "<string>",
"email": "<string>",
"mobile_phone": "<string>",
"office_phone": "<string>",
"address_string": "<string>",
"memo": "<string>",
"status": "ACTIVE",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
]
},
"at": "2023-11-07T05:31:56Z",
"method": "ACH",
"amount": 123,
"processor": "<string>",
"payment_clearing_account": {
"type": "Single_Chart_Account",
"id": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"name": "Current Assets",
"account_number": "4000",
"stable_name": {
"type": "StableName",
"stable_name": "CURRENT_ASSETS"
},
"normality": "DEBIT",
"account_type": {
"value": "ASSET",
"display_name": "Asset"
},
"account_subtype": {
"value": "BANK_ACCOUNTS",
"display_name": "Current Assets"
}
},
"imported_at": "2023-11-07T05:31:56Z",
"allocations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
}
],
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
},
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
}
],
"vendor_credits": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_credit_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"vendor_credit": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor": {
"type": "VendorData",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"individual_name": "<string>",
"company_name": "<string>",
"email": "<string>",
"mobile_phone": "<string>",
"office_phone": "<string>",
"address_string": "<string>",
"memo": "<string>",
"status": "ACTIVE",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
]
},
"received_at": "2023-11-07T05:31:56Z",
"line_items": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"ledger_account": {
"type": "Single_Chart_Account",
"id": {
"type": "AccountId",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"name": "Current Assets",
"account_number": "4000",
"stable_name": {
"type": "StableName",
"stable_name": "CURRENT_ASSETS"
},
"normality": "DEBIT",
"account_type": {
"value": "ASSET",
"display_name": "Asset"
},
"account_subtype": {
"value": "BANK_ACCOUNTS",
"display_name": "Current Assets"
}
},
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
]
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"type": "Vendor_Credit",
"external_id": "<string>",
"allocations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_credit_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"deleted_at": "2023-11-07T05:31:56Z",
"memo": "<string>",
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
},
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"imported_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"vendor": {
"type": "VendorData",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"individual_name": "<string>",
"company_name": "<string>",
"email": "<string>",
"mobile_phone": "<string>",
"office_phone": "<string>",
"address_string": "<string>",
"memo": "<string>",
"status": "ACTIVE",
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
]
},
"transaction_tags": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "ExampleTagKey",
"value": "ExampleTagValue",
"dimension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"definition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dimension_display_name": "<string>",
"value_display_name": "<string>",
"archived_at": "2023-11-07T05:31:56Z"
}
],
"is_expense": true,
"metadata": {
"custom_field": "value",
"any valid json": "below 1kb",
"nested": {
"meaning of life": 42,
"array": []
}
},
"reference_number": "<string>"
}
}{
"data": {
"id": "c845d116-cd28-41a1-b4ea-84a2768b6e15",
"business_id": "188eb399-f171-4849-861c-5c02d91f800b",
"external_id": "exp-001",
"status": "PAID",
"terms": "DUE_ON_RECEIPT",
"received_at": "2025-01-01T01:46:59.309329Z",
"due_at": "2025-01-01T01:46:59.309329Z",
"paid_at": "2025-01-01T01:46:59.309329Z",
"voided_at": null,
"reference_number": "EXP-001",
"is_expense": true,
"vendor": {
"id": "a4c38874-8c01-4986-b8d0-4f159a52dd39",
"external_id": "Office Depot",
"company_name": "Office Depot",
"status": "ACTIVE"
},
"line_items": [],
"subtotal": 1502,
"additional_sales_taxes": [],
"additional_sales_taxes_total": 0,
"total_amount": 1502,
"outstanding_balance": 0,
"memo": "Office supplies",
"payment_allocations": [],
"vendor_credits": [],
"imported_at": "2025-01-01T01:46:59.309329Z",
"updated_at": "2025-01-01T01:46:59.309329Z",
"transaction_tags": [],
"metadata": {}
}
}Create an expense when a purchase and payment happen at the same time. An expense is a type of bill with
is_expense: true and status: PAID.
Use this endpoint to submit the vendor, line items, purchase date, and payment details in one request. The request is idempotent via external_id; if an expense with the same external_id already exists, Layer returns the existing expense with a 200 response.
Required fields to plan for:
paid_at: when the purchase was paidline_items: what was purchasedpayment: how it was paidvendor_idorvendor_external_id: who was paid
Authorizations
Body
application/json