# Passlet > Passlet documentation — issue, distribute, update, and redeem Apple Wallet and Google Wallet passes. ## Docs - [Errors](https://docs.passlet.io/api-reference/errors.md): The error envelope, common error codes, and how to use correlation IDs. - [API overview](https://docs.passlet.io/api-reference/overview.md): Base URL, authentication, scopes, and conventions for the Passlet public REST API. - [Pagination & filtering](https://docs.passlet.io/api-reference/pagination-and-filtering.md): The one grammar every Passlet list endpoint follows — cursors, filters, time windows, and stats. - [Create a pass](https://docs.passlet.io/api-reference/passes/create-a-pass.md): Creates a wallet pass from a template and returns it with hosted add-to-wallet links. Issuance is asynchronous: the pass is returned in `QUEUED` status (`201`) and a background worker signs and issues it. Creation is idempotent on `externalPassId` — reusing one returns the existing pass with `200` i… - [Create passes in batch](https://docs.passlet.io/api-reference/passes/create-passes-in-batch.md): Creates up to 100 passes in one call. The call returns `200` even when individual passes fail — check each `results[]` entry for its `success` flag and error. Every pass follows the same rules as single create, including `externalPassId` idempotency. - [Get a pass](https://docs.passlet.io/api-reference/passes/get-a-pass.md): Fetches a single pass. `hostedLinks` contains fresh add-to-wallet URLs while the pass is in an installable status, and `null` links otherwise (e.g. voided or failed). - [List passes](https://docs.passlet.io/api-reference/passes/list-passes.md): Lists passes, newest first by default, with cursor pagination. Filter by status, project, template, stored variables (`variable=key:value`, repeatable), scanner validity (`validOn`), or redemption state (`redeemed`, optionally scoped to one scan context with `redeemedContext`). - [Revoke hosted pass links](https://docs.passlet.io/api-reference/passes/revoke-hosted-pass-links.md): Invalidates all currently active hosted add-to-wallet links for the pass — e.g. after a distribution link reached the wrong recipient. Wallet passes already installed on devices are unaffected (void the pass for that). Fetching the pass again returns freshly generated links. - [Void a pass](https://docs.passlet.io/api-reference/passes/void-a-pass.md): Permanently voids a pass so it can no longer be scanned, and queues an update to wallet passes already installed on devices. The optional `reason` is forwarded to `pass.voided` webhook payloads. Voiding an already-voided pass returns `409` (`PASS_ALREADY_VOIDED`). - [Void passes in batch](https://docs.passlet.io/api-reference/passes/void-passes-in-batch.md): Voids up to 100 passes in one call. The call returns `200` even when individual passes fail — check each `results[]` entry for its `success` flag and error. The optional `reason` applies to every pass in the batch. - [Create a project](https://docs.passlet.io/api-reference/projects/create-a-project.md): Creates a project — an organizational grouping for templates and their passes. `color` defaults to `gray`. - [Delete a project](https://docs.passlet.io/api-reference/projects/delete-a-project.md): Deletes a project. Its templates, passes, and scans are kept and become uncategorised (`projectId: null`) — nothing inside the project is deleted. - [Get a project](https://docs.passlet.io/api-reference/projects/get-a-project.md): Fetches a single project. - [Get project statistics](https://docs.passlet.io/api-reference/projects/get-project-statistics.md): Returns aggregate counts for the project: templates, total passes, live passes (currently `ISSUED` or `ISSUING`), and passes installed in Google Wallet. - [List projects](https://docs.passlet.io/api-reference/projects/list-projects.md): Lists all projects with the number of templates in each. - [Update a project](https://docs.passlet.io/api-reference/projects/update-a-project.md): Partially updates the name, description, or color. At least one field must be provided (`400` otherwise). - [Get a scan](https://docs.passlet.io/api-reference/scans/get-a-scan.md): Fetches a single recorded scan. - [List scans](https://docs.passlet.io/api-reference/scans/list-scans.md): Lists recorded scans, newest first, with cursor pagination. Filter by pass, project, template, result, scan context, or time window. - [Record a scan](https://docs.passlet.io/api-reference/scans/record-a-scan.md): Validates a pass and records the scan attempt. Identify the pass by `qrPayload` (the scanned QR content) or `passId`. The outcome is returned as `result` (`accepted`, `duplicate`, `unknown`, `ambiguous`, `denied` or `reversal`) plus a machine-readable `reasonCode`; non-accepted attempts are recorded… - [Record scans in bulk](https://docs.passlet.io/api-reference/scans/record-scans-in-bulk.md): Checks in many passes at once from an operator selection. Each pass is validated and recorded independently through the single-scan pipeline (its own redemption gates), so a denied or already-redeemed pass never blocks the rest. Always returns `200` with a per-pass `results[]` (`accepted` / `duplica… - [Reverse a scan](https://docs.passlet.io/api-reference/scans/reverse-a-scan.md): Undoes an accepted scan (e.g. an accidental duplicate scan) by recording a linked `reversal` scan — the original is kept for audit and the pass counts as not redeemed again. Returns both records; `404` when the scan does not exist or was already reversed. - [Scan statistics](https://docs.passlet.io/api-reference/scans/scan-statistics.md): Aggregated counts for a scope in one call: issued passes valid in the scope (`totalPasses`), how many are redeemed — have an unreversed accepted scan (`redeemed`) — and how many do not (`open`), plus scan totals, denied totals and the latest scan time. Scope with `projectId`/`templateId`, one `scanC… - [Stream scans in real time (SSE)](https://docs.passlet.io/api-reference/scans/stream-scans-in-real-time-sse.md): Server-sent events (`text/event-stream`) stream of scans as they are recorded. Emits a `connected` event on open, then one `scan` event per recorded scan, with comment heartbeats every 25 seconds to keep the connection alive. The optional filters narrow the stream; reversal events are always deliver… - [Get a template version](https://docs.passlet.io/api-reference/template-versions/get-a-template-version.md): Fetches a single template version — useful for resolving the `templateVersionId` a pass was issued from. - [List template versions](https://docs.passlet.io/api-reference/template-versions/list-template-versions.md): Lists all versions of a template, newest first. Returns `404` (`TEMPLATE_NOT_FOUND`) when the template does not exist, and an empty array when it exists but has no versions yet. - [Get the published template version](https://docs.passlet.io/api-reference/templates/get-the-published-template-version.md): Returns the template’s currently published version — the version new passes are issued from. A template has at most one published version; `404` when nothing is published yet. - [Get the template variables schema](https://docs.passlet.io/api-reference/templates/get-the-template-variables-schema.md): Returns a JSON Schema describing the variables the template’s published version expects — one labelled string property per variable, with required variables listed. Use it to build dynamic input forms or validate `variables` before creating passes; the Power Automate connector uses it to render the… - [List templates](https://docs.passlet.io/api-reference/templates/list-templates.md): Lists the organization’s pass templates. Filter by `projectId` (a project UUID, or the string `"null"` for templates not in any project). - [Create a trigger subscription (Power Automate)](https://docs.passlet.io/api-reference/webhooks/create-a-trigger-subscription-power-automate.md): Webhook subscription endpoint implementing the Microsoft Power Platform connector contract; the Passlet Power Automate connector calls it when a flow using a Passlet trigger is turned on. Responds `201` with a `Location` header identifying the subscription, which Power Automate later calls with `DEL… - [Create a webhook endpoint](https://docs.passlet.io/api-reference/webhooks/create-a-webhook-endpoint.md): Registers an HTTPS URL to receive event notifications. The response includes the HMAC `secret` (used to verify the `X-Passlet-Signature` header on deliveries) and the `simpleToken` sent as `X-Webhook-Token` — both are shown only once, at creation time. - [Delete a trigger subscription (Power Automate)](https://docs.passlet.io/api-reference/webhooks/delete-a-trigger-subscription-power-automate.md): Removes a webhook subscription created by `POST /v1/webhooks/triggers/{eventType}`. Power Automate calls this automatically — via the URL from the subscription response’s `Location` header — when a flow is turned off or deleted. Webhook endpoints created via `POST /v1/webhooks/endpoints` are not vis… - [Delete a webhook endpoint](https://docs.passlet.io/api-reference/webhooks/delete-a-webhook-endpoint.md): Deletes a webhook endpoint and stops future deliveries to it. Endpoints managed by the Power Automate connector cannot be deleted here (`409`) — remove the trigger in Power Automate instead. - [Get a webhook endpoint](https://docs.passlet.io/api-reference/webhooks/get-a-webhook-endpoint.md): Fetches a single webhook endpoint. Secrets are never included; they are only returned once when the endpoint is created. - [List webhook deliveries](https://docs.passlet.io/api-reference/webhooks/list-webhook-deliveries.md): Lists delivery attempts, most recent first, with the last response code and error for each. Filter by `endpointId`, `status`, or `eventType` to debug a failing receiver. - [List webhook endpoints](https://docs.passlet.io/api-reference/webhooks/list-webhook-endpoints.md): Lists all webhook endpoints registered for the organization. - [Redeliver a webhook](https://docs.passlet.io/api-reference/webhooks/redeliver-a-webhook.md): Queues a new delivery attempt for a failed delivery, reusing the original event payload. Set `force: true` to redeliver regardless of the current delivery status; pass an `idempotencyKey` to make retries of this call safe. - [Send a test event](https://docs.passlet.io/api-reference/webhooks/send-a-test-event.md): Queues a one-off `webhook.test` delivery to the endpoint — regardless of its event subscriptions — so you can verify your receiver end to end, including signature validation. Rate limited per organization. - [Update a webhook endpoint](https://docs.passlet.io/api-reference/webhooks/update-a-webhook-endpoint.md): Partially updates the URL, subscribed events, enabled flag, or description. Endpoints managed by the Power Automate connector cannot be modified here (`409`). - [Access tokens](https://docs.passlet.io/developers/access-tokens.md): Create scoped API keys, rotate them safely, and get warned before they expire. - [Webhooks](https://docs.passlet.io/developers/webhooks.md): Receive signed pass lifecycle events, verify signatures, and track every delivery. - [Core concepts](https://docs.passlet.io/getting-started/concepts.md): The Passlet vocabulary — what workspaces, templates, passes, projects, and scanners are and how they fit together. - [Quickstart](https://docs.passlet.io/getting-started/quickstart.md): Create a workspace, design your first template, and put a pass in a wallet. - [Account & security](https://docs.passlet.io/guides/account-security.md): Profile, passkeys, two-factor authentication, passwords, sessions, and notifications. - [Billing & plans](https://docs.passlet.io/guides/billing.md): Plans, issued-pass metering, usage, and invoices. - [Distributing passes](https://docs.passlet.io/guides/distributing-passes.md): Deliver passes to holders with add-to-wallet links, and manage lost or leaked links. - [Issuing passes](https://docs.passlet.io/guides/issuing-passes.md): Create passes one at a time, in bulk from CSV, or via the API — and understand pass statuses. - [Projects](https://docs.passlet.io/guides/projects.md): Group templates and passes by campaign, business line, or customer. - [Redemption & scanning](https://docs.passlet.io/guides/redemption-and-scanning.md): Control when and how often passes can be redeemed, connect scanner devices, and work with scan history. - [Team & roles](https://docs.passlet.io/guides/team-and-roles.md): Invite members, assign owner/member/viewer roles, and understand what each role can do. - [Templates](https://docs.passlet.io/guides/templates.md): Design reusable passes for Apple Wallet and Google Wallet — fields, variables, versions, and publishing. - [Updating passes](https://docs.passlet.io/guides/updating-passes.md): Change pass data, upgrade to new template versions, and read the revision timeline. - [Workspace settings](https://docs.passlet.io/guides/workspace-settings.md): General settings, workspace identity, API slug, security policy, and the activity log. - [Welcome to Passlet](https://docs.passlet.io/index.md): Issue, distribute, update, and redeem Apple Wallet and Google Wallet passes — from a dashboard or an API. ## OpenAPI Specs - [openapi](https://docs.passlet.io/api-reference/openapi.json)