Start passkey MFA enrollment
curl --request POST \
--url https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'privy-app-id: <privy-app-id>' \
--header 'privy-user-token: <privy-user-token>' \
--data '
{
"relying_party": "<string>"
}
'HttpResponse<String> response = Unirest.post("https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init")
.header("privy-app-id", "<privy-app-id>")
.header("privy-user-token", "<privy-user-token>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"relying_party\": \"<string>\"\n}")
.asString();const options = {
method: 'POST',
headers: {
'privy-app-id': '<privy-app-id>',
'privy-user-token': '<privy-user-token>',
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/json'
},
body: JSON.stringify({relying_party: '<string>'})
};
fetch('https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'relying_party' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json",
"privy-app-id: <privy-app-id>",
"privy-user-token: <privy-user-token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init"
payload := strings.NewReader("{\n \"relying_party\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("privy-app-id", "<privy-app-id>")
req.Header.Add("privy-user-token", "<privy-user-token>")
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"options": {
"rp": {
"name": "<string>",
"id": "<string>"
},
"user": {
"id": "<string>",
"name": "<string>",
"display_name": "<string>"
},
"challenge": "<string>",
"pub_key_cred_params": [
{
"alg": 123,
"type": "public-key"
}
],
"timeout": 123,
"exclude_credentials": [
{
"id": "<string>",
"type": "<string>",
"transports": [
"<string>"
]
}
],
"authenticator_selection": {
"authenticator_attachment": "<string>",
"require_resident_key": true,
"resident_key": "<string>",
"user_verification": "<string>"
},
"attestation": "<string>",
"extensions": {
"app_id": "<string>",
"cred_props": {
"rk": true
},
"hmac_create_secret": true
}
}
}Passkey
Start passkey MFA enrollment
Returns WebAuthn registration options for a new MFA passkey.
POST
/
v1
/
users
/
{user_id}
/
mfa
/
passkey
/
enrollment
/
init
Start passkey MFA enrollment
curl --request POST \
--url https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'privy-app-id: <privy-app-id>' \
--header 'privy-user-token: <privy-user-token>' \
--data '
{
"relying_party": "<string>"
}
'HttpResponse<String> response = Unirest.post("https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init")
.header("privy-app-id", "<privy-app-id>")
.header("privy-user-token", "<privy-user-token>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"relying_party\": \"<string>\"\n}")
.asString();const options = {
method: 'POST',
headers: {
'privy-app-id': '<privy-app-id>',
'privy-user-token': '<privy-user-token>',
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/json'
},
body: JSON.stringify({relying_party: '<string>'})
};
fetch('https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'relying_party' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json",
"privy-app-id: <privy-app-id>",
"privy-user-token: <privy-user-token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.privy.io/v1/users/{user_id}/mfa/passkey/enrollment/init"
payload := strings.NewReader("{\n \"relying_party\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("privy-app-id", "<privy-app-id>")
req.Header.Add("privy-user-token", "<privy-user-token>")
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"options": {
"rp": {
"name": "<string>",
"id": "<string>"
},
"user": {
"id": "<string>",
"name": "<string>",
"display_name": "<string>"
},
"challenge": "<string>",
"pub_key_cred_params": [
{
"alg": 123,
"type": "public-key"
}
],
"timeout": 123,
"exclude_credentials": [
{
"id": "<string>",
"type": "<string>",
"transports": [
"<string>"
]
}
],
"authenticator_selection": {
"authenticator_attachment": "<string>",
"require_resident_key": true,
"resident_key": "<string>",
"user_verification": "<string>"
},
"attestation": "<string>",
"extensions": {
"app_id": "<string>",
"cred_props": {
"rk": true
},
"hmac_create_secret": true
}
}
}Authorizations
Basic Auth header with your app ID as the username and your app secret as the password.
Headers
ID of your Privy app.
Access token or custom authentication JWT for the user the request acts on.
Minimum string length:
1MFA token from a completed MFA verification, required on MFA-protected requests for users with MFA enrolled.
Minimum string length:
1Path Parameters
Body
application/json
Starts a passkey MFA ceremony for the specified relying party origin.
Origin where the authenticator runs, such as https://app.example.com.
Response
200 - application/json
WebAuthn registration options.
WebAuthn registration options for the started passkey MFA enrollment.
WebAuthn registration options as defined by the Web Authentication specification.
Show child attributes
Show child attributes
Was this page helpful?

