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

# Updating a pass

> One call from your backend; Stell fans out to every device

When points, tiers, or offers change in your systems, one API call updates the pass everywhere it lives.

```mermaid theme={null}
sequenceDiagram
    autonumber
    participant B as Your backend
    participant S as Stell
    participant A as Apple Wallet
    participant G as Google Wallet
    B->>S: PATCH /v1/passes/{passId}
    S-->>B: 200
    S--)A: Silent push, device fetches the refreshed pass
    S--)G: Wallet object updated directly
```

**One call updates everything.** [Update pass](/api-reference/passes/update-pass) with the new `loyaltyState` (`pointsBalance`, `currentTierId`, `stampsCollected`, voucher fields), or `membershipStatus`, or both, returns `200`. Stell handles delivery to both platforms.

**Voided and expired passes reject updates.** A pass in either state returns `409` with a `CONFLICT` code — see [Errors](/api-reference/errors). There's no wallet to sync the update to.

**Notify when it matters.** Include an optional `notificationMessage` to surface a lock-screen notification with the update. Use it for tier upgrades and rewards, not every point change. You can also configure standing change messages on the [pass template](/pass-templates/anatomy), self-service in the portal.

**No pass `id` stored? No problem.** Look it up first with [List passes](/api-reference/passes/list-passes) filtered by `programId` and `externalId`.

**Display is wallet-controlled.** Apple Wallet and Google Wallet decide the final notification presentation and may coalesce rapid updates. Don't rely on one visible notification per call.
