> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dolfinai.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook event reference, companies & duplicate dismissal

> Every webhook event is now documented with its payload, alongside a new webhooks guide, company-level bill forwarding, and a way to clear a false duplicate.

<Update label="2026-07-31" tags={["Feature","Release"]} description="Webhook event reference">
  ## New

  ### Webhooks guide and event reference

  Every webhook event Dolfin sends is now documented with its full payload under **Webhooks** in the API reference — [`bill.pending_review`](/api-reference/webhooks/bill-pending-review), [`invoice.paid`](/api-reference/webhooks/invoice-paid), [`match_group.variance`](/api-reference/webhooks/match-group-variance) and the rest.

  The new [webhooks guide](/guides/webhooks) covers the parts a schema can't: creating a subscription, verifying the `Dolfin-Signature` HMAC, the retry schedule, de-duplicating on the event `id`, and testing against a local tunnel. If you're polling for bill extraction to finish, subscribing to `bill.pending_review` replaces that loop.

  ### Companies

  Group several organisations under a **company** and handle bills at that level. [Create a company](/api-reference/endpoint/companies/create-company), [list](/api-reference/endpoint/companies/list-companies) and [retrieve](/api-reference/endpoint/companies/get-company) them, [patch](/api-reference/endpoint/companies/patch-company) the details, and [list its organisations](/api-reference/endpoint/companies/list-a-companys-organisations). Organisations are [assigned](/api-reference/endpoint/companies/assign-an-organisation-to-a-company) to and [removed](/api-reference/endpoint/companies/remove-an-organisation-from-its-company) from a company as needed.

  A company has its own [bill-forwarding address](/api-reference/endpoint/companies/get-a-companys-bill-forwarding-email-address), so a supplier can send an invoice without knowing which entity it belongs to. [Upload](/api-reference/endpoint/companies/upload-a-bill-to-a-company) or forward a bill to the company, then [list unassigned bills](/api-reference/endpoint/companies/list-a-companys-unassigned-bills), [read one](/api-reference/endpoint/companies/get-an-unassigned-company-bill), and [assign it to an organisation](/api-reference/endpoint/companies/assign-a-company-bill-to-an-organisation) — or [discard it](/api-reference/endpoint/companies/discard-a-company-bill). A document that couldn't be read can be [retried](/api-reference/endpoint/companies/retry-reading-a-company-bills-document). The [`company_bill.awaiting_organisation`](/api-reference/webhooks/company-bill-awaiting-organisation) webhook fires when a bill is waiting to be assigned.

  Company inboxes carry the same sender controls as organisation inboxes: [list](/api-reference/endpoint/companies/list-a-companys-allowed-bill-forwarding-senders), [allow](/api-reference/endpoint/companies/allow-a-sender-to-forward-bills-to-a-company), and [remove](/api-reference/endpoint/companies/remove-a-companys-allowed-bill-forwarding-sender) senders, and [review forwards that were rejected](/api-reference/endpoint/companies/list-forwards-this-company-rejected).

  ### Dismiss a false duplicate

  When a bill is flagged as a possible duplicate it can't be approved until someone decides. [Confirm it isn't a duplicate](/api-reference/endpoint/bills/confirm-bill-is-not-a-duplicate) to clear the flag and let the bill continue through review.

  ### Organisation-level AR settings

  Read and write AR settings per organisation rather than only per client: [get](/api-reference/endpoint/organisations/get-an-organisations-ar-settings) and [patch](/api-reference/endpoint/organisations/patch-an-organisations-ar-settings) payment terms, invoice numbering, reminder offsets, and CC/Reply-To addresses for a single organisation.

  ## Updates

  ### Extraction wording in the AP guides

  The AP guides now describe reading a bill document as **extraction** rather than OCR, and use the current `Extracting` and `ExtractionFailed` states. A bill's extraction confidence is on the `confidence` field.
</Update>
