We have introduced a set of API endpoints for credit memo operations. You can now create credit memos for adjusting the invoice amount owed by customers.

OperationAPI endpoint
Create a credit memoPOST /v3/credit-memos
Get list of credit memosGET /v3/credit-memos
Get credit memo detailsGET /v3/credit-memos/{creditMemoId}
Update a credit memoPATCH /v3/credit-memos/{creditMemoId}
Replace a credit memoPUT /v3/credit-memos/{creditMemoId}
Archive a credit memoPOST /v3/credit-memos/{creditMemoId}/archive
Restore a credit memoPOST /v3/credit-memos/{creditMemoId}/restore
Create multiple credit memosPOST /v3/credit-memos/bulk
Update multiple credit memosPATCH v3/credit-memos/bulk
Replace multiple credit memosPUT v3/credit-memos/bulk
Archive multiple credit memosPOST /v3/credit-memos/bulk/archive
Restore multiple credit memosPOST /v3/credit-memos/bulk/restore

In addition, you can apply credit memo amounts to invoices. In the create and update invoice operations, you can now set the new creditAmount field in your request as the credit amount applied to an invoice.

See Credit memos for more information.

The webhook notification payloads for all bill, vendor, bank account, and card account events now include all the response fields. For example, if you have subscribed to the vendor.created event, the payload for each related notification will now include the response fields for each created vendor.

All the webhook notification payload samples have been updated in the documentation.

In addition, the vendorName field is now available in all the bill webhooks. If you have subscribed to the bill.updated, bill.archived, or bill.restored events, the vendorName field is available in each payload.

In the Get list of bills (GET /v3/bills) and Get bills details (GET /v3/bills/{billId}) API response, we have introduced the vendorName field. You can now get the vendor name for each bill with these endpoints.

See GET /v3/bills in the API reference for more information.

You can now generate a developer key in the BILL web app to work with the BILL API. As an administrator of your test organization, you can generate up to 4 developer keys.

See Sandbox API sign up for more information.

The webhook notification payloads for all bill-related events now include all the response fields for the bill. For example, if you have subscribed to the bill.updated event, the payload for each related notification will now include all the response fields for the each updated bill.

See Bill notification payloads for more information.

We have updated the webhooks events catalog to include the payment.failed event. When your Create a payment (with POST /v3/payments) or Create a bulk payment (with POST /v3/payments/bulk) request fails, BILL sends you a notification with information to identify your payment request and with error messages to help you debug.

You can now set up subscriptions to receive notifications for the new event.

See Payment notification payloads for more information.

BILL is introducing UUIDs in the Spend & Expense API. Each ID value that uniquely identifies an entity in Spend & Expense (such as a budget, transaction, or user) now follows the UUID4 format.

UUID v4 (or UUID4) is a randomly-generated 128-bit identifier and is highly secure. The introduction of UUIDs in the Spend & Expense API is another measure taken by BILL for further improving its security standards.

Spend & Expense webhook notifications

When BILL sends notifications for the spend.transactions.updated event, each ID in the notification payload is a UUID value. For example, uuid is the UUID of the transaction, and userUuid is the UUID of the user that created the transaction.

See Spend & Expense transaction notification payloads for more information.

❗️

IMPORTANT

While the spend.transactions.updated notification payload includes only uuid values and no id values, the Spend & Expense API responses continue to present both uuid and id values.

In the future, the Spend & Expense id values will deprecated. We will share more information when we have a timeline for this deprecation.

GET operations

Let's use the example of budgets to understand the impact of introducing UUIDs on the Spend & Expense GET operations.

When you get details about a budget with GET /v3/spend/budgets/{budgetId}, you currently set the budget id in your API request. Moving forward, you can set the budget uuid as another method for getting details about a budget.

GET response fields

For each existing Spend & Expense API object, BILL has generated a uuid value for each id value. In the GET /v3/spend/budgets/{budgetId} response example, both the uuid and id values are available to uniquely identify the budget.

Similarly, for fields with an id suffix, we now have the same field with the uuid suffix to present the UUID value. For example, for the parentBudgetId field in the API response for a budget, we now have a additional parentBudgetUuid field to present the UUID of the parent budget.

{
    "id": "QnVkZ2V0OjUyOTg2MQ==",
    "uuid": "bgt_mur9ttm5tt0m97tjj287s744t4",   // NEW UUID VALUE
    "name": "Happy Music Supplies monthly spending budget",
    "retired": false,
    "startDate": "2025-12-15",
    "recurringInterval": "MONTHLY",
    "timezone": "US/Eastern",
    "autoAddUsers": false,
    "receiptRequired": true,
    "carryOver": false,
    "budgetGroup": false,
    "parentBudgetId": "{parent_budget_id}",
    "parentBudgetUuid": "{parent_budget_uuid}",   // NEW UUID VALUE
    "shareFunds": "SHARE_MANUALLY",
    "recurringLimit": 200.00,
    "limitlessOverspend": false,
    "currentPeriod": {
        "startDate": "2025-12-01",
        "endDate": "2026-01-01",
        "limit": 200.00,
        "overspendBuffer": 0.00,
        "assigned": 0.00,
        "spent": {
            "cleared": 0.00,
            "pending": 0.00,
            "total": 0.00
        }
    },
    "default": false
}

POST, PATCH, PUT, and DELETE operations

Currently, you cannot use UUID values in the Spend & Expense POST, PATCH, PUT or DELETE operations. This feature will be available in the future. We will share more information when this feature is available.