Enum options:
ACTIVITY_TYPE_CREATE_USERS_V4Timestamp (in milliseconds) of the request, used to verify liveness of user requests.
Unique identifier for a given Organization.
The parameters object containing the specific intent data for this activity.
Show details
Show details
A list of Users.
Show item details
Show item details
A list of API Key parameters. This field, if not needed, should be an empty array in your request body.
Show item details
Show item details
A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body.
Show item details
Show item details
attestation field
Show details
Show details
A list of Oauth providers. This field, if not needed, should be an empty array in your request body.
Show item details
Show item details
oidcClaims field
Show details
Show details
A list of User Tag IDs. This field, if not needed, should be an empty array in your request body.
Show item details
Show item details
Array item type: string
item field
Enable to have your activity generate and return App Proofs, enabling verifiability.
The activity object containing type, intent, and result
Show activity details
Show activity details
curl --request POST \
--url https://api.turnkey.com/public/v1/submit/create_users \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header "X-Stamp: <string> (see Authorizations)" \
--data '{
"type": "ACTIVITY_TYPE_CREATE_USERS_V4",
"timestampMs": "<string> (e.g. 1746736509954)",
"organizationId": "<string> (Your Organization ID)",
"parameters": {
"users": [
{
"userName": "<string>",
"userEmail": "<string>",
"userPhoneNumber": "<string>",
"apiKeys": [
{
"apiKeyName": "<string>",
"publicKey": "<string>",
"curveType": "<API_KEY_CURVE_P256>",
"expirationSeconds": "<string>"
}
],
"authenticators": [
{
"authenticatorName": "<string>",
"challenge": "<string>",
"attestation": {
"credentialId": "<string>",
"clientDataJson": "<string>",
"attestationObject": "<string>",
"transports": [
"<AUTHENTICATOR_TRANSPORT_BLE>"
]
}
}
],
"oauthProviders": [
{
"providerName": "<string>",
"oidcToken": "<string>",
"oidcClaims": {
"iss": "<string>",
"sub": "<string>",
"aud": "<string>"
}
}
],
"userTags": [
"<string>"
]
}
]
}
}'
import { Turnkey } from "@turnkey/sdk-server";
const turnkeyClient = new Turnkey({
apiBaseUrl: "https://api.turnkey.com",
apiPublicKey: process.env.API_PUBLIC_KEY!,
apiPrivateKey: process.env.API_PRIVATE_KEY!,
defaultOrganizationId: process.env.ORGANIZATION_ID!,
});
const response = await turnkeyClient.apiClient().createUsers({
users: [{ // A list of Users.,
userName: "<string> (Human-readable name for a User.)",
userEmail: "<string> (The user's email address.)",
userPhoneNumber: "<string> (The user's phone number in E.164 format e.g. +13214567890)",
apiKeys: [{ // A list of API Key parameters. This field, if not needed, should be an empty array in your request body.,
apiKeyName: "<string> (Human-readable name for an API Key.)",
publicKey: "<string> (The public component of a cryptographic key pair used to sign messages and transactions.)",
curveType: "<API_KEY_CURVE_P256>" // curveType field,
expirationSeconds: "<string> (Optional window (in seconds) indicating how long the API Key should last.)",
}],
authenticators: [{ // A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body.,
authenticatorName: "<string> (Human-readable name for an Authenticator.)",
challenge: "<string> (Challenge presented for authentication purposes.)",
attestation: { // attestation field,
credentialId: "<string> (The cbor encoded then base64 url encoded id of the credential.)",
clientDataJson: "<string> (A base64 url encoded payload containing metadata about the signing context and the challenge.)",
attestationObject: "<string> (A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses.)",
transports: "<AUTHENTICATOR_TRANSPORT_BLE>" // The type of authenticator transports.,
},
}],
oauthProviders: [{ // A list of Oauth providers. This field, if not needed, should be an empty array in your request body.,
providerName: "<string> (Human-readable name to identify a Provider.)",
oidcToken: "<string> (Base64 encoded OIDC token)",
oidcClaims: { // oidcClaims field,
iss: "<string> (The issuer identifier from the OIDC token (iss claim))",
sub: "<string> (The subject identifier from the OIDC token (sub claim))",
aud: "<string> (The audience from the OIDC token (aud claim))",
},
}],
userTags: ["<string>"] // A list of User Tag IDs. This field, if not needed, should be an empty array in your request body.,
}]
});
{
"activity": {
"id": "<activity-id>",
"status": "ACTIVITY_STATUS_COMPLETED",
"type": "ACTIVITY_TYPE_CREATE_USERS_V4",
"organizationId": "<organization-id>",
"timestampMs": "<timestamp> (e.g. 1746736509954)",
"result": {
"activity": {
"id": "<string>",
"organizationId": "<string>",
"status": "<string>",
"type": "<string>",
"intent": {
"createUsersIntentV4": {
"users": [
{
"userName": "<string>",
"userEmail": "<string>",
"userPhoneNumber": "<string>",
"apiKeys": [
{
"apiKeyName": "<string>",
"publicKey": "<string>",
"curveType": "<API_KEY_CURVE_P256>",
"expirationSeconds": "<string>"
}
],
"authenticators": [
{
"authenticatorName": "<string>",
"challenge": "<string>",
"attestation": {
"credentialId": "<string>",
"clientDataJson": "<string>",
"attestationObject": "<string>",
"transports": [
"<AUTHENTICATOR_TRANSPORT_BLE>"
]
}
}
],
"oauthProviders": [
{
"providerName": "<string>",
"oidcToken": "<string>",
"oidcClaims": {
"iss": "<string>",
"sub": "<string>",
"aud": "<string>"
}
}
],
"userTags": [
"<string>"
]
}
]
}
},
"result": {
"createUsersResult": {
"userIds": [
"<string>"
]
}
},
"votes": "<array>",
"fingerprint": "<string>",
"canApprove": "<boolean>",
"canReject": "<boolean>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
}
}
}