---
title: "POST /turnkey/signin"
method: POST
path: "/turnkey/signin"
---

# POST /turnkey/signin

`POST /turnkey/signin`

## Request body

- SignInRequest — Request interface for user sign-in operations
  - `signinMethod` 'email' | 'social' | 'passkey', required
  - `userEmail` string — User's email address (required for EMAIL signin method)
  - `targetPublicKey` string — Target public key for authentication (required for EMAIL and SOCIAL signin methods)
  - `provider` string — OAuth provider name (required for SOCIAL signin method)
  - `oidcToken` string — OIDC token from OAuth provider (required for SOCIAL signin method)
  - `challenge` string — Challenge string for passkey authentication (required for PASSKEY signin method)
  - `attestation` object — Attestation object for passkey authentication (required for PASSKEY signin method)
    - `transports` string[], required
    - `attestationObject` string, required
    - `clientDataJson` string, required
    - `credentialId` string, required
  - `magicLink` string — Optional magic link template URL for email authentication

## Response `200`

Ok

- TurnkeyAuthResponse
  - `dydxAddress` string
  - `organizationId` string
  - `apiKeyId` string
  - `userId` string
  - `session` string
  - `salt` string, required
  - `alreadyExists` boolean

## Changes

- **2025-09-24** `7f65fc981925` — 1 info
  - added the optional property `alreadyExists` to the response with the `200` status
- **2025-09-08** `d736ea1a1ffb` — 1 info
  - endpoint added
- **2024-05-14** `90fd32395633` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/dydxprotocol/apis/indexer-api/changes/turnkey/signin/post.md)

---

[API](https://skmtc.dev/dydxprotocol/apis/indexer-api.md) · [All operations](https://skmtc.dev/dydxprotocol/apis/indexer-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/dydxprotocol/indexer-api/revisions/5005547cef75/schema)
