---
title: "Start unified SCA login"
method: POST
path: "/user/login/start"
tags: ["Login"]
---

# Start unified SCA login

`POST /user/login/start`

Issues a server-side challenge for the chosen factor. With `sms` the response carries `challengeId` + `dateExpires` and an OTP is dispatched. With `passkey` the response carries the WebAuthn assertion request (`options`, `allowedOrigins`, `relyingPartyId`) for the browser. With `totp` the response is `{ ok: true }` — the user reads the code from their authenticator app.

## Request body

- object
  - `userId` string, required
  - `verificationMethod` 'sms' | 'totp' | 'passkey', required

## Response `200`

Factor-specific challenge. The populated fields depend on `verificationMethod`: `sms` returns `challengeId` + `dateExpires`; `passkey` returns `options` + `allowedOrigins` + `relyingPartyId`; `totp` returns `ok`.

- object
  - `ok` boolean — Present for `totp`.
  - `challengeId` string — Present for `sms`.
  - `dateExpires` string — Present for `sms`.
  - `options` object — Standard WebAuthn `PublicKeyCredentialRequestOptions`. Base64url-encoded binary fields are passed through to the browser without modification.
    - `challenge` string
    - `timeout` integer
    - `rpId` string
    - `allowCredentials` object[]
      - `type` string
      - `id` string
    - `userVerification` string
  - `allowedOrigins` string[] — Present for `passkey`.
  - `relyingPartyId` string — Present for `passkey`.

## Other responses

- `400` — Request was rejected. The `errorCode` field disambiguates.
- `401` — Invalid API key or HMAC signature.

---

[API](https://skmtc.net/striga/apis/striga-v1.md) · [All operations](https://skmtc.net/striga/apis/striga-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/striga/striga-v1/revisions/63e57aa7df45/schema)
