---
title: "Complete a TOTP MFA login challenge"
method: POST
path: "/auth/mfa/totp/complete"
tags: ["Auth"]
---

# Complete a TOTP MFA login challenge

`POST /auth/mfa/totp/complete`

Consumes exactly one pending TOTP MFA challenge using either a six-digit TOTP code or a recovery code. Consumes a pending MFA challenge atomically, rate-limits invalid attempts, re-checks active tenant membership before session issuance, and returns no-store session tokens only after verification.

## Headers

- `X-Steward-Request-Timestamp` string
- `X-Steward-Request-Expires-At` string
- `X-Steward-Signature` string
- `X-Steward-Signing-Key-Id` string
- `Idempotency-Key` string

## Request body

- union
  - object
    - `challengeId` string, required
    - `code` string, required
    - `recoveryCode` string
  - object
    - `challengeId` string, required
    - `code` string
    - `recoveryCode` string, required

## Response `200`

JSON response

- object
  - `ok` true, required
  - `token` string, required
  - `refreshToken` string, required
  - `expiresIn` integer, required
  - `user` object

## Other responses

- `400` — JSON response
- `401` — JSON response
- `403` — JSON response
- `404` — JSON response
- `408` — JSON response
- `409` — JSON response
- `429` — JSON response

## Changes

- **2026-08-17** `261a7c8070b2` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/steward-fi/apis/steward-api/changes/auth/mfa/totp/complete/post.md)

---

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