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

# Paper Forms

Tickets, invoices, card receipts and vehicle sale agreements, written in game with inventory items. Settings are in [forms.lua](https://docs.aps-store.com/assets/aps_cityhall/configuration-files/forms.lua.md). Switch them with `Config.Features.billingForms` and `Config.Features.vehicleSale`.

## Items

Add these items to your inventory: `empty_ticket`, `ticket`, `empty_invoice`, `invoice`, `payment_terminal`, `thermal_paper`, `receipt`, `vehicle_sale_agreement`, `signed_vehicle_sale_agreement`. The item lists for each inventory are on the [Installation](https://docs.aps-store.com/assets/aps_cityhall/installation.md) page.

Blank forms and the terminal are sold in the Document Office app, tab **Forms & Supplies** (`Config.EmptyPapers`).

## Tickets, invoices and receipts

| Use item | Form | Receiver gets |
| - | - | - |
| `empty_ticket` | Traffic ticket or ticket | `ticket` |
| `empty_invoice` | Invoice | `invoice` |
| `payment_terminal` (uses up `thermal_paper`) | Receipt | `receipt` |

`Config.AllowedJobBillings` sets which jobs can write which forms, with amount limits, due dates, tax, license actions, penalty points and the society / issuer shares. `Config.BillingItems` sets the items. Both use the same keys as `vms_cityhall`. The receiver must stand within `Config.Forms.distance`.

Using a filled form shows it. Forms with `payWithItem = true` (receipts by default) can be paid there with the methods in `Config.BillingPayments.withItem`. Every bill can also be paid on a City Hall PC.

Tax from these forms goes to the treasury when `Config.Features.taxes` is on. The society and issuer percentages apply to the amount without tax.

`exports['aps_cityhall']:openBillingForm(source, 'ticket')` opens a form from another script (`'ticket'`, `'invoice'` or `'receipt'`). The job and item checks still apply.

## Vehicle sale agreement

The seller uses `vehicle_sale_agreement`, picks the buyer, vehicle, price and payment, and signs. The buyer then gets the agreement on screen and has `OfferSeconds` to sign or decline. On signing, the money moves, the vehicle and its insurance change owner, the blank is used up and both get `signed_vehicle_sale_agreement`. Sales are stored in `aps_vehicle_sales`.

Business, job, company and gang vehicles and models in `BlacklistVehicles` can't be sold.

## Selling to a company

With `AllowSellForCompany`, a buyer whose job and grade are in `CompaniesList` can sign for their company when the model is allowed there. The vehicle then gets the company in the `company` column, which vms\_garagesv2 adds. The buyer pays.

## vms\_garagesv2

Set `Config.UseSaleAgreement = false` in vms\_garagesv2. A parked vehicle's new owner is passed on to it, and company and gang vehicles can't be sold privately.

## Vehicle keys

With `wasabi_carlock` started, the seller's keys are removed and the buyer gets keys (`Config.VehicleKeys` in `config.compat.lua`). For other key scripts use the `Config.OnVehicleSold` [hook](https://docs.aps-store.com/assets/aps_cityhall/developer-api/hooks.md).

## Company billings

`/billings` lists the bills of the player's job, for jobs in `Config.AllowedJobBillings`. Bosses, and grades from `fullAccessGrade` up, see the whole company. Everyone else sees the bills they wrote. Settings: `Config.CompanyBillings`.

## Discord webhooks

Paste webhook URLs into `Config.Webhooks` in `config.server.lua`: `RECEIPT`, `PAY_RECEIPT`, `INVOICE`, `PAY_INVOICE`, `TICKET`, `TRAFFIC_TICKET`, `PAY_TICKET`, `VEHICLE_SELL`. Empty entries stay off.

## Payment terminal prop

The terminal in the player's hand is the free **Payment terminal** prop by [BzZz](https://forum.cfx.re/u/bzzzi). It is included in `stream/` and needs no setup. If you already run the `bzzz_terminal` resource, you can remove it.

## Credits

Payment terminal prop: [BzZz](https://forum.cfx.re/u/bzzzi), original package: [bzzz.tebex.io/package/6510851](https://bzzz.tebex.io/package/6510851). It is included unmodified, is not our work and is not protected by escrow. See `THIRD_PARTY.md`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.