---
title: "Create a bill · Bills · COUNT Partner API"
description: "Creates a new vendor bill (draft by default, or approved for migrations). POST /partners/bills"
canonical: "https://developers.getcount.com/reference/bills/create-bill"
source: "https://developers.getcount.com/reference/bills/create-bill"
---
[Bills](https://developers.getcount.com/reference/bills) / Create a bill

# Create a bill

POST `/partners/bills`

Creates a new vendor bill (draft by default, or approved for migrations).

Required: exactly one of vendorUuid OR inline vendor object, date, dueDate (bills only), and lineItems with categoryAccountUuid, quantity, and price. Optional approvalStatus (draft | approved) and billType. Inline vendors are echoed on the response as _partnerInlineCreated.

HMAC signature + Bearer access token

[Try this request](https://developers.getcount.com/tools/try-it?method=POST&path=%2Fpartners%2Fbills&body=%7B%0A++%22vendorUuid%22%3A+%22f1a2b3c4-d5e6-7890-abcd-ef1234567890%22%2C%0A++%22date%22%3A+%222026-01-15%22%2C%0A++%22dueDate%22%3A+%222026-02-15%22%2C%0A++%22lineItems%22%3A+%5B%0A++++%7B%0A++++++%22categoryAccountUuid%22%3A+%22c3d4e5f6-a7b8-9012-cdef-123456789012%22%2C%0A++++++%22description%22%3A+%22Office+supplies%22%2C%0A++++++%22quantity%22%3A+1%2C%0A++++++%22price%22%3A+250%0A++++%7D%0A++%5D%2C%0A++%22notes%22%3A+%22Q1+office+supplies%22%0A%7D)

[Transactions API](https://developers.getcount.com/reference/transactions) [Vendors API](https://developers.getcount.com/reference/vendors) [Chart of Accounts API](https://developers.getcount.com/reference/chart-of-accounts)

#### Request body

`vendorUuid` uuid

Existing vendor UUID from the Vendors API. Mutually exclusive with vendor.

`vendor` object

Inline vendor to create when vendorUuid is omitted.

`name` string

Vendor display name (or use vendor field alias).

`email` string

Optional vendor email.

`date` date required

Bill date (ISO, YYYY-MM-DD).

`dueDate` date

Due date (ISO, YYYY-MM-DD). Send it on every bill — a bill without one is filed as a draft. Omit it on a vendor memo; the server sets its due date.

`billType` enum

Defaults to bill. `vendor_memo` creates a vendor credit instead; it is numbered automatically and its billNumber and dueDate are ignored.

One of: `bill`, `vendor_memo`

`lineItems` array required

Expense lines on the bill.

`categoryAccountUuid` uuid required

Expense account UUID from Chart of Accounts.

`description` string

Line description.

`quantity` number required

Quantity.

`price` number required

Unit price.

`projectUuid` uuid

Optional project UUID on the line.

`customerUuid` uuid

Optional customer UUID for billable expenses.

`billNumber` string

Custom bill number. Auto-assigned when omitted.

`purchaseOrderNumber` string

Purchase order reference.

`notes` string

Free-text notes.

`currency` string

ISO 4217 currency. Defaults to workspace currency.

`tagUuids` array

Tag UUIDs from the Tags API.

`projectUuid` uuid

Bill-level project UUID.

`approvalStatus` enum

Draft (default) or approved — approved posts A/P journals immediately (migration use case).

One of: `draft`, `approved`

`attachments` array

Attachments by public URL.

`url` string required

Public file URL.

`title` string

Display title.

#### Responses

`201` Bill created in draft.

`400` Validation failed — missing required fields or invalid UUID references.

`401` Missing or invalid HMAC signature, expired timestamp, or invalid Bearer token. [Troubleshoot](https://developers.getcount.com/getting-started/errors#error-401)

`403` The credential does not have access to this workspace or resource. [Troubleshoot](https://developers.getcount.com/getting-started/errors#error-403)

`429` Rate limit exceeded (100 requests per minute per clientId). Retry after the Retry-After header. [Troubleshoot](https://developers.getcount.com/getting-started/errors#error-429)

[Previous GET Get a bill](https://developers.getcount.com/reference/bills/get-bill) [Next PATCH Update a bill](https://developers.getcount.com/reference/bills/update-bill)

POST `https://api.getcount.com/partners/bills`

Request

```javascript
import crypto from 'node:crypto';

const BASE_URL = 'https://api.getcount.com';
const CLIENT_ID = process.env.COUNT_CLIENT_ID;
const CLIENT_SECRET = process.env.COUNT_CLIENT_SECRET;
const ACCESS_TOKEN = process.env.COUNT_ACCESS_TOKEN;

const method = 'POST';
const signingPath = '/bills';
const timestamp = Math.floor(Date.now() / 1000).toString();
const body = {
  "vendorUuid": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
  "date": "2026-01-15",
  "dueDate": "2026-02-15",
  "lineItems": [
    {
      "categoryAccountUuid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
      "description": "Office supplies",
      "quantity": 1,
      "price": 250
    }
  ],
  "notes": "Q1 office supplies"
};
const bodyString = JSON.stringify(body);

const bodyHash = crypto.createHash('sha256').update(bodyString).digest('hex');
const baseString = `${method}:${signingPath}:${timestamp}:${bodyHash}`;
const signature = crypto.createHmac('sha256', CLIENT_SECRET).update(baseString).digest('hex');

const response = await fetch(`${BASE_URL}/partners/bills`, {
  method,
  headers: {
    'x-client-id': CLIENT_ID,
    'x-timestamp': timestamp,
    'x-signature': signature,
    'Content-Type': 'application/json',
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
  body: bodyString,
});

console.log(await response.json());
```

Response · 201

```json
{
  "id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
  "billNumber": "BILL-1043",
  "billType": "bill",
  "date": "2026-01-15",
  "dueDate": "2026-02-15",
  "currency": "USD",
  "approvalStatus": "draft",
  "status": "draft",
  "total": 250,
  "paidAmount": 0,
  "amountDue": 250,
  "notes": "Office supplies for Q1",
  "purchaseOrderNumber": null,
  "isDeleted": false,
  "vendor": {
    "id": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
    "name": "Office Depot",
    "email": "ap@officedepot.example"
  },
  "lineItems": [
    {
      "id": "a4b5c6d7-e8f9-0123-abcd-456789012345",
      "description": "Office supplies",
      "quantity": 1,
      "price": 250,
      "total": 250,
      "categoryAccountUuid": "c3d4e5f6-a7b8-9012-cdef-123456789012"
    }
  ],
  "transactions": [],
  "appliedVendorMemos": [],
  "tagUuids": [],
  "createdAt": "2026-01-15T10:30:00.000Z",
  "updatedAt": "2026-01-28T14:22:30.000Z"
}
```
