Skip to main content
POST
/
sdk
/
{environmentId}
/
users
/
passkeys
/
register
Register a new passkey
curl --request POST \
  --url https://app.dynamicauth.com/api/v0/sdk/{environmentId}/users/passkeys/register \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "id": "An example name",
  "rawId": "An example name",
  "response": {
    "attestationObject": "An example name",
    "clientDataJson": "An example name",
    "transports": [],
    "publicKey": "An example name"
  },
  "clientExtensionResults": {
    "appid": true,
    "credProps": {},
    "hmacCreateSecret": true
  },
  "type": "public-key"
}
'
import requests

url = "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/users/passkeys/register"

payload = {
"id": "An example name",
"rawId": "An example name",
"response": {
"attestationObject": "An example name",
"clientDataJson": "An example name",
"transports": [],
"publicKey": "An example name"
},
"clientExtensionResults": {
"appid": True,
"credProps": {},
"hmacCreateSecret": True
},
"type": "public-key"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: 'An example name',
rawId: 'An example name',
response: {
attestationObject: 'An example name',
clientDataJson: 'An example name',
transports: [],
publicKey: 'An example name'
},
clientExtensionResults: {appid: true, credProps: {}, hmacCreateSecret: true},
type: 'public-key'
})
};

fetch('https://app.dynamicauth.com/api/v0/sdk/{environmentId}/users/passkeys/register', 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://app.dynamicauth.com/api/v0/sdk/{environmentId}/users/passkeys/register",
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([
'id' => 'An example name',
'rawId' => 'An example name',
'response' => [
'attestationObject' => 'An example name',
'clientDataJson' => 'An example name',
'transports' => [

],
'publicKey' => 'An example name'
],
'clientExtensionResults' => [
'appid' => true,
'credProps' => [

],
'hmacCreateSecret' => true
],
'type' => 'public-key'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$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://app.dynamicauth.com/api/v0/sdk/{environmentId}/users/passkeys/register"

payload := strings.NewReader("{\n \"id\": \"An example name\",\n \"rawId\": \"An example name\",\n \"response\": {\n \"attestationObject\": \"An example name\",\n \"clientDataJson\": \"An example name\",\n \"transports\": [],\n \"publicKey\": \"An example name\"\n },\n \"clientExtensionResults\": {\n \"appid\": true,\n \"credProps\": {},\n \"hmacCreateSecret\": true\n },\n \"type\": \"public-key\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
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))

}
HttpResponse<String> response = Unirest.post("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/users/passkeys/register")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"An example name\",\n \"rawId\": \"An example name\",\n \"response\": {\n \"attestationObject\": \"An example name\",\n \"clientDataJson\": \"An example name\",\n \"transports\": [],\n \"publicKey\": \"An example name\"\n },\n \"clientExtensionResults\": {\n \"appid\": true,\n \"credProps\": {},\n \"hmacCreateSecret\": true\n },\n \"type\": \"public-key\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/users/passkeys/register")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"An example name\",\n \"rawId\": \"An example name\",\n \"response\": {\n \"attestationObject\": \"An example name\",\n \"clientDataJson\": \"An example name\",\n \"transports\": [],\n \"publicKey\": \"An example name\"\n },\n \"clientExtensionResults\": {\n \"appid\": true,\n \"credProps\": {},\n \"hmacCreateSecret\": true\n },\n \"type\": \"public-key\"\n}"

