---
title: "Login with TOTP"
method: POST
path: "/auth/login/mfa/totp"
tags: ["Auth"]
---

# Login with TOTP

`POST /auth/login/mfa/totp`

Complete login by verifying TOTP code during multi-factor authentication. Requires the MFA ticket from initial login attempt.

## Request body

- MfaTotpRequest
  - `code` string, required — The TOTP code from the authenticator app
  - `ticket` string, required — The MFA ticket from the login response

## Response `200`

Success

- AuthTokenWithUserIdResponse
  - `token` string, required — Authentication token for API requests
  - `user_id` string, snowflake, required
  - `user` UserPartialResponse, required
    - `id` string, snowflake, required
    - `username` string, required — The username of the user, not unique across the platform
    - `discriminator` string, required — The four-digit discriminator tag of the user
    - `global_name` string, nullable, required — The display name of the user, if set
    - `avatar` string, nullable, required — The hash of the user avatar image
    - `avatar_color` integer, required
    - `bot` boolean — Whether the user is a bot account
    - `system` boolean — Whether the user is an official system user
    - `flags` integer, required — The public flags on the user account
    - `mention_flags` 0 | 1 | 2 — Reply mention preference

## Other responses

- `400` — Bad Request - The request was malformed or contained invalid data
- `429` — Too Many Requests - You are being rate limited
- `500` — Internal Server Error - An unexpected error occurred

## Changes

> 11 revisions in range; 1 not diffed.

- **2026-09-06** `a52a2cf49d9b` — 16 warning, 100 info
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `400`
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `500`
  - added the new `PHONE_COUNTRY_NOT_SUPPORTED` enum value to the `code` response property for the response status `400`
  - added the new `PHONE_COUNTRY_NOT_SUPPORTED` enum value to the `code` response property for the response status `500`
  - …112 more
  - …this revision’s changelog is incomplete
- **2026-09-05** `4dbb738a3e22` — 2 info
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `400`
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `500`
- **2026-09-03** `fa36b1b48ca5` — 10 info
  - removed the `INVALID_PACK_TYPE` enum value from the `code` response property for the response status `400`
  - removed the `INVALID_PACK_TYPE` enum value from the `code` response property for the response status `500`
  - removed the `MAX_PACKS` enum value from the `code` response property for the response status `400`
  - removed the `MAX_PACKS` enum value from the `code` response property for the response status `500`
  - …6 more

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

---

[API](https://skmtc.dev/fluxer/apis/fluxer-api.md) · [All operations](https://skmtc.dev/fluxer/apis/fluxer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fluxer/apis/fluxer-api/revisions/ff422d03f58a?raw)
