Bills

Bills represent accounts payable — money your business owes to vendors for goods or services received.

Bill Status Flow

Status Description
draft Editable, not yet approved
forecasted Approved, awaiting receipt
received Goods/services received, AP journal entry created
paid Fully paid via linked bank transaction
canceled Cancelled

Create a Bill

bash
curl -X POST "https://api.ondayzero.com/api/v1/bills" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "vendor_id": "VENDOR_UUID",
    "description": "March office supplies",
    "due_on": "2026-04-30",
    "type": "one-time",
    "expected_amount": 45000,
    "expected_paid_on_date": "2026-05-01"
  }'

expected_amount is in cents. 45000 = $450.00.

You can also use the AI extraction endpoint to create bills from uploaded documents:

bash
curl -X POST "https://api.ondayzero.com/api/v1/bills/ai-create" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "single_bill_s3_keys": ["uploaded-file-key.pdf"]
  }'

Approve a Bill

Draft bills must be approved before they can be received or paid:

bash
curl -X PATCH "https://api.ondayzero.com/api/v1/bills/{bill_id}/approval" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

Mark as Received

When goods or services are received, mark the bill and link it to an expense account:

bash
curl -X PATCH "https://api.ondayzero.com/api/v1/bills/{bill_id}/receipt" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "received_date": "2026-03-20",
    "ledger_id": "EXPENSE_LEDGER_UUID",
    "amount": 45000
  }'

This creates the accounts payable journal entry.

Record a Payment

bash
curl -X POST "https://api.ondayzero.com/api/v1/bills/{bill_id}/payments" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "BANK_TRANSACTION_UUID",
    "amount": 45000
  }'

When the payment covers the full balance, the bill status automatically transitions to paid.

List Bills

bash
curl "https://api.ondayzero.com/api/v1/bills?status=received&sort_by=expected_paid_on_date" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

Filter Parameters

Parameter Type Description
status string draft, forecasted, received, paid, canceled
vendor_search string Filter by vendor name (partial match)
vendor_id UUID Filter by vendor
search string Text search on bill fields
payment_method string Filter by payment method

Payment Suggestions

DayZero can automatically match bank transactions to open bills:

bash
curl -X POST "https://api.ondayzero.com/api/v1/bills/payment-suggestions/trigger" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{"min_confidence": 0.8}'

Review suggestions and accept or reject them individually, or bulk-approve above a confidence threshold.

Cancel a Bill

bash
curl -X PATCH "https://api.ondayzero.com/api/v1/bills/{bill_id}/cancellation" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"