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

# Update passes

> Change a saved pass and notify the holder.

Updating a pass changes it on every phone that has it. The holder keeps the same pass and doesn't have to add it again.

## Change field values

Send only the fields that change to [`PATCH /v1/passes/{id}`](/api-reference/passes/update). Fields you leave out keep their values.

```bash theme={null}
curl -X PATCH https://api.tapace.lk/v1/passes/pass_7hGk2LmQ9xVt4RnB8cYe \
  -H "Authorization: Bearer $TAPACE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{ "fieldValues": { "points": 150, "tier": "Gold" } }'
```

* Use the field **keys** from the template, the same ones you send when issuing.
* Send `null` or an empty string to clear an optional field. A required field can only be cleared if the template gives it a default value.
* Only per-pass fields can be updated. Shared fields change when you edit the template.

## Notify the holder

By default an update is **silent**: the pass changes without an alert. Set `notificationMode` to `notify` to show a notification on the holder's lock screen:

```json theme={null}
{
  "fieldValues": { "points": 150 },
  "notificationMode": "notify"
}
```

<Note>
  Google Wallet allows 3 notifications per pass in 24 hours. Beyond that, the pass still updates but no alert is shown.
</Note>

## Delivery status

The response contains the updated `pass` and an `update` object. `update.delivery` reports how the change reached each wallet:

| Status | Meaning |
| - | - |
| `pending` | The update is being sent. |
| `delivered` | The wallet received the update. |
| `not_installed` | No wallet has saved the pass yet. It will show the new values when it's added. |
| `skipped` | The pass isn't issued for this wallet. |
| `failed` | The update couldn't be sent. `error` explains why. |
| `superseded` | A newer update replaced this one before it was sent. |

## Void a pass

To end a pass, such as a cancelled membership or a refunded ticket, [void it](/api-reference/passes/void). Voiding is permanent: the pass is marked as voided in the holder's wallet and can't be updated again.


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