enum<string>
required
Enum options:
ACTIVITY_TYPE_CREATE_USERS_V4string
required
Timestamp (in milliseconds) of the request, used to verify liveness of user requests.
string
required
Unique identifier for a given Organization.
object
required
The parameters object containing the specific intent data for this activity.
Show details
Show details
array
required
A list of Users.
Show item details
Show item details
array
required
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
array
required
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
object
required
attestation field
Show details
Show details
array
required
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
object
oidcClaims field
Show details
Show details
array
required
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
boolean
Enable to have your activity generate and return App Proofs, enabling verifiability.
object
required
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>"
}
}
}
}