response = http.request(request)
puts response.read_body
{
  "user": {
    "id": "95b11417-f18f-457f-8804-68e361f9164f",
    "projectEnvironmentId": "95b11417-f18f-457f-8804-68e361f9164f",
    "verifiedCredentials": [
      {
        "id": "95b11417-f18f-457f-8804-68e361f9164f",
        "signInEnabled": true,
        "address": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
        "chain": "<string>",
        "refId": "95b11417-f18f-457f-8804-68e361f9164f",
        "signerRefId": "95b11417-f18f-457f-8804-68e361f9164f",
        "email": "jsmith@example.com",
        "name_service": {
          "avatar": "<string>",
          "name": "<string>"
        },
        "public_identifier": "<string>",
        "wallet_name": "<string>",
        "wallet_properties": {
          "turnkeySubOrganizationId": "95b11417-f18f-457f-8804-68e361f9164f",
          "turnkeyPrivateKeyId": "95b11417-f18f-457f-8804-68e361f9164f",
          "turnkeyHDWalletId": "95b11417-f18f-457f-8804-68e361f9164f",
          "isAuthenticatorAttached": true,
          "turnkeyUserId": "95b11417-f18f-457f-8804-68e361f9164f",
          "isSessionKeyCompatible": true
        },
        "business_account_properties": {
          "businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
          "businessAccountCreatedAt": "2023-11-07T05:31:56Z",
          "businessAccountSignerId": "95b11417-f18f-457f-8804-68e361f9164f",
          "businessAccountName": "<string>",
          "businessAccountExternalRef": "<string>"
        },
        "oauth_username": "<string>",
        "oauth_display_name": "<string>",
        "oauth_account_id": "<string>",
        "phoneNumber": "9171113333",
        "phoneCountryCode": "1",
        "isoCountryCode": "US",
        "oauth_account_photos": [
          "<string>"
        ],
        "oauth_emails": [
          "<string>"
        ],
        "oauth_metadata": {},
        "previous_users": [
          "95b11417-f18f-457f-8804-68e361f9164f"
        ],
        "embedded_wallet_id": "<string>",
        "wallet_additional_addresses": [
          {
            "address": "<string>",
            "publicKey": "<string>"
          }
        ],
        "lastSelectedAt": "2023-11-07T05:31:56Z",
        "verifiedAt": "2023-11-07T05:31:56Z"
      }
    ],
    "lastVerifiedCredentialId": "95b11417-f18f-457f-8804-68e361f9164f",
    "sessionId": "95b11417-f18f-457f-8804-68e361f9164f",
    "alias": "An example name",
    "country": "US",
    "email": "jsmith@example.com",
    "firstName": "An example name",
    "jobTitle": "An example name",
    "lastName": "An example name",
    "phoneNumber": "<string>",
    "policiesConsent": true,
    "tShirtSize": "An example name",
    "team": "An example name",
    "username": "An example name",
    "firstVisit": "2023-11-07T05:31:56Z",
    "lastVisit": "2023-11-07T05:31:56Z",
    "newUser": true,
    "metadata": {},
    "btcWallet": "<string>",
    "kdaWallet": "<string>",
    "ltcWallet": "<string>",
    "ckbWallet": "<string>",
    "kasWallet": "<string>",
    "dogeWallet": "<string>",
    "emailNotification": true,
    "discordNotification": true,
    "newsletterNotification": true,
    "lists": [
      "<string>"
    ],
    "scope": "superuser marketing operations",
    "missingFields": [
      {
        "name": "<string>",
        "required": true,
        "enabled": true,
        "unique": true,
        "verify": true,
        "validationRules": {
          "unique": true,
          "regex": "^0x",
          "validOptions": [
            {
              "label": "small"
            },
            {
              "label": "medium"
            },
            {
              "label": "large"
            }
          ],
          "checkboxText": "Agree to the terms and conditions"
        },
        "label": "<string>",
        "position": 123
      }
    ]
  },
  "expiresAt": "1715620310",
  "mfaToken": "<string>",
  "jwt": "jwt_value",
  "minifiedJwt": "jwt_value",
  "elevatedAccessToken": "jwt_value"
}
{
"error": "<string>"
}
{
"error": "No jwt provided!"
}
{
"error": "Access Forbidden"
}
{
"error": "Resources already exists for this Object",
"payload": {
"email": "joe@email.com",
"embeddedWalletName": "<string>",
"mergeConflicts": {
"fromUser": {
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"projectEnvironmentId": "95b11417-f18f-457f-8804-68e361f9164f",
"verifiedCredentials": [
{
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"signInEnabled": true,
"address": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"chain": "<string>",
"refId": "95b11417-f18f-457f-8804-68e361f9164f",
"signerRefId": "95b11417-f18f-457f-8804-68e361f9164f",
"email": "jsmith@example.com",
"name_service": {
"avatar": "<string>",
"name": "<string>"
},
"public_identifier": "<string>",
"wallet_name": "<string>",
"wallet_properties": {
"turnkeySubOrganizationId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyPrivateKeyId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyHDWalletId": "95b11417-f18f-457f-8804-68e361f9164f",
"isAuthenticatorAttached": true,
"turnkeyUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"isSessionKeyCompatible": true
},
"business_account_properties": {
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountCreatedAt": "2023-11-07T05:31:56Z",
"businessAccountSignerId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountName": "<string>",
"businessAccountExternalRef": "<string>"
},
"oauth_username": "<string>",
"oauth_display_name": "<string>",
"oauth_account_id": "<string>",
"phoneNumber": "9171113333",
"phoneCountryCode": "1",
"isoCountryCode": "US",
"oauth_account_photos": [
"<string>"
],
"oauth_emails": [
"<string>"
],
"oauth_metadata": {},
"previous_users": [
"95b11417-f18f-457f-8804-68e361f9164f"
],
"embedded_wallet_id": "<string>",
"wallet_additional_addresses": [
{
"address": "<string>",
"publicKey": "<string>"
}
],
"lastSelectedAt": "2023-11-07T05:31:56Z",
"verifiedAt": "2023-11-07T05:31:56Z"
}
],
"lastVerifiedCredentialId": "95b11417-f18f-457f-8804-68e361f9164f",
"sessionId": "95b11417-f18f-457f-8804-68e361f9164f",
"alias": "An example name",
"country": "US",
"email": "jsmith@example.com",
"firstName": "An example name",
"jobTitle": "An example name",
"lastName": "An example name",
"phoneNumber": "<string>",
"policiesConsent": true,
"tShirtSize": "An example name",
"team": "An example name",
"username": "An example name",
"firstVisit": "2023-11-07T05:31:56Z",
"lastVisit": "2023-11-07T05:31:56Z",
"newUser": true,
"metadata": {},
"btcWallet": "<string>",
"kdaWallet": "<string>",
"ltcWallet": "<string>",
"ckbWallet": "<string>",
"kasWallet": "<string>",
"dogeWallet": "<string>",
"emailNotification": true,
"discordNotification": true,
"newsletterNotification": true,
"lists": [
"<string>"
],
"scope": "superuser marketing operations",
"missingFields": [
{
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"label": "<string>",
"position": 123
}
]
},
"conflicts": [
{
"field": {
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"label": "<string>",
"position": 123
},
"fromUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
},
"currentUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
}
}
]
},
"additionalMessages": [
"<string>"
]
}
}
{
"error": "Internal Server Error"
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

environmentId
string
required

ID of the environment

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

Body

application/json

passkey registration data

id
string
required
Pattern: ^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'|]+(?<=\S)$
Example:

"An example name"

rawId
string
required
Pattern: ^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'|]+(?<=\S)$
Example:

"An example name"

response
object
required
clientExtensionResults
object
required
type
enum<string>
required
Available options:
public-key
authenticatorAttachment
enum<string>
Available options:
cross-platform,
platform
createMfaToken
object

Response

returns verify response

user
object
required
expiresAt
number
required

Format is a unix-based timestamp. When set, this will be the expiration timestamp on the JWT sent using either the jwt field or a response httpOnly cookie set by the server.

Example:

"1715620310"

mfaToken
string

Token used to continue multi-factor authentication flow

jwt
string

Encoded JWT token. This will only be returned when cookie-based authentication is disabled in favor of standard Auth header based authentication.

Example:

"jwt_value"

minifiedJwt
string

Encoded JWT token. This will only be returned when cookie-based authentication is disabled in favor of standard Auth header based authentication.

Example:

"jwt_value"

elevatedAccessToken
string

Encoded JWT token for elevated access. This will only be returned when requestedScopes are requested.

Example:

"jwt_value"

Last modified on January 28, 2026