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

# Reopen Voided Invoice

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

Reopen a voided invoice.

        This removes the void date and void journal entry, and sets the invoice status back to open.
        The voiding journal entry will be deleted to reverse the void operation.

## Path parameters

- `invoice_id` integer, required

## 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)
