Integration points
Map what your mobile app owns, what the MATTR Pi Holder SDK owns, and what your MATTR VII tenant owns across claiming, holding, and presenting, and find the guide for each connection.
Embedding credential holding in a mobile app is mostly a question of boundaries. Some things belong to your app, some to the MATTR Pi Holder SDK, some to the operating system, and some to your MATTR VII tenant. This page maps those boundaries and names the objects that join them.
The Holding overview describes the four layers involved. This page goes one level down, to the specific connections you have to create and maintain.
The integration boundary
Four things join the layers together.
- The Holder Application record on your MATTR VII tenant. You create one per platform target, identified by the bundle identifier on iOS or the package signing certificate thumbprint on Android. A React Native app targets both platforms, so it needs two.
- The platform configuration you pass at SDK initialization. This enables the SDK Backend. It is optional today, and MATTR expects to make it required in an upcoming release, so treat it as part of the integration rather than something to add later.
- The URI scheme or deep link registered in your app manifest. Configured in your app, not the SDK. It is how credential offers and presentation requests reach your app.
- Device secure storage, biometrics, and passcode. The operating system owns these. The SDK uses them, and you set the policy.
Integration points at a glance
| Integration point | Who owns each side | MATTR surface | Guide |
|---|---|---|---|
| SDK distribution and access | MATTR grants package access, you consume it in your build | Holder SDKs for iOS, Android, and React Native | Get started with the Holder SDK |
| SDK Backend registration | You create the record, the SDK calls it automatically | Holder Applications API | SDK Backend |
| URI scheme and deep links | Your app manifest and the operating system | SDK claiming and presentation entry points | Claiming URI schemes, Remote URI schemes |
| Digital Credentials API registration | You enable the capability in your app, the SDK registers your app and its credentials with the operating system | Holder SDK DC API support | DC API |
| Wallet attestation and app signing | Your Holder backend tenant signs attestations under a root CA you share, the issuer's tenant checks them. The two tenants can belong to the same organization or to different ones | Holder Root CA Certificates API, plus Wallet Attestation Signers API for unmanaged roots | Wallet attestation, Android app signing |
| Trusted issuer source | You choose the source, the SDK enforces it | SDK trusted issuer configuration, optionally a VICAL | Trusted issuers, VICAL consumption |
| Trusted verifier source | You choose the source, the SDK reports the outcome | SDK verifier authentication, optionally a RICAL | Verifier authentication in person, Verifier authentication remote |
| Device key and user authentication policy | The operating system owns the key, you set the policy | SDK device key authentication | Device key authentication |
| Revocation status checking | The SDK fetches the published list, you decide what to show | SDK status check | Revocation status check |
| Logging and activity records | The SDK records on the device, you decide what to do with it | SDK logging, activity log | SDK logging, Activity log |
Claiming a credential
Claiming is where your app touches the most external systems, and where the boundary is easiest to get wrong.
- The offer arrives from outside your app. It comes as a deep link or a scanned QR code, so the handling belongs to your app manifest and the operating system before the SDK sees it. See Claiming URI scheme handling.
- Authentication may not be yours. In the Authorization Code flow, your app opens a browser session against an identity provider the issuer controls. You host the session, but you do not control what happens inside it. In the Pre-authorized Code flow that step does not exist. See the claiming overview and the claiming journey patterns.
- The issuer may require your app to prove itself. If it does, wallet attestation becomes a hard dependency, and it needs the SDK Backend configured. See Wallet attestation.
- You decide which issuers to accept. The SDK enforces the list you give it. See Trusted issuers.
- Storage is handled for you. The SDK stores credentials and keys in device secure storage. You set the authentication policy over them. See Device key authentication.
Presenting in person
In-person presentations run offline.
- Permissions belong to your app. Bluetooth and NFC permissions go in your app manifest, with the usage strings your app store listing requires. See NFC engagement.
- Device engagement is a user interface problem. Displaying a QR code or presenting for an NFC tap is your screen, driven by the SDK. See In-person presentation.
- Trust material has to be pre-loaded. Because there is no network at presentation time, every trusted verifier certificate must already be on the device. Decide the refresh cadence during integration, not after launch. See Verifier authentication.
- Consent is your screen. The SDK reports what is being requested. You decide what the holder sees and how they approve it.
Presenting remotely
Which remote journeys you support is a user experience decision first. Each journey then has its own entry paths into your app, and which ones you support is an integration decision.
- Same-device. The holder reaches the verifier on the same device that holds their credentials. The request arrives through a redirect or deep link handled by your registered URI scheme, or through the Digital Credentials API.
- Cross-device. The holder reaches the verifier on another device, such as a desktop browser, and scans a QR code with their phone. The scanned request arrives through your registered URI scheme, or through the Digital Credentials API.
For URI scheme entry, see Remote URI scheme handling. For the Digital Credentials API, the SDK registers your app as a credential provider, and registers the credentials it holds, with the operating system. The operating system then mediates the request. See DC API. For how each journey looks to the holder, see the remote presentation journey patterns.
Verifier authentication applies here too, and the trust source can be a RICAL published by an ecosystem operator. See Verifier authentication and RICAL consumption.
If you use MATTR GO Hold instead
MATTR GO Hold moves the boundary. MATTR owns the application and its SDK integration, and you own branding, configuration, the MATTR VII tenant behind it, and the app store publishing model. There is no mobile development, so the integration points reduce to tenant configuration, trust configuration, and distribution.
For a comparison of the two paths, see SDK or ready-made wallet.
Related integration points
- Issuance integration points for the issuer side of claiming.
- Verification integration points for the verifier side of presentation.
- Digital Trust Service integration points for where trusted issuer and trusted verifier lists come from.
- Platform management integration points for tenant provisioning, access control, and observability.
Next steps
- Set up your app from the Holder SDK overview.
- Run the Holder SDK quickstart.
- Compare MATTR VII, MATTR Pi, and MATTR GO in Platforms.
How would you rate this page?
Last updated on