---
title: "Create a bill"
method: POST
path: "/bills"
tags: ["Bills"]
---

# Create a bill

`POST /bills`

Create a new bill. Optionally set status to "needs_approval" to skip draft and submit directly for approval.

## Request body

- CreateBillInput — Bill creation request
  - `amount` number
  - `description` string
  - `due_date` string
  - `issue_date` string
  - `line_items` BillLineItemInput[]
    - `description` string
    - `expense_account_id` string — ExpenseAccountID is an optional GL/expense account ID used to categorize this line item. Omit to leave it uncategorized.
    - `name` string
    - `quantity` number
    - `tax` number
    - `total` number
    - `unit_price` number
    - `unit_type` string
  - `number` string
  - `status` string
  - `vendor_id` string

## Response `201`

Created

- BillReply — Bill details
  - `amount` number
  - `created_at` string
  - `description` string
  - `due_date` string
  - `id` string
  - `issue_date` string
  - `last_status` BillStatusReply — Bill status history entry
    - `created_at` string
    - `reason` string
    - `status` 'draft' | 'needs_approval' | 'processing' | 'paid' | 'deleted' | 'failed' — Bill status enum
    - `user_id` string
  - `line_items` LineItemReply[]
    - `description` string
    - `expense_account_id` string
    - `name` string
    - `quantity` number
    - `sequence` integer
    - `tax` number
    - `total` number
    - `unit_price` number
    - `unit_type` string
  - `number` string
  - `pay_date` string
  - `source` 'manual' | 'quickbooks' | 'ocr' — Bill source enum
  - `status` 'draft' | 'needs_approval' | 'processing' | 'paid' | 'deleted' | 'failed' — Bill status enum
  - `updated_at` string
  - `vendor_id` string
  - `vendor_payments` VendorPaymentReply[]
    - `attempt_number` integer
    - `estimated_arrival_date` string
    - `failure_reason` string
    - `hold_until` string
    - `id` string
    - `payment_method_id` string
    - `payment_speed` 'standard' | 'next_day' | 'same_day' | 'instant' — Payment speed enum
    - `sent_at` string
    - `status` 'hold' | 'waiting_pay_date' | 'ready' | 'processing' | 'succeeded' | 'failed' — Vendor payment status enum

## Other responses

- `400` — Bad Request
- `422` — Unprocessable Entity

---

[API](https://skmtc.net/alternativepayments/apis/alternative-payments.md) · [All operations](https://skmtc.net/alternativepayments/apis/alternative-payments/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/alternativepayments/alternative-payments/revisions/730efda86cd1/schema)
