---
title: "Partial Update Accounting Bill"
method: PATCH
path: "/coa/api/v1/bill/{id}/"
tags: ["Accounts Payable"]
---

# Partial Update Accounting Bill

`PATCH /coa/api/v1/bill/{id}/`

Performs a partial update of an existing accounting bill using PATCH semantics.

        This endpoint allows selective modification of bill fields without requiring
        a complete bill replacement. You can update specific aspects of the bill while
        leaving other fields unchanged.

        **Updatable Fields:**
        - Bill metadata (number, dates, descriptions, vendor, entity)
        - Line items (amounts, accounts, descriptions, departments)
        - Payment terms and due dates
        - Tax calculations and allocations
        - Custom fields and tags
        - Currency and exchange rates

## Path parameters

- `id` string, required

## Request body

- PatchedAccountingBill
  - `id` integer
  - `lines` AccountingBillLine[]
    - `id` integer, required
    - `bill` integer
    - `account_number` string, required
    - `account_name` string, nullable, required — Combines account number and name in the format "number - name"
    - `department_name` string, required
    - `department_code` string, required
    - `bill_customer_name` string, required
    - `tags` object[], required
    - `amortization_schedule` AmortizationSchedule[], required
      - `id` integer
      - `amortization` integer
      - `accounting_amortization` integer
      - `journal_entry_order` string, required
      - `date` string, date, required
      - `amount` number, double, required
      - `posted` boolean
      - `customer` integer, required
      - `transaction` integer, nullable
      - `bill_line` integer, nullable
      - `debit_memo_line` integer, nullable
      - `journal_entry` integer, nullable
    - `tax_rate_name` string, required
    - `tax_rate_value` number, double, required
    - `description` string, nullable
    - `amount` number, double
    - `tax` number, double
    - `tax_description` string, nullable
    - `tag_ids` integer[]
    - `tag_group_ids` integer[]
    - `source` string, nullable
    - `source_id` string, nullable
    - `currency` string
    - `created_at` string, date-time, required
    - `last_modified_at` string, date-time, required
    - `customer` integer, required
    - `account` integer, required
    - `tax_rate` integer, nullable
    - `bill_customer` integer, nullable
    - `department` integer, nullable
  - `payments` AccountingBillPayment[]
    - `id` integer, required
    - `payment_transaction_bank_description` string, required
    - `payment_journal_entry_order` string, required
    - `voided_journal_entry_order` string, required
    - `withheld_amount` number, double, nullable, required — Tax withheld on this payment (AP): sum of the payment's withholding credit legs. Reads the ``bill_withheld_by_je`` map that ``AccountingBillSerializer`` populated from prefetched records, so no per-payment query runs. Void reversals live on a different journal, so they are naturally excluded.
    - `currency` string
    - `amount` number, double
    - `payment_date` string, date, nullable
    - `source` string, nullable
    - `source_id` string, nullable
    - `created_at` string, date-time, required
    - `voided_date` string, date, nullable
    - `last_modified_at` string, date-time, required
    - `customer` integer, required
    - `bill` integer, required
    - `payment_journal_entry` integer, required
    - `payment_transaction` integer, nullable
    - `voided_journal_entry` integer, nullable
  - `payment_journal_entries` integer[]
  - `status` string
  - `past_due_days` integer, nullable
  - `entity_name` string
  - `entity_currency` string
  - `vendor_name` string
  - `ap_account_name` string, nullable — Return AP account name with number in 'number - name' format, similar to name_and_number.
  - `attachments` File[]
    - `id` integer, required
    - `customer` integer, required
    - `created_at` string, date-time, required
    - `created_by` integer, nullable, required
    - `created_by_name` string, required
    - `created_by_email` string, required
    - `last_modified_at` string, date-time, required
    - `name` string, required
    - `url` string, required
    - `s3_content_type` string, nullable
    - `s3_content_length` integer, nullable
    - `s3_path` string, required
    - `object_id` integer, nullable
    - `app` string, required
    - `model` string, required
    - `is_deleted` boolean, required
    - `deleted_at` string, date-time, nullable, required
  - `total_amount` number, double
  - `amount_due` number, double
  - `amount_paid` number, double
  - `item_date` string, date, nullable
  - `migrated_journal_id` integer, nullable
  - `voided_date` string, date
  - `voided_journal_entry_order` string
  - `amortizations` string
  - `last_modified_at` string, date-time
  - `ramp_use_sandbox` string
  - `navan_region` string, nullable — Navan data region (``US``/``EU``) for a Navan-sourced bill, else ``None``. Mirrors ``ramp_use_sandbox``: the frontend builds the "Open in Navan" deep link from ``source_id`` and uses this to pick the web-app host (US -> app.navan.com, EU -> app-fra.navan.com). Navan bills carry no FK to their connection, so the region is resolved per customer and memoized to avoid an N+1 lookup across a bill list.
  - `zip_metadata` string
  - `is_deleted` boolean
  - `deleted_at` string, date-time, nullable
  - `payment_term_name` string
  - `chat_uuid` string, uuid
  - `withholding_info` object, nullable — Withholding context for the bill's entity (AP side). ``estimated_withholding_amount`` covers only the remaining amount due (null once fully paid); ``withheld_to_date`` is the signed sum of posted withholding (AP legs are credits, reversals debits), so actuals replace the estimate as payments post. Certificate-based schemes estimate from the vendor certificate's rate valid today (falling back to the scheme default).
  - `search_vector` string, nullable
  - `search_text` string, nullable
  - `mailing_address` string, nullable
  - `terms` union
    - 'custom' | 'net_5' | 'net_7' | 'net_10' | 'net_15' | 'net_20' | 'net_30' | 'net_40' | 'net_45' | 'net_60' | 'net_90' | 'net_105' | 'net_120' | 'due_on_receipt' — * `custom` - Custom * `net_5` - Net 5 * `net_7` - Net 7 * `net_10` - Net 10 * `net_15` - Net 15 * `net_20` - Net 20 * `net_30` - Net 30 * `net_40` - Net 40 * `net_45` - Net 45 * `net_60` - Net 60 * `net_90` - Net 90 * `net_105` - Net 105 * `net_120` - Net 120 * `due_on_receipt` - Due on Receipt
    - ''
    - unknown
  - `bill_number` string
  - `bill_date` string, date
  - `due_date` string, date
  - `paid_date` string, date, nullable
  - `message_on_bill` string, nullable
  - `ita_allocation_number` string, nullable
  - `ita_bill_type` union — Israel tax compliance: bill classification type * `other` - Other * `equipment` - Equipment
    - 'other' | 'equipment' — * `other` - Other * `equipment` - Equipment
    - ''
    - unknown
  - `source_id` string, nullable
  - `source` string, nullable
  - `source_bill_data` unknown
  - `external_ramp_id` string, nullable
  - `payment_status` union
    - 'partial' | 'open' | 'paid' | 'payment_not_found' | 'payment_pending' | 'voided' — * `partial` - Partially Paid * `open` - Open * `paid` - Paid * `payment_not_found` - Payment Not Found * `payment_pending` - Payment Pending * `voided` - Voided
    - ''
    - unknown
  - `currency` string
  - `exchange_rate` number, double, nullable
  - `exchange_rate_book` number, double, nullable
  - `created_at` string, date-time
  - `tax_behavior` union
    - 'inclusive' | 'exclusive' — * `inclusive` - Inclusive * `exclusive` - Exclusive
    - ''
    - unknown
  - `bill_type` 'BILL' | 'PAYROLL' | 'REIMBURSEMENT' — * `BILL` - Bill * `PAYROLL` - Payroll * `REIMBURSEMENT` - Reimbursement
  - `chat_id` integer, nullable
  - `customer` integer
  - `entity` integer
  - `vendor` integer, nullable
  - `payment_term` integer, nullable — Payment term for this bill
  - `journal_entry` integer, nullable
  - `source_file` integer, nullable
  - `tax_rate` integer, nullable
  - `ap_account` integer, nullable — Accounts Payable account for this bill
  - `voided_journal_entry` integer, nullable

