APIs to manage cross-device flow for WebAuthn registration and authentication.
WebAuthn Cross-Device
Request
Starts a WebAuthn registration process on a secondary device, and returns a challenge for the client to sign. If successful, the response will contain a credential_creation_options field that should be passed in the WebAuthn navigator.credentials.create() API call.
Note: Some fields (user.id and challenge) in the credential_creation_options object are base64 encoded and must first be decoded and converted to an array buffer. It is recommended to use the webauthn-json library that handles this.
- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/start
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/start
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/start
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/start
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/start
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X POST \
https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/start \
-H 'Content-Type: application/json' \
-d '{
"cross_device_ticket_id": "string"
}'{ "webauthn_session_id": "string", "credential_creation_options": { "attestation": "none", "authenticatorSelection": { … }, "extensions": { … }, "excludeCredentials": [ … ], "pubKeyCredParams": [ … ], "timeout": 0, "challenge": "string", "user": { … }, "rp": { … } } }
Request
Initializes a flow that will register WebAuthn credentials using a secondary device. Requested by the access device (e.g., desktop) and requires a logged-in user. Returns cross_device_ticket_id, which should be passed to the biometric device to start the device registration, such as by encoding it in a QR code.
Account name for this Relying Party. This is used both for display purposes, as well as during recovery flows where the user is asked for the account name.
- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/init
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/init
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/init
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/init
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/init
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X POST \
https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register/init \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"username": "string",
"limit_single_credential_to_device": false
}'{ "cross_device_ticket_id": "string" }
Request
Initializes a flow that will register WebAuthn credentials using a secondary device. Requested by the access device (e.g., desktop) for a user that isn't logged in via Transmit (e.g., after password login via an external identity provider). Returns cross_device_ticket_id, which should be passed to the biometric device to start the device registration, such as by encoding it in a QR code.
Required permissions: apps:execute, [appId]:execute, auth:execute.
A unique identifier in the tenant, which corresponds to an identifier of the user in your system.
- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/external/register/init
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/external/register/init
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/external/register/init
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/external/register/init
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/external/register/init
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X POST \
https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/external/register/init \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"external_user_id": "string",
"username": "string"
}'{ "cross_device_ticket_id": "string" }
Request
Completes WebAuthn credential registration for the user on a secondary device. For a logged-in registration flow, the user is derived from the access token. For a logged-out registration flow, the user corresponds to the requested external user ID. If no user is found, a new user will be created.
Required permissions: apps:execute, [appId]:execute, auth:execute.
WebAuthn attestation data returned by the browser upon credential creation, which must be converted from array buffer to a base64 string. If webauthn-json create() was used, this is already taken care of.
- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X POST \
https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/register \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"webauthn_encoded_result": "string"
}'{ "webauthn_session_id": "string", "user_id": "string", "webauthn_username": "string", "credential_id": "string", "authenticator_attachment": "platform", "aaguid": "string", "external_user_id": "string", "is_user_created": true }
- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/abort
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/abort
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/abort
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/abort
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/abort
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X POST \
https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/abort \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"cross_device_ticket_id": "string"
}'- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/status
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/status
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/status
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/status
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/status
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X GET \
'https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/status?cross_device_ticket_id=string'{ "status": "pending", "session_id": "string" }
- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/attach-device
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/attach-device
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/attach-device
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/attach-device
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/attach-device
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X POST \
https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/attach-device \
-H 'Content-Type: application/json' \
-d '{
"cross_device_ticket_id": "string"
}'Flat object that contains the data that your customer should approve for a transaction signing or custom approval flow. It can contain up to 10 keys, and only alphanumeric characters, underscores, hyphens, and periods. It will be returned as a claim in the ID token upon successful authentication.
{ "status": "pending", "started_at": "string", "approval_data": { "transaction_id": "eFII2y40uB9hQ98nXt3tc1IHkRt8GrRZiqZuRn_59wT", "sum": "200" } }
Request
Initializes a flow that will authenticate WebAuthn credentials using a secondary device. Requested by the access device (e.g., desktop) before delegating authentication to another device. Returns a cross-device ticket ID that should be passed to the biometric device to start the authentication (e.g., by encoding it in a QR code).
Name of user account, as used in the WebAuthn registration. If not provided, the authentication will start without the context of a user and it will be inferred by the chosen passkey
Flat object that contains the data that your customer should approve for a transaction signing or custom approval flow. It can contain up to 10 keys, and only alphanumeric characters, underscores, hyphens, and periods. It will be returned as a claim in the ID token upon successful authentication.
- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/init
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/init
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/init
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/init
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/init
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X POST \
https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/init \
-H 'Content-Type: application/json' \
-d '{
"client_id": "string",
"username": "string",
"approval_data": {
"transaction_id": "eFII2y40uB9hQ98nXt3tc1IHkRt8GrRZiqZuRn_59wT",
"sum": "200"
}
}'{ "cross_device_ticket_id": "string" }
Request
Start a WebAuthn authentication process using a secondary device. If successful, the response will contain a credential_request_options field that should be passed in the WebAuthn navigator.credentials.get() API call.
Note: Some fields (challenge and each id in the allowCredentials list) in the credential_request_options object are base64 encoded and must first be decoded and converted to array buffer. It is recommended to use the webauthn-json library that handles this.
- Sandbox environmenthttps://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/start
- Production environment (US)https://api.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/start
- Production environment (EU)https://api.eu.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/start
- Production environment (CA)https://api.ca.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/start
- Production environment (AU)https://api.au.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/start
- cURL
- Node.js
- Go
- JavaScript
- Java
- Python
curl -i -X POST \
https://api.sbx.transmitsecurity.io/cis/v1/auth/webauthn/cross-device/authenticate/start \
-H 'Content-Type: application/json' \
-d '{
"cross_device_ticket_id": "string"
}'Key type. Should always be public-key
Represents the natural WebAuthn challenge. Will Only be present in approval flows
Relying Party ID. Must be a valid domain pre-configured in the Admin Portal for the application
{ "webauthn_session_id": "string", "credential_request_options": { "allowCredentials": [ … ], "rawChallenge": "string", "challenge": "string", "timeout": 0, "rpId": "string", "attestation": "none", "userVerification": "preferred", "extensions": {} } }