FlexpaFlexpa
Developer PortalGet a DemoTry it yourself

All docs

How a check-in works

    Try it

      Point your check-in page at the test wallet

        What the test wallet holds

          What it supports

            Next steps

              SMART Health Check-in

              SMART Health Check-in is an open protocol for pre-visit check-in. A provider's web page asks the patient's health app for what the visit needs, such as an insurance card, an allergy list, or a questionnaire, over the W3C Digital Credentials API. The patient approves each item in their app, and a signed, encrypted answer comes back to the same page.

              Flexpa runs a test wallet at test.wallet.flexpa.com that implements the protocol's Wallet/Responder role. Use it to build and test a check-in page against a wallet that behaves like a real one, without a phone or a production health app.

              The test wallet is experimental. It holds a fabricated sample patient and nothing else, and it does not connect to Flexpa API or to any real records. Do not send real patient data to it, and expect it to change without notice.

              The Flexpa test wallet's consent screen, showing a request from smart-health-checkin.org for an insurance card

              #How a check-in works

              Two roles take part:

              • The verifier is your page. It builds a check-in request that names items by id, wraps it in an ISO mdoc request, generates an encryption key for the session, and calls navigator.credentials.get().
              • The wallet, which the protocol calls the Wallet/Responder, is the patient's health app. It validates the request, shows the patient who is asking and what would be shared, and returns a response bound to your page's origin.

              The Flexpa test wallet is a web wallet: your page opens it in a browser tab and hands the request over postMessage. The bytes on the wire are the same ones a native wallet produces, so a check-in page tested against it works unchanged against a platform wallet.

              When a request arrives, the test wallet:

              1. Asks the patient to sign in if they have not on this browser. The sandbox stands in for identity verification with a Simulate IAL2 sign in button and keeps a session cookie on its origin until you sign out.
              2. Validates the mdoc DeviceRequest, the SMART request JSON, and the encryption key.
              3. Binds the session to your page's origin as the browser reports it. A response cannot be replayed to another origin.
              4. Verifies your optional readerAuth signature and tells the patient whether the certificate is trusted, valid but unknown, or invalid.
              5. Matches each selection.fhir item against its records by declared FHIR profile, profile family, and resource type, and renders each form.fhir questionnaire.
              6. Lets the patient switch off items or single records and answer forms.
              7. Builds a response with one status per item, signs it as an mdoc document, encrypts it to your key, and posts it back.

              #Try it

              The specification site's clinic demo is a complete verifier. Open it with the Flexpa test wallet selected, or paste the link:

              https://smart-health-checkin.org/client/demo/#wallets=https%3A%2F%2Ftest.wallet.flexpa.com%2Fwallets.json&wallet=flexpa
              
              1. Click Check in with Flexpa Health Wallet.
              2. The wallet opens in a tab. On a first visit it asks you to Simulate IAL2 sign in; after that it goes straight to the request until you sign out. It shows the requesting origin, the signature verdict, and each requested item with the records it would share. Toggle items or records, answer the PHQ-2, then click Share.
              3. The demo decrypts and verifies the response, reports You're checked in, and lists one status per item. Developer detail shows the verified artifacts.

              Add &scenario= to try the demo's other request templates: insurance-only, new-patient, phq2-dayof, allergy-review, or medlist-refresh. In Demo controls, turn on post to FHIR with the public HAPI server to see the response written as a FHIR transaction.

              #Point your check-in page at the test wallet

              The test wallet publishes a wallet registry at https://test.wallet.flexpa.com/wallets.json. With the specification's JavaScript client, list it as a web wallet and let the patient choose it:

              import { credentialGetterFor, requestCheckin, resolveResponders } from '@smart-health-checkin/client';
              
              const responders = await resolveResponders({
                platform: true,
                webWallets: 'https://test.wallet.flexpa.com/wallets.json',
                default: 'flexpa',
              });
              
              const flexpa = responders.find((responder) => responder.id === 'flexpa');
              
              const response = await requestCheckin(
                {
                  purpose: 'Before your visit',
                  items: [
                    {
                      id: 'coverage',
                      title: 'Insurance coverage',
                      content: { kind: 'selection.fhir', profilesFrom: ['http://hl7.org/fhir/us/carin-bb'] },
                      accept: ['application/smart-health-card', 'application/fhir+json'],
                    },
                  ],
                },
                { getCredential: credentialGetterFor(flexpa) },
              );
              

              Or open the wallet directly:

              import { createWebWalletCredentialGetter, requestCheckin } from '@smart-health-checkin/client';
              
              const response = await requestCheckin(myRequest, {
                getCredential: createWebWalletCredentialGetter({ walletUrl: 'https://test.wallet.flexpa.com/wallet.html' }),
              });
              

              Call requestCheckin from a click handler. The wallet tab is a popup, and browsers require a user gesture to open one. The client library decrypts the response, checks both signatures, and cross-validates it against your request before it returns.

              #What the test wallet holds

              The sample patient is fabricated. Every FHIR resource declares the profiles it conforms to, which is the evidence selection.fhir matching prefers.

              RecordsDetails
              PatientUS Core Patient
              CoverageCARIN Blue Button and CARIN Digital Insurance Card Coverage, with the payer Organization
              Insurance cardA SMART Health Card carrying the Patient, Coverage, and Organization, signed by a test issuer
              AllergiesThree US Core AllergyIntolerance records, one deliberately sparse
              ConditionsTwo US Core problem-list Conditions
              MedicationsTwo US Core MedicationRequests
              ImmunizationsTwo US Core Immunizations
              ObservationsBlood pressure, body weight, and a hemoglobin A1c lab result

              The wallet's home page lists these records and lets you add other test records: paste or upload FHIR R4 JSON, a .smart-health-card file, or a bare SMART Health Card JWS, or fetch a Bundle from a FHIR endpoint such as Flexpa API in test mode. Records stay in your browser's storage.

              #What it supports

              AreaSupport
              Selectorsselection.fhir with profiles (including versioned canonicals), profilesFrom, and resourceTypes; form.fhir with an inline Questionnaire or a canonical the wallet knows, such as the PHQ-2 (https://fhir.loinc.org/Questionnaire/55757-9)
              Media typesapplication/fhir+json (FHIR 4.0.1) and application/smart-health-card
              Statusesfulfilled, partial, unavailable, declined, and unsupported, one per item
              FulfillmentOne artifact can answer several items; an item can return a card and FHIR together
              Reader authenticationVerified and classified; the trust list is empty, so a valid signature shows as valid, untrusted
              KeysFresh issuer and device keys for every response, so responses are not linkable across verifiers

              Limits to know about:

              • It is a web wallet only. A phone's built-in wallet picker will not offer it, and a kiosk flow's hand-off page must list it in its own registry.
              • It holds FHIR 4.0.1 records. A request that accepts only other FHIR releases gets unsupported.
              • Questionnaire item types it cannot render, such as attachments, come back unsupported with the reason.

              #Next steps

              • Read the SMART Health Check-in specification and the JavaScript client guide.
              • Share a digital insurance card from Flexpa API with SMART Health Links.
              • Building a check-in flow with real patient records? Talk to our team.
              Status TwitterGitHub

              © 2026 Flexpa. All rights reserved.

              FHIR® is the registered trademark of Health Level Seven International and its use does not constitute endorsement by HL7.

              On this page
              • How a check-in works
              • Try it
              • Point your check-in page at the test wallet
              • What the test wallet holds
              • What it supports
              • Next steps