Endpoints hosted by Revolut that partners call to put passes into Revolut Wallet and keep them current.
- Create a pass:
POST /passesregisters a pass and returns its Revolutid. - Push a pass update:
PUT /passes/{id}replaces the pass with its latest state and fans it out to every holder.
You give each pass a partner_reference, which is your own key to match it in your system, and the
value Revolut uses when it calls the endpoints you host (see the companion Wallet Partner Callbacks API,
/docs/api/revolut-wallet-callbacks). Revolut assigns its own pass id, returned when you create a
pass; use that id to address the pass on PUT /passes/{id}.
Start with the Revolut Wallet guide and Get started to onboard your business.
Authentication
oauth2clientCredentialsOAuth 2.0 client credentials. Request a short-lived access token from the token endpoint
(authenticating with your onboarding credential: client_secret, private_key_jwt, or your
mTLS certificate) and send it as Authorization: Bearer <token>. The token carries the
passes.write scope. May be used on its own or together with mTLS.
Passes
Create passes and push updates into Revolut Wallet.
Create a pass
Create a pass in Revolut Wallet from its semantic content. Returns the Revolut-assigned pass
id.
Set partner_reference to your own key for the pass. Revolut uses it when it polls you for
updates. Use the returned id to push updates (PUT /passes/{id}). Re-using a
partner_reference that already exists returns 409.
See Create a pass for a step-by-step walkthrough.
Request
Response
Pass created.
curl -X POST "https://partner.wallet.revolut.com/passes" \
-H "Content-Type: application/json" \
-H "Revolut-Api-Version: string" \
-H "Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000" \
-H "Request-Id: string" \
-d '{
"partner_reference": "skyjet-2241-R7K92M",
"type": "boarding_pass",
"version": 1,
"template_id": "tmpl_skyjet_boarding",
"relevant_at": "2026-08-02T06:15:00.000Z",
"semantics": {
"passenger": {
"full_name": "Sarah Connor"
},
"flight": {
"flight_number": "2241",
"carrier_code": "SJ",
"departure_airport": {
"iata": "LTN",
"terminal": "1"
},
"arrival_airport": {
"iata": "OTP"
},
"scheduled_departure_at": "2026-08-02T06:15:00.000Z",
"scheduled_arrival_at": "2026-08-02T09:40:00.000Z"
},
"boarding": {
"gate": "B22",
"seat": "14C",
"boarding_at": "2026-08-02T05:30:00.000Z"
},
"booking": {
"pnr": "R7K92M"
}
}
}'Request body samples
{
"partner_reference": "skyjet-2241-R7K92M",
"type": "boarding_pass",
"version": 1,
"template_id": "tmpl_skyjet_boarding",
"relevant_at": "2026-08-02T06:15:00.000Z",
"semantics": {
"passenger": {
"full_name": "Sarah Connor"
},
"flight": {
"flight_number": "2241",
"carrier_code": "SJ",
"departure_airport": {
"iata": "LTN",
"terminal": "1"
},
"arrival_airport": {
"iata": "OTP"
},
"scheduled_departure_at": "2026-08-02T06:15:00.000Z",
"scheduled_arrival_at": "2026-08-02T09:40:00.000Z"
},
"boarding": {
"gate": "B22",
"seat": "14C",
"boarding_at": "2026-08-02T05:30:00.000Z"
},
"booking": {
"pnr": "R7K92M"
}
}
}Response body samples
{
"id": "3f9a1c2e-8b7d-4e6a-9f10-2c3b4d5e6f70",
"partner_reference": "skyjet-2241-R7K92M"
}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.
See Update a pass for push vs poll and implementation details.
Request
Response
Pass replaced.
curl -X PUT "https://partner.wallet.revolut.com/passes/string" \
-H "Content-Type: application/json" \
-H "Revolut-Api-Version: string" \
-H "Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000" \
-H "Request-Id: string" \
-d '{
"partner_reference": "skyjet-2241-R7K92M",
"type": "boarding_pass",
"version": 2,
"relevant_at": "2026-08-02T06:15:00.000Z",
"semantics": {
"passenger": {
"full_name": "Sarah Connor"
},
"flight": {
"flight_number": "2241",
"carrier_code": "SJ",
"departure_airport": {
"iata": "LTN"
},
"arrival_airport": {
"iata": "OTP"
},
"scheduled_departure_at": "2026-08-02T06:15:00.000Z",
"scheduled_arrival_at": "2026-08-02T09:40:00.000Z"
},
"boarding": {
"gate": "C14",
"seat": "14C"
},
"booking": {
"pnr": "R7K92M"
}
}
}'Request body samples
{
"partner_reference": "skyjet-2241-R7K92M",
"type": "boarding_pass",
"version": 2,
"relevant_at": "2026-08-02T06:15:00.000Z",
"semantics": {
"passenger": {
"full_name": "Sarah Connor"
},
"flight": {
"flight_number": "2241",
"carrier_code": "SJ",
"departure_airport": {
"iata": "LTN"
},
"arrival_airport": {
"iata": "OTP"
},
"scheduled_departure_at": "2026-08-02T06:15:00.000Z",
"scheduled_arrival_at": "2026-08-02T09:40:00.000Z"
},
"boarding": {
"gate": "C14",
"seat": "14C"
},
"booking": {
"pnr": "R7K92M"
}
}
}