is_expense: true, status: PAID, and a payment for the full amount.
When to use expenses
Use an expense for purchases that are paid immediately. The Create expense endpoint accepts the purchase details, thepaid_at timestamp, and the payment details in one request.
Use a standard bill when you need to track accounts payable over time. For example, use a bill for a vendor invoice received today that will be paid later. Standard bills have is_expense: false and support payment terms, partial payments, and an outstanding balance.
API behavior
| Task | Expense | Standard bill |
|---|---|---|
| Create | POST /v1/businesses/{businessId}/expenses | POST /v1/businesses/{businessId}/bills |
| Initial status | PAID | RECEIVED, PARTIALLY_PAID, or PAID |
| Payment | Included at creation | Optional at creation; can be added later |
| List | List expenses with is_expense=true | List bills with is_expense=false |
Common workflow
- Create expense with purchase, vendor, line item, and payment details. The request is idempotent via
external_id. - List expenses with
is_expense=truewhen you need a collection of expenses. - Fetch expense with the expense
idwhen you need one record. - Match the expense payment to a bank transaction when Layer suggests a match.
Payment defaults
If bothpayment.method and payment.payment_clearing_account_identifier are omitted when creating an expense:
payment.methoddefaults toACH.payment.payment_clearing_account_identifierdefaults to the Contributions account until the expense is matched to a bank transaction.
payment.method and omit payment.payment_clearing_account_identifier, no default clearing account is applied.