Download OpenAPI specification:Download
Loyalty API for merchants and CXP partners to push loyalty program data to the Vipps MobilePay benefits tab.
This is a write-only, event-based API. All updates are sent as typed events
to a single endpoint. Each event has an action field that determines the
payload schema.
All requests must include:
Authorization: Bearer <token> (access token from Vipps Access Token API standard authentication)Merchant-Serial-Number header identifying the merchantOcp-Apim-Subscription-Key header with a valid API subscription keyVipps-System-Name, Vipps-System-Version, Vipps-System-Plugin-Name, Vipps-System-Plugin-VersionEvery request is an event with:
eventId — unique identifier for the eventtimestamp — when the event happened (RFC 3339 / ISO 8601 date-time)action — what happened (determines payload schema)payload.contactId — merchant member identifier for the customer-club memberpayload.phoneNumber — member phone number in E.164 formatpayload — action-specific dataActions are grouped into per-product-type families so the surface
scales as new product types (e.g. deals) are added later. See
event-taxonomy.md for the design rationale.
| Action | Description |
|---|---|
benefits.member.registered |
New member joined the loyalty program |
benefits.member.updated |
Member data replaced (full member state) |
benefits.member.deleted |
Member left the loyalty program |
benefits.coupon.updated |
A coupon was created or changed |
benefits.coupon.deleted |
A coupon was removed |
benefits.coupons.synced |
Full replacement of all coupons for a member |
benefits.stampCard.updated |
A stamp card was created or progressed |
benefits.stampCard.deleted |
A stamp card was removed |
benefits.stampCards.synced |
Full replacement of all stamp cards for a member |
benefits.bonusCheck.created |
A bonus check/voucher was assigned |
benefits.bonusCheck.deleted |
A bonus check/voucher was removed |
Single endpoint for all loyalty program updates. The action field
determines which payload schema is expected.
Events are processed asynchronously. A 200 response means the event
was accepted and will be processed.
| Vipps-System-Name required | string <= 30 characters Example: acme-benefits-platform Name of the integrating system |
| Vipps-System-Version required | string <= 30 characters Example: 3.1.2 Version of the integrating system |
| Vipps-System-Plugin-Name required | string <= 30 characters Example: acme-benefits-connector Name of plugin/module for the integration |
| Vipps-System-Plugin-Version required | string <= 30 characters Example: 1.0.0 Version of plugin/module for the integration |
| eventId required | string Unique identifier for this event |
| timestamp required | string <date-time> Timestamp for when the event occurred |
| action required | string |
required | object (MemberRegisteredPayload) |
{- "eventId": "evt-8a49f7b9-89cb-4e59-9db0-7f2f66a0a151",
- "timestamp": "2025-01-15T10:00:00Z",
- "action": "benefits.member.registered",
- "payload": {
- "contactId": "c1b0dcc3-9878-4079-92aa-f3c00cada3ea",
- "phoneNumber": "+4712345678",
- "joinedOn": "2024-01-15T10:00:00Z",
- "bonusPoints": {
- "balance": 0
}, - "communicationPreferences": {
- "acceptsEmail": true,
- "acceptsSms": true,
- "acceptsPostal": false
}
}
}{- "status": "accepted",
- "eventId": "d6703cc8-9e79-415d-ac03-a4dc7f6ab43c"
}