First-time PIN setup and PIN changes use different response shapes.
- First-time setup (
pin_set: false): any call toview-tokenreturns422 PIN_NOT_SET. The response body includesdata.pin_setup_url— open that URL for PIN setup. You do not need to passenabled_views: ["pin"]; the API auto-selects the PIN-setup view. - PIN change (
pin_set: true): callview-tokenwithenabled_views: ["pin"]. You get200withdata.secure_view_url— open that for PIN change.
pin_set is informational, not a hard gate. Yativo tracks pin_set from the physical.card.pin.changed webhook — Gnosis Pay does not expose this value via their API. The flag may lag behind reality if the webhook was missed or the cardholder set their PIN through another path. Use it as a UI hint (e.g. show a “Set PIN” prompt) rather than blocking access server-side.How it works
First-time PIN setup (pin_set: false)
Call view-token (any enabled_views)
Call
POST /v1/yativo-card/{yativoCardId}/cards/{cardId}/view-token. You do not need to pass enabled_views: ["pin"] — the API detects that the PIN is not set and overrides the view automatically.You receive 422 PIN_NOT_SET with pin_setup_url
The API returns HTTP 422 with
error_code: "PIN_NOT_SET". The response body includes data.pin_setup_url — a short-lived URL pre-configured for PIN setup.Open pin_setup_url in an iframe or WebView
Pass
data.pin_setup_url to your frontend. The cardholder enters and confirms their 4-digit PIN directly in the hosted page. The PIN never leaves the iframe.PIN change (pin_set: true)
Call view-token with enabled_views: ["pin"]
Call
POST /v1/yativo-card/{yativoCardId}/cards/{cardId}/view-token with enabled_views: ["pin"].Step 1 — Request a PIN view token
The Yativo Card account ID (
yativo_card_id).The card ID to set the PIN for.
Pass
["pin"] to open the PIN-setting form. Pass ["data", "pin"] to show both card details and PIN (only works after PIN is already set).Optional brand customization —
accent_color, logo_url, background_color, etc. See Secure Card Display for all options.Step 2 — Embed the hosted PIN page
Passsecure_view_url as the src of an iframe. No SDK or client-side JavaScript required.
Theme customization
Pass atheme object in the view-token request to brand the hosted PIN page. All theme fields are optional.
accent_color, background_color, panel_color, text_color, muted_color, border_radius, font_family, logo_url. See Secure Card Display for the full reference.
Checking pin_set status
After the PIN is set, the Gnosis Pay physical.card.pin.changed webhook fires and Yativo updates pin_set: true on the card record. You can read this via:
- Card issuers —
GET /v1/card-issuer/customers/{customerId}→data.cards[n].pin_set - End users —
GET /v1/yativo-card/my-account→data.account.cards[n].pin_set - View-token response —
data.pin_setis returned on everyPOST .../view-tokencall
next_action field on the issuer customer record will read:
"Card is active — customer must set card PIN before in-store (PSE) payments will work"
until pin_set becomes true.
Notes
| Detail | Value |
|---|---|
| PIN input | Cardholder types directly into the hosted iframe — PIN never reaches your server |
| PIN format | 4 digits (0000–9999) |
| Initial set & change | Same enabled_views: ["pin"] view handles both |
| Confirmation | physical.card.pin.changed webhook → pin_set: true in DB |
pin_set reliability | Informational — sourced from webhook only, not Gnosis API |
| Issuer theme | Pass theme in the view-token request — applies to the hosted PIN page |
| Online vs chip PIN | PSE updates the online PIN. The chip PIN syncs automatically on first ATM use |
| Works for | Virtual and physical cards |

