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

# Test mode

> Build against virtual printers without paper or charges.

Every organization has a test mode with its own keys (`ir_test_`), its own webhook endpoints and a virtual computer called InkRelay Test Computer. Test jobs walk from `queued` to `done` in about 3 seconds through the same code as live jobs, so webhooks, the event feed and the dashboard behave exactly as they will in production.

The mode comes from the key. An `ir_test_` key only sees test data and an `ir_live_` key only sees live data, so a resource of the other mode answers `404`. In the dashboard, the Test mode toggle filters every list the same way.

## Test printers

InkRelay Test Computer has four printers. They are created the first time you use test mode.

| Printer | Behaves like |
| - | - |
| Test A4 Laser | A4 mono laser printer with duplex |
| Test Letter Color | Letter color printer with duplex |
| Test Receipt 80mm | An 80 mm receipt printer that takes raw ESC/POS |
| Test Label 4x6 | A 4x6 inch label printer that takes raw ZPL |

Only `ir_test_` keys can target these printers, and test keys can only target them. Sending a job to the wrong mode answers `422 mode_mismatch`. See [Raw printing](/guides/raw-printing) for the two raw printers.

## Forcing an error

Put `[fail]` anywhere in the job `title` and the job ends in `error` instead of `done`, so you can test your error handling and your `printjob.error` webhook handler:

```bash theme={null}
curl https://api.inkrelay.app/v1/printjobs \
  -H "Authorization: Bearer $INKRELAY_API_KEY" -H "Content-Type: application/json" \
  -d '{"printerId":"PRINTER_ID","title":"Invoice [fail]","contentType":"pdf_uri","content":"https://inkrelay.app/sample.pdf"}'
```

## Limits

Test mode is free and nothing is printed on paper. Each organization can create 500 test jobs per day (a UTC day). Past that, `POST /v1/printjobs` answers `429 test_mode_daily_cap` until the next day. Test jobs never count toward your plan's prints; `GET /v1/usage` reports your live usage for the current period.

## Switching to live

When your integration works against the test printers:

1. [Install the agent](/install-agent) on a computer with a real printer and mark the printer live.
2. Create a live key (it starts with `ir_live_`) and use it instead of the test key.
3. Create live webhook endpoints. Test endpoints never receive live events. Live endpoints must use `https:`.
4. Replace the test printer ids with the ids from `GET /v1/printers` on the live key.

Nothing else changes: the same requests, the same states and the same webhook payloads.


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