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

# Set up the printer client

> Install the Zippendo Printer desktop app, sign in with the browser, register a local printer, and keep it online for print jobs.

The **Zippendo Printer** desktop app (window title **Zippendo Printer**) connects the printers on this computer to Zippendo. It stays in the system tray, keeps a WebSocket open, and prints labels and documents as jobs arrive.

It is not the same surface as sidebar **Printers**. You download the app from **Printers**, but you register devices in the desktop app. After a printer is **Active**, you edit name, type, and **Rotate wide pages to portrait** on the web **Printers** list.

Journey: [Labels and printing](/docs/tutorials/labels-printing). Web list, filters, and **Print All**: [Add a printer](/docs/how-to/add-a-printer). Browser **Authorize Printer Client** states: [Authorize the printer client](/docs/how-to/authorize-a-printer). Jobs: [Printer jobs](/docs/how-to/printer-jobs).

<Info>
  The desktop app is light-only (no theme switch). Frames captioned **desktop app window** are the live **Zippendo Printer** window (macOS title bar). Older renderer-only PNGs stay in the same folder as fallback. Web **Printers** and **Authorize Printer Client** shots are reused from those how-tos — not copied into this folder.
</Info>

## Printer client vs Printers

| Surface                                         | What you do there                                                                                                                                    |
| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Zippendo Printer** (this app)                 | **Sign in with Browser**, pick a **Local Printer**, set **Display Name** and **Printer Type**, watch **Connected** / **Disconnected**, **Reconnect** |
| **Printers** (web, `/{org}/dashboard/printers`) | **Download Printer Client**, **Approve** / **Disable**, **Edit** name/type/rotation, **Online** / **Offline**, job history                           |

There is no **Add printer** button on the web list. Empty copy: **No printers yet** — **Printers will appear here once they are registered from the printer client application.**

## Download

Sidebar **Printers**. Header action **Download Printer Client**. Menu title **Download for your system**. Each row is a direct installer from the latest GitHub release (not a landing page):

| Label                     | Helper               | File                             |
| ------------------------- | -------------------- | -------------------------------- |
| **macOS — Apple Silicon** | **M1 and newer**     | `Zippendo-Printer-mac-arm64.dmg` |
| **macOS — Intel**         | **Older Macs**       | `Zippendo-Printer-mac-x64.dmg`   |
| **Windows**               | **10 / 11 (64-bit)** | `Zippendo-Printer-win-x64.exe`   |

<Frame caption="Download Printer Client lists macOS Apple Silicon, macOS Intel, and Windows">
  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/add-a-printer/02-download-client-light.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=d4bc799d163115dfa8a8bf1b5d6b704b" alt="Download Printer Client menu with macOS Apple Silicon, macOS Intel, and Windows installers" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/add-a-printer/02-download-client-light.png" />

  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/add-a-printer/02-download-client-dark.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=6e7ac452700835d36b80f2694f41c378" alt="Download Printer Client menu with macOS Apple Silicon, macOS Intel, and Windows installers" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/add-a-printer/02-download-client-dark.png" />
</Frame>

## Install and first launch

The app does **not** ask for macOS Screen Recording or Accessibility. Network access is enough to sign in and print.

### macOS

<Steps>
  <Step title="Open the DMG">
    Drag **Zippendo Printer** into **Applications**.
  </Step>

  <Step title="Open once as an unidentified developer">
    **Control-click** (right-click) the app → **Open** → **Open**. On **macOS Sequoia (15)** or later, if that is still blocked, open **System Settings → Privacy & Security**, find the message about **Zippendo Printer**, and click **Open Anyway**. You only do this once.
  </Step>
</Steps>

macOS will not report the app as “damaged” — the installer is ad-hoc signed. The extra click is the unidentified-developer prompt, not a Screen Recording or Accessibility dialog.

### Windows

<Steps>
  <Step title="Run the installer">
    Open `Zippendo-Printer-win-x64.exe`. You can change the install folder. The installer can add a desktop shortcut and a Start menu shortcut.
  </Step>

  <Step title="If SmartScreen appears">
    Choose **More info → Run anyway**.
  </Step>
</Steps>

<Tip>
  Windows can auto-update in the background. Until Apple notarization ships, macOS users grab a new `.dmg` from **Download Printer Client** when they need a newer build. The tray menu includes **Check for updates…**.
</Tip>

## Sign in with the browser

There is **no pairing code** and no email/password form in the current app. Sign-in is browser OAuth.

On first launch the window title is **Zippendo Printer**. The card:

