---
title: "Void Invoice"
method: POST
path: "/coa/api/v1/invoice/{invoice_id}/void/"
tags: ["Accounts Receivable"]
---

# Void Invoice

`POST /coa/api/v1/invoice/{invoice_id}/void/`

Void an existing invoice.

        This creates a reversing journal entry to void the invoice by reversing all debit and credit amounts.
        The invoice status will be updated to reflect the void.

## Path parameters

- `invoice_id` integer, required

## Request body

- VoidInvoiceRequest
  - `void_date` string, date

## Response `200`

- AccountingInvoice
  - `id` integer, required
  - `lines` AccountingInvoiceLine[], required
    - `id` integer, required
    - `invoice` integer
    - `product_name` string, required
    - `product_bundle_name` string, required
    - `stripe_product_id` string, required
    - `product_is_taxable` boolean, required
    - `anrok_item_id` string, required
    - `sphere_item_id` string, required
    - `service_date` string, date, nullable
    - `tags` object[], required
    - `department_name` string, required
    - `department_code` string, required
    - `withholding_tax_rate_name` string, required
    - `withholding_tax_rate_value` number, double, nullable, required — Sum of the selected withholding rate's component rates, for line-level preview.
    - `description` string, nullable
    - `quantity` number, double
    - `rate` number, double
    - `currency` string
    - `amount` number, double
    - `tax` number, double
    - `tax_description` string, nullable
    - `entity_use_code` string, nullable — Avalara entity/use code for line-level tax exemptions
    - `discount` number, double — Discount amount in currency
    - `discount_percentage` number, double — Discount percentage (0-100)
    - `discount_amount` number, double — Discount amount calculated from percentage
    - `tag_ids` integer[]
    - `tag_group_ids` integer[]
    - `created_at` string, date-time, required
    - `last_modified_at` string, date-time, required
    - `customer` integer, required
    - `product` integer, nullable
    - `product_bundle` integer, nullable
    - `withholding_tax_rate` integer, nullable — Marks this line as subject to withholding; used for preview only. Null = not subject.
    - `department` integer, nullable
  - `emails` object[], required
  - `payments` AccountingInvoicePayment[], required
    - `id` integer, required
    - `credit_memo` string, required
    - `payment_transaction_bank_description` string, required
    - `payment_journal_entry_order` string, required
    - `payment_intercompany_journal` string, required
    - `voided_journal_entry_order` string, required
    - `withheld_amount` number, double, nullable, required — Tax withheld on this payment: sum of the payment's own withholding GL legs. Summed over the payment's legs (not the invoice's withholding records) so a voided payment still shows what it originally withheld.
    - `currency` string
    - `amount` number, double
    - `payment_date` string, date, nullable
    - `created_at` string, date-time, required
    - `voided_date` string, date, nullable
    - `source` union
      - 'STRIPE' | 'MANUAL' — * `STRIPE` - Stripe * `MANUAL` - Manual
      - ''
      - unknown
    - `payment_type` union, required — Type of payment: credit memo application, bank transaction, or manual transaction * `CREDIT_MEMO` - Credit Memo * `BANK_TRANSACTION` - Bank Transaction * `MANUAL_TRANSACTION` - Manual Transaction
      - 'CREDIT_MEMO' | 'BANK_TRANSACTION' | 'MANUAL_TRANSACTION' — * `CREDIT_MEMO` - Credit Memo * `BANK_TRANSACTION` - Bank Transaction * `MANUAL_TRANSACTION` - Manual Transaction
      - unknown
    - `external_id` string, nullable, required — Stable upstream identifier for this payment (e.g. Stripe balance transaction 'btxn_...', Stripe credit note 'cn_...', or the mart's event external_id for customer-balance applications). Used as the natural dedup/idempotency key. Null for manually-entered payments.
    - `last_modified_at` string, date-time, required
    - `customer` integer, required
    - `invoice` integer, required
    - `payment_journal_entry` integer, nullable
    - `payment_transaction` integer, nullable
    - `fx_gain_loss_realized_transaction` integer, nullable
    - `payment_term_discount_transaction` integer, nullable
    - `voided_journal_entry` integer, nullable
    - `payment_transactions` integer[]
  - `related_journal_entries` AccountingInvoiceJournalEntry[], required
    - `id` integer, required
    - `journal_entry` integer, required
    - `journal_entry_order` string, required
    - `journal_entry_date` string, date, required
    - `journal_entry_memo` string, required
    - `type` 'reclassification' | 'adjustment' | 'dispute' | 'refund' | 'refund_failure' | 'fx_loss' | 'recoverables', required — * `reclassification` - Reclassification * `adjustment` - Adjustment * `dispute` - Dispute * `refund` - Refund * `refund_failure` - Refund Failure * `fx_loss` - FX Loss * `recoverables` - Recoverables
    - `created_at` string, date-time, required
  - `payment_journal_entries` integer[], required
  - `journal_entry_intercompany` string, required
  - `client_name` string, required
  - `client_campfire_id` string, nullable, required
  - `client_email` string, required
  - `anrok_customer_id` string, required
  - `client_invoice_message` string, required
  - `client_use_stripe_auto_bill` boolean, required
  - `public_invoice_payment_url` string, nullable, required
  - `status` string, required
  - `past_due_days` integer, nullable, required
  - `entity_name` string, required
  - `entity_currency` string, required
  - `entity_invoice_message` string, nullable, required
  - `total_amount` number, double, required
  - `amount_paid` number, double, required
  - `amount_due` number, double, required
  - `withholding_info` object, nullable, required — Withholding context for the invoice's entity. ``estimated_withholding_amount`` covers only the remaining amount due (null once fully paid); ``withheld_to_date`` is the signed sum of posted withholding, so actuals replace the estimate as receipts come in. Certificate-based schemes estimate from the entity certificate's rate (falling back to the scheme default); rules-based schemes sum each line's selected rate over the line amount, scaled by the remaining-due proportion.
  - `contract_name` string, required
  - `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
  - `invoice_number` string
  - `stripe_connection_name` string, required
  - `stripe_connection_entity` integer, required
  - `stripe_connection_billing_portal_enabled` boolean, required
  - `avalara_connection_name` string, required
  - `avalara_connection_company` string, required
  - `tax_rate_name` string, required
  - `tax_rate_value` number, double, required
  - `payment_term_name` string, required
  - `revenue_transactions` integer[]
  - `item_date` string, date, nullable
  - `migrated_journal_id` integer, nullable
  - `voided_journal_entry_order` integer, nullable, required
  - `contract_custom_fields` object[], required
  - `department` integer, nullable
  - `department_name` string, nullable
  - `tags` integer[]
  - `last_modified_at` string, date-time, required
  - `is_deleted` boolean, required
  - `deleted_at` string, date-time, nullable, required
  - `chat_uuid` string, uuid
  - `search_vector` string, nullable, required
  - `search_text` string, nullable, required
  - `auto_send_invoice` boolean, nullable
  - `auto_send_invoice_at` string, date, nullable
  - `auto_sent_at` string, date-time, nullable, required
  - `reminder_sent_dates` unknown
  - `pre_due_reminder_sent_dates` unknown
  - `billing_address` string, nullable
  - `billing_addressee` string, nullable
  - `shipping_address` string, nullable
  - `shipping_addressee` 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
  - `ref_number` string, nullable
  - `purchase_order_number` string, nullable
  - `invoice_date` string, date, required
  - `due_date` string, date, required
  - `shipping_date` string, date, nullable
  - `paid_date` string, date, nullable
  - `uncollectible_date` string, date, nullable
  - `sent_date` string, date, nullable, required
  - `period_start` string, date, nullable
  - `period_end` string, date, nullable
  - `location_of_sale` string, nullable
  - `message_on_invoice` string, nullable
  - `ita_allocation_number` string, nullable
  - `payment_status` union
    - 'draft' | 'open' | 'sent' | 'partial' | 'paid' | 'uncollectible' | 'voided' — * `draft` - Draft * `open` - Open * `sent` - Sent * `partial` - Partially Paid * `paid` - Paid * `uncollectible` - Uncollectible * `voided` - Voided
    - ''
    - unknown
  - `anrok_transaction_id` string, nullable — ID of the transaction in Anrok (set when transaction is created)
  - `warning_message` string, nullable
  - `created_at` string, date-time, required
  - `currency` string
  - `exchange_rate` number, double, nullable
  - `exchange_rate_book` number, double, nullable
  - `last_sent_at` string, date-time, nullable, required
  - `integration_id` string, nullable
  - `integration_context` unknown
  - `vat_number` string, nullable
  - `discount` number, double, nullable — Discount amount for the invoice
  - `payment_term_applied_discount` number, double, nullable — Discount amount applied based on payment term early payment discount
  - `use_stripe_auto_bill` boolean, nullable
  - `stripe_payment_link_id` string, nullable
  - `stripe_payment_intent_id` string, nullable
  - `stripe_invoice_id` string, nullable
  - `stripe_pdf_url` string, nullable
  - `stripe_payment_link` string, nullable
  - `source` string, nullable
  - `source_id` string, nullable
  - `is_migrated` boolean — True for invoices imported via opening balance migration (no finalization JE).
  - `voided_date` string, date, nullable
  - `invoice_labels` unknown
  - `invoice_language` string, nullable
  - `chat_id` integer, nullable
  - `customer` integer, required
  - `entity` integer, required
  - `client` integer, nullable
  - `payment_term` integer, nullable
  - `bad_debt_journal_entry` integer, nullable, required
  - `journal_entry` integer, nullable, required
  - `ar_account` integer, nullable, required — Accounts Receivable account for this invoice. Populated for single-AR and migrated invoices. NULL for multi-AR invoices (aging uses ChartTransactions instead).
  - `voided_journal_entry` integer, nullable, required
  - `entity_transfer_journal_entry` integer, nullable, required
  - `contract` integer, nullable
  - `avalara_connection` integer, nullable
  - `sphere_connection` integer, nullable
  - `anrok_connection` integer, nullable
  - `tax_rate` integer, nullable
  - `stripe_connection` integer, nullable
  - `source_file` 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/versions/6945ebc3180e/schema)
