---
api: 'Revolut Wallet Partner API'
---

# Update a pass

Replace the stored pass with the latest version from your system. Send the **complete**
pass. This is a full replacement, not a partial update. Bump `version` on every change.

Address the pass by **either** the Revolut pass `id` (from the create response) **or** your
own `partner_reference` prefixed with `ref:`. Addressing by `partner_reference` is the only
option for passes created by auto-provisioning, where Revolut's `id` was never returned to
you. Bump `version` on every change to avoid overwriting a newer version.

:::info
See [Update a pass](https://developer.revolut.com/docs/guides/revolut-wallet/operations/update-pass) for push vs poll and implementation details.
:::

## Endpoint

PUT `/passes/{id}`

## Parameters

### header parameters

- `Revolut-Api-Version` (string, required)
  Dated API version. Currently `2026-07-01`. Sent on every request.
  :::note
  If you receive a version you do not implement, respond with `400`.
  :::

- `Idempotency-Key` (string, required)
  UUID scoped to your Partner ID. Replaying a request with the same key and body returns the
  original outcome; the same key with a different body returns `409`. Retained ≥ 7 days.

- `Request-Id` (string, optional)
  Your correlation id for this request. Revolut echoes it back in the response.

### path parameters

- `id` (string, required)
  The pass to update. Accepts **either**:
  - the Revolut pass id (UUID), e.g. `3f9a1c2e-8b7d-4e6a-9f10-2c3b4d5e6f70`; or
  - your `partner_reference`, prefixed with `ref:`, e.g. `ref:skyjet-2241-R7K92M`.
  
  Always use the `ref:` prefix when addressing by your own reference. A bare value is
  interpreted as the Revolut id.

## Request body

### Attributes

## Returns

### 204

Pass replaced.

## Error responses

| HTTP status code | Description |
| --- | --- |
| 400 | Malformed syntax or failed validation. |
| 401 | Missing or invalid credentials: no or failed OAuth token, an invalid JWS signature, or a missing/invalid client certificate. |
| 403 | Authenticated, but the credential lacks the required scope/permission (e.g. an OAuth token without `passes.write`). For OAuth, accompanied by `WWW-Authenticate: Bearer error="insufficient_scope"`. |
| 404 | No pass with this `id` exists under your Partner ID. A pass owned by another partner is also reported as `404`. Existence of passes you don't own is never disclosed. |
| 409 | The `id` already exists (on create), the pass `version` is stale, or an `Idempotency-Key` was reused with a different body. |
| 413 | The pass payload exceeds the size limit. |
| 422 | Well-formed, but the pass cannot be created/updated in its current state. |
| 429 | Rate limit exceeded. |
