Wallet Provisioning OTP

liveHow a step-up OTP for adding a card to Apple Pay or Google Pay flows from the scheme through Tribe to SetldPay and out to the cardholder by SMS or email.· 2026-06-07
0

Where This Fits

When a cardholder adds a SetldPay card to Apple Pay or Google Pay, the card scheme may require a one-time step-up to confirm the real cardholder is behind the request — the identity & verification (ID&VID&VIdentity & verification — the scheme's "yellow path" step-up that confirms the real cardholder is behind the request.) "yellow path". For these programs TribeTribeSetldPay's card issuer-processor. Here it generates the OTP and validates it when entered. hands that step to us: it sends a holderAuthenticationholderAuthenticationThe Tribe TAI notification carrying the OTP, the channel, and the wallet — the trigger for this flow. message carrying a one-time code (OTPOTPOne-time passcode — the short code the cardholder types into the wallet to pass ID&V.), and SetldPay delivers that code to the cardholder by SMS or email. This page traces the whole path; the build lives on the Wallet Provisioning OTP Delivery design page.

It is a side-branch off normal push provisioningPush provisioningAdding a card to a device wallet (Apple / Google Pay), which creates a device-bound token. — the happy path needs no cardholder prompt. The step-up OTP only fires when the scheme demands ID&V during tokenizationTokenizationThe scheme replacing the card number with a device token (DPAN) — the step that can require ID&V.:

1

The OTP Flow — End to End

The code originates at Tribe and travels outward to the cardholder, who enters it to finish verification. Read the lanes left to right and time top to bottom — SetldPay's lane only ever receives the request and sends the OTP; it is never on the validation path.

Step by step

  1. 1
    Cardholderadd card to wallet

    Taps Add in Apple or Google Pay.

  2. 2
    Wallettokenize

    Asks the scheme to create a device token for the card.

  3. 3
    Scheme TSPstep-up ID&V requiredyellow path

    Needs holder verification and asks Tribe.

  4. 4
    TribeholderAuthentication

    Generates the OTP and sends it to SetldPay in the notification.

  5. 5
    SetldPaygetHolder · render copy

    Looks up the cardholder contact (getHolder) and renders the message.

  6. 6
    SetldPaydeliver OTP

    Sends the code by SMS or email.

  7. 7
    Cardholderenter code

    Types the code into the wallet.

  8. 8
    Walletrelay via scheme

    Relays the code back through the scheme to Tribe.

  9. 9
    Tribevalidate · activate token

    Validates the code and activates the device token.

  10. 10
    TribeholderAuthenticationNotification

    Reports the outcome (Y/N/E/L/C) to SetldPay for logging.

2

The Trigger — holderAuthentication

Tribe delivers the trigger as a holderAuthentication TAI notification on the encrypted notify endpoint. The code is already in the payload — validationValue — and a single field, authenticationMethod, says which channel to use.

Message essentials

FieldWhat it carries
validationValue The OTP itself — generated by Tribe (1–8 chars)
authenticationMethod Channel: 3 = SMS, 4 = email (1 / 2 out of scope)
requestor 2 = tokenization (wallet provisioning); 1 = 3DS
walletProviderId 3 = Apple Pay, 1 = Google Pay, 2 = Samsung
requestExpiresAt Unix expiry — the real OTP validity window
holderId, cardId Keys for the Tribe getHolder contact lookup
additionalData.maskedPan / maskedPhone Display only — not a delivery target

What we act on

authenticationMethod — only 3 and 4 are delivery cases
IDauthenticationMethodHandling
1 OTP (generic) Ignored — out of scope
2 Background authentication Ignored — not a delivery case
3 OTP via SMS Deliver by SMS
4 OTP via email Deliver by email

Example payload

json
{
  "requestType": ["holderAuthentication"],
  "holderAuthentication": {
    "authRequestId": 16147738970184,
    "holderId": 3731163,
    "authenticationMethod": 4,
    "requestor": 2,
    "validationValue": "718294",
    "requestExpiresAt": 1612789119,
    "cardId": 1354301,
    "cardProgramId": 44,
    "walletProviderId": 3,
    "additionalData": {
      "maskedPan": "XXXXXXXXXXXX0013",
      "maskedPhone": "XXXXXXX22"
    }
  }
}

Method 4 (email) for an Apple Pay tokenization (requestor 2, walletProviderId 3). maskedPan / maskedPhone are display-only — the real contact comes from Tribe's getHolder.

3

The SetldPay Step — Receive, Resolve, Deliver

Inside SetldPay the work splits in two: ingest acknowledges Tribe in milliseconds, then a background worker does the slower delivery — so a slow SMS or email provider can never threaten the webhook response.

events-ingest Receive & verify

Decrypt the payload (AES‑256 + RSA x-sign) and check integrity (x-hook-signature). Persist the notification, then acknowledge Tribe — no provider call on this path.

queue Enqueue

Hand the job to the queue. The ack is already returned, so external-provider latency is fully decoupled from Tribe's request.

worker · getHolder Resolve contact

Call Tribe getHolder(holderId, cardId) for the real phone and email; backfill language from the program default.

worker Select channel

authenticationMethod 3 → SMS, 4 → email. The wallet name (Apple / Google) comes from walletProviderId.

worker Render copy

Apply the Apple Pay Issuer Functional Requirements: the OTP is the first number in the SMS; emails carry the Wallet / Apple Pay imagery and an issuer "from" address. Expiry is computed from requestExpiresAt.

send Deliver

Send via the SMS provider or email, and record the delivery attempt. The cardholder receives the code.

4

Completing Verification

Delivery is the end of SetldPay's request leg. As the lower half of the sequence above shows, the cardholder enters the code in the wallet; it relays back through the schemeScheme TSPThe scheme's Token Service Provider — Mastercard MDES or Visa VTS — which issues and manages tokens. to Tribe, which validates it — that is why we never need to. The token then activates and the card goes live in the wallet.

Tribe reports the outcome to us with a separate holderAuthenticationNotification. We log it for observability (correlating a delivery to its result) but take no action on it.

confirmationStatus on the outcome notification
StatusMeaning
Y Verified
N Not verified
E Expired
L Limit reached
C Cancelled
5

Who Owns What

The OTP lifecycle is split deliberately. Reading the boundary as "SetldPay delivers, Tribe owns the code" keeps the design honest — it is why there is no OTP store, validation endpoint, or callback on our side.

PartyResponsibility
Apple / Google Pay Wallet UX, the ID&V step-up prompt, and code entry
Scheme TSP (MDES / VTS) Tokenization and routing between the wallet and Tribe
Tribe Generates the OTP, validates it on entry, sends holderAuthentication
SetldPay Delivers the OTP by SMS or email — and nothing else
Cardholder Receives the code and enters it in the wallet