## Response `200`

- AccountingBill
  - `id` integer, required
  - `lines` AccountingBillLine[], required
    - `id` integer, required
    - `bill` integer
    - `account_number` string, required
    - `account_name` string, nullable, required — Combines account number and name in the format "number - name"
    - `department_name` string, required
    - `department_code` string, required
    - `bill_customer_name` string, required
    - `tags` object[], required
    - `amortization_schedule` AmortizationSchedule[], required
      - `id` integer
      - `amortization` integer
      - `accounting_amortization` integer
      - `journal_entry_order` string, required
      - `date` string, date, required
      - `amount` number, double, required
      - `posted` boolean
      - `customer` integer, required
      - `transaction` integer, nullable
      - `bill_line` integer, nullable
      - `debit_memo_line` integer, nullable
      - `journal_entry` integer, nullable
    - `tax_rate_name` string, required
    - `tax_rate_value` number, double, required
    - `description` string, nullable
    - `amount` number, double
    - `tax` number, double
    - `tax_description` string, nullable
    - `tag_ids` integer[]
    - `tag_group_ids` integer[]
    - `source` string, nullable
    - `source_id` string, nullable
    - `currency` string
    - `created_at` string, date-time, required
    - `last_modified_at` string, date-time, required
    - `customer` integer, required
    - `account` integer, required
    - `tax_rate` integer, nullable
    - `bill_customer` integer, nullable
    - `department` integer, nullable
  - `payments` AccountingBillPayment[], required
    - `id` integer, required
    - `payment_transaction_bank_description` string, required
    - `payment_journal_entry_order` string, required
    - `voided_journal_entry_order` string, required
    - `withheld_amount` number, double, nullable, required — Tax withheld on this payment (AP): sum of the payment's withholding credit legs. Reads the ``bill_withheld_by_je`` map that ``AccountingBillSerializer`` populated from prefetched records, so no per-payment query runs. Void reversals live on a different journal, so they are naturally excluded.
    - `currency` string
    - `amount` number, double
    - `payment_date` string, date, nullable
    - `source` string, nullable
    - `source_id` string, nullable
    - `created_at` string, date-time, required
    - `voided_date` string, date, nullable
    - `last_modified_at` string, date-time, required
    - `customer` integer, required
    - `bill` integer, required
    - `payment_journal_entry` integer, required
    - `payment_transaction` integer, nullable
    - `voided_journal_entry` integer, nullable
  - `payment_journal_entries` integer[], required
  - `status` string, required
  - `past_due_days` integer, nullable, required
  - `entity_name` string, required
  - `entity_currency` string, required
  - `vendor_name` string, required
  - `ap_account_name` string, nullable, required — Return AP account name with number in 'number - name' format, similar to name_and_number.
  - `attachments` File[], required
    - `id` integer, required
    - `customer` integer, required
    - `created_at` string, date-time, required
    - `created_by` integer, nullable, required
    - `created_by_name` string, required
    - `created_by_email` string, required
    - `last_modified_at` string, date-time, required
    - `name` string, required
    - `url` string, required
    - `s3_content_type` string, nullable
    - `s3_content_length` integer, nullable
    - `s3_path` string, required
    - `object_id` integer, nullable
    - `app` string, required
    - `model` string, required
    - `is_deleted` boolean, required
    - `deleted_at` string, date-time, nullable, required
  - `total_amount` number, double, required
  - `amount_due` number, double, required
  - `amount_paid` number, double, required
  - `item_date` string, date, nullable
  - `migrated_journal_id` integer, nullable
  - `voided_date` string, date, required
  - `voided_journal_entry_order` string, required
  - `amortizations` string, required
  - `last_modified_at` string, date-time, required
  - `ramp_use_sandbox` string, required
  - `navan_region` string, nullable, required — Navan data region (``US``/``EU``) for a Navan-sourced bill, else ``None``. Mirrors ``ramp_use_sandbox``: the frontend builds the "Open in Navan" deep link from ``source_id`` and uses this to pick the web-app host (US -> app.navan.com, EU -> app-fra.navan.com). Navan bills carry no FK to their connection, so the region is resolved per customer and memoized to avoid an N+1 lookup across a bill list.
  - `zip_metadata` string, required
  - `is_deleted` boolean, required
  - `deleted_at` string, date-time, nullable, required
  - `payment_term_name` string, required
  - `chat_uuid` string, uuid
  - `withholding_info` object, nullable, required — Withholding context for the bill's entity (AP side). ``estimated_withholding_amount`` covers only the remaining amount due (null once fully paid); ``withheld_to_date`` is the signed sum of posted withholding (AP legs are credits, reversals debits), so actuals replace the estimate as payments post. Certificate-based schemes estimate from the vendor certificate's rate valid today (falling back to the scheme default).
  - `search_vector` string, nullable, required
  - `search_text` string, nullable, required
  - `mailing_address` string, nullable
  - `terms` union
    - 'custom' | 'net_5' | 'net_7' | 'net_10' | 'net_15' | 'net_20' | 'net_30' | 'net_40' | 'net_45' | 'net_60' | 'net_90' | 'net_105' | 'net_120' | 'due_on_receipt' — * `custom` - Custom * `net_5` - Net 5 * `net_7` - Net 7 * `net_10` - Net 10 * `net_15` - Net 15 * `net_20` - Net 20 * `net_30` - Net 30 * `net_40` - Net 40 * `net_45` - Net 45 * `net_60` - Net 60 * `net_90` - Net 90 * `net_105` - Net 105 * `net_120` - Net 120 * `due_on_receipt` - Due on Receipt
    - ''
    - unknown
  - `bill_number` string, required
  - `bill_date` string, date, required
  - `due_date` string, date, required
  - `paid_date` string, date, nullable
  - `message_on_bill` string, nullable
  - `ita_allocation_number` string, nullable
  - `ita_bill_type` union — Israel tax compliance: bill classification type * `other` - Other * `equipment` - Equipment
    - 'other' | 'equipment' — * `other` - Other * `equipment` - Equipment
    - ''
    - unknown
  - `source_id` string, nullable
  - `source` string, nullable
  - `source_bill_data` unknown
  - `external_ramp_id` string, nullable
  - `payment_status` union
    - 'partial' | 'open' | 'paid' | 'payment_not_found' | 'payment_pending' | 'voided' — * `partial` - Partially Paid * `open` - Open * `paid` - Paid * `payment_not_found` - Payment Not Found * `payment_pending` - Payment Pending * `voided` - Voided
    - ''
    - unknown
  - `currency` string
  - `exchange_rate` number, double, nullable
  - `exchange_rate_book` number, double, nullable
  - `created_at` string, date-time, required
  - `tax_behavior` union
    - 'inclusive' | 'exclusive' — * `inclusive` - Inclusive * `exclusive` - Exclusive
    - ''
    - unknown
  - `bill_type` 'BILL' | 'PAYROLL' | 'REIMBURSEMENT' — * `BILL` - Bill * `PAYROLL` - Payroll * `REIMBURSEMENT` - Reimbursement
  - `chat_id` integer, nullable
  - `customer` integer, required
  - `entity` integer, required
  - `vendor` integer, nullable, required
  - `payment_term` integer, nullable — Payment term for this bill
  - `journal_entry` integer, nullable
  - `source_file` integer, nullable
  - `tax_rate` integer, nullable
  - `ap_account` integer, nullable — Accounts Payable account for this bill
  - `voided_journal_entry` integer, nullable

---

[API](https://skmtc.net/campfire/apis/campfire-developer-apis.md) · [All operations](https://skmtc.net/campfire/apis/campfire-developer-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/campfire/campfire-developer-apis/revisions/6945ebc3180e/schema)
