Skip to main content
POST
/
public
/
v1
/
submit
/
email_auth

Authorizations

X-Stamp
string
required
Cryptographically signed (stamped) request to be passed in as a header. For more info, see here.

Body

type
enum<string>
required
Enum options: ACTIVITY_TYPE_EMAIL_AUTH_V2
timestampMs
string
required
Timestamp (in milliseconds) of the request, used to verify liveness of user requests.
organizationId
string
required
Unique identifier for a given Organization.
parameters
object
required

The parameters object containing the specific intent data for this activity.

Response

A successful response returns the following fields:
activity
object
required
The activity object containing type, intent, and result
curl --request POST \
  --url https://api.turnkey.com/public/v1/submit/email_auth \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header "X-Stamp: <string> (see Authorizations)" \
  --data '{
    "type": "ACTIVITY_TYPE_EMAIL_AUTH_V2",
    "timestampMs": "<string> (e.g. 1746736509954)",
    "organizationId": "<string> (Your Organization ID)",
    "parameters": {
        "email": "<string>",
        "targetPublicKey": "<string>",
        "apiKeyName": "<string>",
        "expirationSeconds": "<string>",
        "emailCustomization": {
            "appName": "<string>",
            "logoUrl": "<string>",
            "magicLinkTemplate": "<string>",
            "templateVariables": "<string>",
            "templateId": "<string>"
        },
        "invalidateExisting": "<boolean>",
        "sendFromEmailAddress": "<string>",
        "sendFromEmailSenderName": "<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().emailAuth({
  email: "<string> (Email of the authenticating user.)",
  targetPublicKey: "<string> (Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted.)",
  apiKeyName: "<string> (Optional human-readable name for an API Key. If none provided, default to Email Auth - <Timestamp>)",
  expirationSeconds: "<string> (Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.)",
  emailCustomization: { // emailCustomization field,
    appName: "<string> (The name of the application.)",
    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.)",
  },
  invalidateExisting: true // Invalidate all other previously generated Email Auth API keys,
  sendFromEmailAddress: "<string> (Optional custom email address from which to send the email)",
  sendFromEmailSenderName: "<string> (Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications')",
  replyToEmailAddress: "<string> (Optional custom email address to use as reply-to)"
});
{
  "activity": {
    "id": "<activity-id>",
    "status": "ACTIVITY_STATUS_COMPLETED",
    "type": "ACTIVITY_TYPE_EMAIL_AUTH_V2",
    "organizationId": "<organization-id>",
    "timestampMs": "<timestamp> (e.g. 1746736509954)",
    "result": {
      "activity": {
        "id": "<string>",
        "organizationId": "<string>",
        "status": "<string>",
        "type": "<string>",
        "intent": {
          "emailAuthIntentV2": {
            "email": "<string>",
            "targetPublicKey": "<string>",
            "apiKeyName": "<string>",
            "expirationSeconds": "<string>",
            "emailCustomization": {
              "appName": "<string>",
              "logoUrl": "<string>",
              "magicLinkTemplate": "<string>",
              "templateVariables": "<string>",
              "templateId": "<string>"
            },
            "invalidateExisting": "<boolean>",
            "sendFromEmailAddress": "<string>",
            "sendFromEmailSenderName": "<string>",
            "replyToEmailAddress": "<string>"
          }
        },
        "result": {
          "emailAuthResult": {
            "userId": "<string>",
            "apiKeyId": "<string>"
          }
        },
        "votes": "<array>",
        "fingerprint": "<string>",
        "canApprove": "<boolean>",
        "canReject": "<boolean>",
        "createdAt": "<string>",
        "updatedAt": "<string>"
      }
    }
  }
}