---
title: "Finish Passkey Login"
method: POST
path: "/api/auth/passkey/login/finish"
tags: ["user"]
---

# Finish Passkey Login

`POST /api/auth/passkey/login/finish`

## Request

- Base URL: `https://api.git.mari.zip` (the document declares no server; this is the origin it was published from)
- URL: `https://api.git.mari.zip/api/auth/passkey/login/finish`
- Auth: none declared
- TypeScript: <https://skmtc.dev/mari/apis/gitarena/docs/api/auth/passkey/login/finish/post.ts> (a function with typed inputs; its response is checked against the schema)

## Request body

- LoginFinishRequest
  - `challenge_id` string, uuid, required
  - `credential` object, required

## Response `200`

Login successful

- MeResponse
  - `admin` boolean, required
  - `id` string, uuid, required
  - `username` string, required

## Other responses

- `400`: Invalid or expired challenge
- `401`: Authentication failed
- `403`: Account disabled
- `404`: Could not find user with the passkey
- `409`: Already logged in

## Changes

- **2026-10-29** `efaeb85ac1be`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/mari/apis/gitarena/changes/api/auth/passkey/login/finish/post.md)

---

[API](https://skmtc.dev/mari/apis/gitarena.md) - [All operations](https://skmtc.dev/mari/apis/gitarena/llms.txt) - [OpenAPI document](https://skmtc.dev/mari/apis/gitarena/revisions/437eec085d26?raw)
