RadioCheck Integration¶
RadioCheck connects to Last1 ID for identity linking, credentials, and trust events.
Required flow (G3): OAuth + PKCE¶
Use the LastVet public-client template. Never put a GoTrue session in a redirect hash.
- User taps Connect to Last1 ID in RadioCheck Profile
- RadioCheck starts PKCE (
S256) and opens:
https://auth.last1.id/oauth/authorize
?response_type=code
&client_id=radiocheck
&redirect_uri=radiocheck://last1-id/callback
&scope=openid%20identity:read%20credentials:read%20app_links:read%20trust_events:write
&state={state}
&code_challenge={challenge}
&code_challenge_method=S256
- User signs in to Last1 ID (if needed) and grants consent
- Last1 ID redirects to the exact registered
redirect_uriwith?code=&state=only - RadioCheck exchanges
code+code_verifieratPOST /oauth/token - Store the scoped access/refresh tokens (Keychain). Identity is
id_token.sub
Use @last1id/sdk-react-native (beginPkceFlow + completePkceFlow) or copy LastVet iOS Last1IDAuthManager.
MATR iOS and MATR Biz are the same template with client_id=matr-ios / matr-b2b and their registered native redirect URIs.
Legacy bridge (dual-run until both partners cut over)¶
Old builds may still open /authorize?app=radiocheck&app_user_id={userId}&redirect_uri=....
That path still creates identity_app_links + consent_grants and redirects with identity_id, app_user_id, linked=1.
It does not attach access_token or refresh_token to the hash. After both partners ship PKCE, retire /authorize?app= and POST /api/identity/authorize/intent|complete.
Configuration¶
Last1 ID¶
Registered RadioCheck redirect URIs (exact match):
radiocheck://last1-id/callbackradiocheck://callback- HISTORICAL (deleted hosted):
https://tcthzakppndkykatoefx.supabase.co/functions/v1/last1-id-callback
RadioCheck¶
- Issuer:
https://auth.last1.id client_id:radiocheck(public client, PKCE required)- Set
EXPO_PUBLIC_LAST1_ID_URLfor local IdP if needed
After Linking¶
- Scoped OAuth access token for userinfo / credentials / trust events
RADIOCHECK_APP_SECRETremains for server-to-server ingest against an already-linked identity (G4 will shrink this; do not treat it as login)last1_identity_id/id_token.subis the identity id
See:
docs/OAUTH_OIDC_INTEGRATION.mddocs/PARTNER_ONBOARDING_CHECKLIST.mdpackages/sdk-react-native/README.md