Enum options:
ACTIVITY_TYPE_INIT_OTP_V3Timestamp (in milliseconds) of the request, used to verify liveness of user requests.
Unique identifier for a given Organization.
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/init_otp \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header "X-Stamp: <string> (see Authorizations)" \
--data '{
"type": "ACTIVITY_TYPE_INIT_OTP_V3",
"timestampMs": "<string> (e.g. 1746736509954)",
"organizationId": "<string> (Your Organization ID)",
"parameters": {
"otpType": "<string>",
"contact": "<string>",
"appName": "<string>",
"otpLength": "<number>",
"emailCustomization": {
"logoUrl": "<string>",
"magicLinkTemplate": "<string>",
"templateVariables": "<string>",
"templateId": "<string>"
},
"smsCustomization": {
"template": "<string>"
},
"userIdentifier": "<string>",
"sendFromEmailAddress": "<string>",
"alphanumeric": "<boolean>",
"sendFromEmailSenderName": "<string>",
"expirationSeconds": "<string>",
"replyToEmailAddress": "<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().initOtp({
otpType: "<string> (Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL)",
contact: "<string> (Email or phone number to send the OTP code to)",
appName: "<string> (The name of the application.)",
otpLength: 0 // Optional length of the OTP code. Default = 9,
emailCustomization: { // emailCustomization field,
logoUrl: "<string> (A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px.)",
magicLinkTemplate: "<string> (A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`.)",
templateVariables: "<string> (JSON object containing key/value pairs to be used with custom templates.)",
templateId: "<string> (Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template.)",
},
smsCustomization: { // smsCustomization field,
template: "<string> (Template containing references to .OtpCode i.e Your OTP is {{.OtpCode}})",
},
userIdentifier: "<string> (Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address.)",
sendFromEmailAddress: "<string> (Optional custom email address from which to send the OTP email)",
alphanumeric: true // Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). If set to false, OTP code will only be numeric. Default = true,
sendFromEmailSenderName: "<string> (Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications')",
expirationSeconds: "<string> (Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes))",
replyToEmailAddress: "<string> (Optional custom email address to use as reply-to)"
});
{
"activity": {
"id": "<activity-id>",
"status": "ACTIVITY_STATUS_COMPLETED",
"type": "ACTIVITY_TYPE_INIT_OTP_V3",
"organizationId": "<organization-id>",
"timestampMs": "<timestamp> (e.g. 1746736509954)",
"result": {
"activity": {
"id": "<string>",
"organizationId": "<string>",
"status": "<string>",
"type": "<string>",
"intent": {
"initOtpIntentV3": {
"otpType": "<string>",
"contact": "<string>",
"appName": "<string>",
"otpLength": "<number>",
"emailCustomization": {
"logoUrl": "<string>",
"magicLinkTemplate": "<string>",
"templateVariables": "<string>",
"templateId": "<string>"
},
"smsCustomization": {
"template": "<string>"
},
"userIdentifier": "<string>",
"sendFromEmailAddress": "<string>",
"alphanumeric": "<boolean>",
"sendFromEmailSenderName": "<string>",
"expirationSeconds": "<string>",
"replyToEmailAddress": "<string>"
}
},
"result": {
"initOtpResultV2": {
"otpId": "<string>",
"otpEncryptionTargetBundle": "<string>"
}
},
"votes": "<array>",
"fingerprint": "<string>",
"canApprove": "<boolean>",
"canReject": "<boolean>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
}
}
}