# Billing

Billing in Mezzanine takes place via a single contract through which all Mezzanine companies interact.  The smart contract used for billing is not redeployed each time that a company is created. &#x20;

Billing in Mezzanine in the initial version of the protocol is simple and does not require the *billable party* to escrow assets, pay a deposit, or pay interest on late payments.  Five variables must be determined to send an invoice to another account:

* The account that is the billable party
* The asset that the invoice is denominated in&#x20;
* The amount to be paid
* The due date
* A category identifier, which will be abstracted from the user

The asset chosen for the invoice must be whitelisted by the Mezzanine team.  Initially, all assets for invoices will be denominated in stablecoins.  The Mezzanine team may choose to whitelist other tokens, such as bitcoin or ether, at a later time.

Once created, each invoice has an identifier.  Paying an invoice requires using this identifier.  Notably, the *payer* (i.e. the party that pays the invoice) does not need to be the billable party.  Rather, the payer merely needs to provide the invoice identifier. &#x20;

The amount specified by the invoice is subsequently transferred directly to the *vendor*, which is the account that created the invoice.  Invoices can be canceled by the vendor at any time. &#x20;

Since invoices do not require any form of escrow by the billable party, there are no on-chain punishments for the refusal to pay an invoice.  The collection of an unpaid invoice for provided services should be enforced via litigation.&#x20;

Category identifiers do not affect the invoice and are used to easily filter paid and unpaid invoices.  An example of a category identifier would be "Advertising".  Quarterly or annual reports could subsequently be automatically created via on-chain event emissions filtered by these category identifiers.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mezzanine.xyz/protocol/modules/billing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
