The Start SIOP endpoint initiates the SIOP (Self-Issued OpenID Provider) flow and returns an OpenID connection string that can be encoded in a QR code or sent to a wallet application. This endpoint is typically used for cross-device authentication flows.
This endpoint is part of the API tag and can be reused by other applications to integrate credential verification into their authentication flows.
Session state identifier used to maintain state between the request and callback. This value must be unique for each authentication session.Example:274e7465-cc9d-4cad-b75f-190db927e56a
The identifier of the client/service that intends to start the authentication flow. Used to retrieve the scope and trust services for verification.Example:packet-delivery-portal
Returns the OpenID connection string that can be used to initiate the authentication flow. This string is typically encoded in a QR code for cross-device flows.
curl -X GET "https://verifier.example.com/api/v1/startsiop?state=274e7465-cc9d-4cad-b75f-190db927e56a&client_callback=https://my-portal.com/auth_callback&client_id=packet-delivery-portal"
If not specified in the client configuration, the default request mode is byReference, which means the authorization request details are passed by reference rather than by value.
State Parameter: Always use a cryptographically random, unique value for the state parameter. Reusing state values can lead to session fixation attacks.
HTTPS Only: In production, always use HTTPS to prevent interception of credentials
State Validation: The client must validate that the state in the callback matches the original request
Nonce Validation: The verifier validates the nonce in the authentication response
Callback URL: Ensure the client_callback URL is on an allowlist to prevent token theft
Other services can use this endpoint to integrate credential verification:
// Service A wants to verify a user's credentialsconst connectionString = await startSiopFlow({ state: generateUniqueState(), callback: 'https://service-a.com/auth/callback', clientId: 'service-a'});// Use connectionString for QR code or deeplink