| Element       | Copy                                                  |
| ------------- | ----------------------------------------------------- |
| Title         | **Welcome to Zippendo**                               |
| Subtitle      | **Connect your printer to start receiving jobs**      |
| Primary       | **Sign in with Browser** (busy: **Opening browser…**) |
| Footer toggle | **Advanced options** / **Hide advanced options**      |

<Frame caption="Welcome to Zippendo — Sign in with Browser (desktop app window)">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/setup-printer-client/native-01-welcome.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=91d95a793cd14cf1e090de731f4709f7" alt="Zippendo Printer desktop app window with Welcome to Zippendo, Sign in with Browser, and Advanced options" width="960" height="1300" data-path="images/how-to/setup-printer-client/native-01-welcome.png" />
</Frame>

**Advanced options** reveals **Server URL** (placeholder **[https://api.zippendo.com](https://api.zippendo.com)**). Packaged installs already point at production. Leave it unless Zippendo support gives you a different API host.

<Frame caption="Advanced options — Server URL in the desktop app window">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/setup-printer-client/native-02-advanced-options.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=dd189798471530245aabd53067c4aab0" alt="Zippendo Printer desktop app window with Advanced options open and Server URL set to https://api.zippendo.com" width="960" height="1300" data-path="images/how-to/setup-printer-client/native-02-advanced-options.png" />
</Frame>

Click **Sign in with Browser**. The app starts a local callback listener and opens `/authorize-printer?session_id=…` (optional `callback_port` for the HTTP fallback). The desktop window switches to **Waiting for Authorization**.

| Element  | Copy                                                                              |
| -------- | --------------------------------------------------------------------------------- |
| Title    | **Waiting for Authorization**                                                     |
| Subtitle | **A browser window has opened. Please sign in and authorize the printer client.** |
| Hint     | **After you authorize in your browser, this window will automatically update.**   |
| Action   | **Cancel**                                                                        |

Errors on this screen: **Authorization was rejected**, **Authorization session expired**, **Failed to initiate sign in**, **Sign in failed**.

<Frame caption="Waiting for Authorization after Sign in with Browser (desktop app window)">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/setup-printer-client/native-03-waiting-authorization.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=0faa7fe11b2f6ef2c5b9e939e1b8ba24" alt="Zippendo Printer desktop app window showing Waiting for Authorization with a Cancel button" width="960" height="1300" data-path="images/how-to/setup-printer-client/native-03-waiting-authorization.png" />
</Frame>

## Authorize in the browser

You must already be signed in to Zippendo. Title **Authorize Printer Client**. Description: **A printer client is requesting access to your Zippendo account.**

| Element       | Copy                                                                                                                            |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Signed-in box | **Signed in as \{email}**                                                                                                       |
| Org count     | **Access to \{count} organization** / **organizations**                                                                         |
| Warning       | **By authorizing, you will grant this printer client access to manage printers and receive print jobs for your organizations.** |
| Primary       | **Authorize Printer Client** (pending: **Authorizing…**)                                                                        |
| Secondary     | **Reject** (pending: **Rejecting…**)                                                                                            |

<Frame caption="Authorize Printer Client — signed-in account, warning, Authorize or Reject">
  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/authorize-a-printer/02-authorize-pending-light.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=8b7dc637797acc61ea820a67d6c5a989" alt="Authorize Printer Client page with signed-in email, access warning, and Authorize Printer Client button" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/authorize-a-printer/02-authorize-pending-light.png" />

  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/authorize-a-printer/02-authorize-pending-dark.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=89c96ea725eb0964eacdd6167e6d2f1b" alt="Authorize Printer Client page with signed-in email, access warning, and Authorize Printer Client button" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/authorize-a-printer/02-authorize-pending-dark.png" />
</Frame>

**Authorize Printer Client** redirects to `zippendo://callback?token=…` (preferred) or `http://localhost:PORT/callback`. Stay on the tab until the desktop app receives the token. Then **Authorization Complete**: **The printer client has been authorized. You can close this window and return to the application.**

<Frame caption="Authorization Complete — close the tab and return to Zippendo Printer">
  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/authorize-a-printer/03-authorize-complete-light.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=34b811d691c80761d73c47aec1dae769" alt="Authorization Complete message after approving the printer client" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/authorize-a-printer/03-authorize-complete-light.png" />

  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/authorize-a-printer/03-authorize-complete-dark.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=f16dc36b991e6fc459bf3683bfb1735b" alt="Authorization Complete message after approving the printer client" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/authorize-a-printer/03-authorize-complete-dark.png" />
</Frame>

Other authorize states (no extra fields — start again from **Sign in with Browser** if needed): **Invalid Request**, **Session Error**, **Already Authorized**, **Authorization Rejected**, **Session Expired**. Full copy: [Authorize the printer client](/docs/how-to/authorize-a-printer).

## Printer Dashboard

After a successful callback the app shows **Printer Dashboard** — **Manage your printers and connection status**. Footer: **Signed in as \{name}** and **Settings**.

Empty state: **No printers configured** and **Add Your First Printer**. Heading **Printers** still has **+ Add Printer**.

<Frame caption="Printer Dashboard with no printers — Add Your First Printer (desktop app window)">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/setup-printer-client/native-04-dashboard-empty.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=9f5fd315ff169bc915b91e1aee5fba88" alt="Zippendo Printer desktop app window showing Printer Dashboard Disconnected, zero active printers, and Add Your First Printer" width="960" height="1300" data-path="images/how-to/setup-printer-client/native-04-dashboard-empty.png" />
</Frame>

### Connection status

The status row is the WebSocket to Zippendo, not the USB/network cable to the device.

| Status               | Meaning                                     |
| -------------------- | ------------------------------------------- |
| **Connected**        | Ready to receive jobs                       |
| **Connecting…**      | Establishing the socket                     |
| **Connection Error** | Failed to connect. Will retry automatically |
| **Disconnected**     | Not connected                               |

Subtitle: **\{n} active printer(s)** and, when any are **ACTIVE**, **· \{n} connected** (local OS printers the app currently sees as idle/ready).

**Reconnect** appears when status is **Disconnected** or **Connection Error**. It stays disabled until at least one printer is **Active**. Error if connect fails: **Failed to connect**.

The app reconnects on its own after a drop (1s, 2s, 4s, … up to 60s) and does not stop until you **Sign Out**. Closing the window hides it to the tray (it keeps running).

### System tray

Tooltip **Zippendo Printer**, or **Zippendo Printer - Connected** / **Connecting...** / **Disconnected** / **Connection Error**. Menu:

| Item                                     | Notes                                                                                            |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------ |
| **Status: …**                            | Disabled label — same four states as the dashboard (tray uses **Connecting...** with three dots) |
| **Open Zippendo Printer**                | Shows the window                                                                                 |
| **Check for updates…**                   | Manual update check                                                                              |
| **Restart & install update v\{version}** | Only after an update has downloaded                                                              |
| **Quit**                                 | Stops the client. Jobs will queue as **Pending** until you start it again                        |

Double-click the tray icon to show or hide the window.

<Frame caption="macOS tray menu — Open Zippendo Printer, Check for updates, Quit">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/setup-printer-client/native-08-tray-menu.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=8995ed2ddf2b082ef2bb5303b1422eaf" alt="macOS menu bar extra for Zippendo Printer with Status Disconnected, Open Zippendo Printer, Check for updates, and Quit" width="390" height="370" data-path="images/how-to/setup-printer-client/native-08-tray-menu.png" />
</Frame>

## Add a printer

**+ Add Printer** or **Add Your First Printer** opens **Add Printer**. Every field is required — empty submit shows **Please fill in all fields**. Failures: **Failed to add printer**, **Failed to discover printers**.

| Field             | Control | Options / placeholder                                                                                                                                          |
| ----------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Organization**  | Select  | **Select organization…** — every org the signed-in user can access                                                                                             |
| **Local Printer** | Select  | **Select printer…** — printers the OS reports. The OS default is marked **(Default)**. While scanning: **Discovering printers…**. Empty: **No printers found** |
| **Display Name**  | Text    | Placeholder **e.g., Warehouse Label Printer** — this is the name on web **Printers**                                                                           |
| **Printer Type**  | Select  | **Document Printer** (default) or **Label Printer**                                                                                                            |

Actions: **Cancel**, **Add Printer** (busy: **Adding…**).

<Frame caption="Add Printer dialog in the desktop app window — Local Printer filled from the OS list">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/setup-printer-client/native-05-add-printer-modal.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=d73a032a83002a043fcb83cfecb8821e" alt="Zippendo Printer desktop app window with Add Printer dialog, Nordlys Living selected, a Zebra ZD421 local printer, Display Name, and Document Printer" width="960" height="1300" data-path="images/how-to/setup-printer-client/native-05-add-printer-modal.png" />
</Frame>

Use **Label Printer** for shipping labels (thermal / ZPL). Use **Document Printer** for packing lists and invoices (usually A4). The same OS printer can be registered once per type on this client — for example as both Label and Document, but not twice as Label.

Printer names must be unique in the organization. **Local Printer** is stored as **OS Printer Name** on the web and cannot be changed there.

## Pending approval vs Active vs Offline

A new printer is **Pending Approval** until someone uses **Approve** on web **Printers**. The desktop app shows a yellow banner **\{n} printer(s) pending approval in Zippendo.** and the row **Waiting for admin approval**. The OS name and type (`LABEL` / `DOCUMENT`) sit under the display name.

<Frame caption="Printer Dashboard with a pending printer (desktop app window)">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/setup-printer-client/native-06-dashboard-pending.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=b9a8acf185756b1792cdb612a5d438ae" alt="Zippendo Printer desktop app window Connected with one printer pending approval in Zippendo and Waiting for admin approval on the label printer" width="960" height="1840" data-path="images/how-to/setup-printer-client/native-06-dashboard-pending.png" />
</Frame>

Row status dots in the desktop app:

| Dot    | Meaning                                                                                        |
| ------ | ---------------------------------------------------------------------------------------------- |
| Yellow | **Waiting for admin approval**                                                                 |
| Green  | **Active** and the local OS printer is found                                                   |
| Red    | **Active** but the local printer is missing — **Printer offline — check power and connection** |
| Gray   | **Disabled**                                                                                   |

Trash icon title **Remove printer**. Confirm: **Remove printer "\{name}"?** Failure: **Failed to remove printer**.

On the web list, **Status** (**Active** / **Pending Approval** / **Disabled**) is independent of **Connection** (**Online** / **Offline**). A printer can be **Active** and **Offline**: approved, but this app is not connected. **Approve** is only in the row menu while status is **Pending Approval**. Toast: **Printer approved successfully**.

<Frame caption="Pending Approval row — Approve is in the row menu until an admin confirms the device">
  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/authorize-a-printer/04-pending-approval-light.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=40a0851b3ef0e7bd1b3834d374881710" alt="Printers table with a Pending Approval printer and the Approve action in the row menu" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/authorize-a-printer/04-pending-approval-light.png" />

  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/authorize-a-printer/04-pending-approval-dark.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=c514f2baeafd63da85f56d48b160247b" alt="Printers table with a Pending Approval printer and the Approve action in the row menu" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/authorize-a-printer/04-pending-approval-dark.png" />
</Frame>

### Rotation (web only)

There is no rotate control in **Zippendo Printer**. After the printer is **Active**, **Edit** it on **Printers** and turn on **Rotate wide pages to portrait**. Helper: **Turns landscape (wide) pages 90° when printing — useful for wide carrier labels on portrait label rolls.** **OS Printer Name** is read-only.

<Frame caption="Edit Printer: name, type, and Rotate wide pages to portrait">
  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/add-a-printer/04-edit-printer-light.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=e922346fe09e9c6a92ef7222d3f5fc4b" alt="Edit Printer modal with Printer Name, Printer Type Label, and Rotate wide pages to portrait switch" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/add-a-printer/04-edit-printer-light.png" />

  <img src="https://mintcdn.com/zippendo/C18Zs_-3chtQ-0St/images/how-to/add-a-printer/04-edit-printer-dark.png?fit=max&auto=format&n=C18Zs_-3chtQ-0St&q=85&s=119dc17a962300b7a02faf74e7f522da" alt="Edit Printer modal with Printer Name, Printer Type Label, and Rotate wide pages to portrait switch" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/add-a-printer/04-edit-printer-dark.png" />
</Frame>

## Print jobs and a test print

**Printer Dashboard** does not list jobs and has no **Test Print** button. Jobs are created from a shipment **Documents** tab (**Print** / **Print All**) or from auto-print when you **send**. Open **Printers** → the printer → **Jobs**.

Stats: **Pending**, **Processing**, **Failed**, **Completed**. Retry a **Failed** job from that list. Full columns and toasts: [Printer jobs](/docs/how-to/printer-jobs).

<Frame caption="Jobs tab lists pending, failed, and completed print jobs">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/printer-jobs/01-jobs-tab-light.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=218e6debf7cf0f0fc8e71e2c87daae18" alt="Printer detail Jobs tab with Pending, Processing, Failed, and Completed stats and a jobs table" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/printer-jobs/01-jobs-tab-light.png" />

  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/printer-jobs/01-jobs-tab-dark.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=5ee3642dd64253e7e389b6aaa6af7edf" alt="Printer detail Jobs tab with Pending, Processing, Failed, and Completed stats and a jobs table" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/printer-jobs/01-jobs-tab-dark.png" />
</Frame>

To confirm the path end to end: send a shipment (or **Print All** on **Documents**), then watch the job leave **Pending** while this app is **Connected** and the row is green.

## Auto-print

The desktop app does not have an auto-print toggle. Auto-print is configured on a shipping rule (**Auto-Print Labels** / **Auto-Print Documents**) or on a shipment with no rule (**Printer Settings**). When you **send**, Zippendo queues jobs to an **Active** printer; this app must be **Connected** for them to print.

Setup: [Auto-print labels and documents](/docs/how-to/auto-print).

## Settings

Footer **Settings**. **Back to Dashboard** returns to **Printer Dashboard**. **Device** (**Client ID**) and **About** (**Version**, **Platform**) sit below **Language** — scroll the desktop app window to see them.

| Section      | Fields                                                                                                                                                                                                        |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Account**  | **Organization** / **Organizations** (names of orgs this client can use). **Sign Out** (busy: **Signing out…**). Failure: **Logout failed**                                                                   |
| **Server**   | **Server URL** (placeholder **[https://api.zippendo.com](https://api.zippendo.com)**). **Save** (busy: **Saving…**). Empty: **Server URL cannot be empty**. Failure: **Failed to save server URL**            |
| **Language** | **Display language** — **System default**, **English**, **Dansk**. **System default** follows the OS. The closed control can look empty when **System default** is selected; open it to see the three options |
| **Device**   | **Client ID** (read-only UUID). Helper: **This ID uniquely identifies this device**                                                                                                                           |
| **About**    | **Version**, **Platform** (the device platform string)                                                                                                                                                        |

<Frame caption="Settings in the desktop app window — Account, Server URL, Display language, Client ID, Version">
  <img src="https://mintcdn.com/zippendo/OJ9RTi9o5Q3_r39V/images/how-to/setup-printer-client/native-07-settings.png?fit=max&auto=format&n=OJ9RTi9o5Q3_r39V&q=85&s=b78d29133806daa1e84855fa2755863a" alt="Zippendo Printer desktop app Settings with Back to Dashboard, Sign Out, Server URL, Display language, Client ID, Version, and Platform" width="960" height="1968" data-path="images/how-to/setup-printer-client/native-07-settings.png" />
</Frame>

**Sign Out** disconnects the WebSocket and returns to **Welcome to Zippendo**. The **Client ID** is kept so printers registered from this machine can be restored after you sign in again.

## Troubleshooting

| Symptom                                            | What to check                                                                                                                                                                                                                     |
| -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Web **Connection** stays **Offline**               | **Zippendo Printer** must be running (tray icon) and show **Connected**. Quit from the tray fully stops the socket                                                                                                                |
| Desktop **Disconnected** / **Connection Error**    | Click **Reconnect** if you have an **Active** printer. Otherwise wait — the app retries with backoff up to 60s. Confirm **Server URL** is **[https://api.zippendo.com](https://api.zippendo.com)** unless you were told otherwise |
| **Printer offline — check power and connection**   | The OS no longer reports that **Local Printer**. Power, cable/Wi-Fi, and the printer queue in macOS **Printers & Scanners** / Windows **Printers & scanners**                                                                     |
| Jobs stuck **Pending**                             | Printer **Status** must be **Active** (not **Pending Approval** or **Disabled**) and this app **Connected**. Pending jobs wait until the client is online; they are not sent to the browser print dialog                          |
| **Waiting for admin approval** never clears        | On **Printers**, row menu **Approve**. The desktop app refreshes pending printers about every 30 seconds                                                                                                                          |
| Sign-in never leaves **Waiting for Authorization** | Finish **Authorize Printer Client** in the browser tab that opened. If you closed it, **Cancel** and **Sign in with Browser** again. Expired sessions: **Authorization session expired**                                          |
| **No printers found**                              | The OS has no printers. Add one in system settings, then reopen **Add Printer**                                                                                                                                                   |

More: [Printer offline or not printing](/docs/knowledge-base/printer-offline-or-not-printing).

## Next

<CardGroup cols={2}>
  <Card title="Add a printer" icon="printer" href="/docs/how-to/add-a-printer">
    Web Printers list, rotation, and Print All.
  </Card>

  <Card title="Authorize the printer client" icon="shield-check" href="/docs/how-to/authorize-a-printer">
    Every Authorize Printer Client browser state.
  </Card>

  <Card title="Auto-print" icon="zap" href="/docs/how-to/auto-print">
    Print labels and documents when a shipment is sent.
  </Card>

  <Card title="Printer jobs" icon="list-todo" href="/docs/how-to/printer-jobs">
    Pending, processing, failed, and completed jobs — retry and delete.
  </Card>
</CardGroup>
