---
title: "Spaces Login"
method: POST
path: "/api/v1/quick-spaces/auth/login"
tags: ["quickSpaces", "quickSpaces"]
---

# Spaces Login

`POST /api/v1/quick-spaces/auth/login`

Exchange email + password (in the BODY) for a JWT.

One identical refusal for every failure, and a 429 with Retry-After once a failure budget is
spent. May return a JSONResponse instead of the declared model for that 429 — deliberate: the
monolith's shared exception handlers drop headers, and Retry-After is the point of the status.

## Request body

- SpacesLoginRequestDTO
  - `email` string, required
  - `password` string, required

## Response `200`

Successful Response

- SpacesAuthResponseDTO — The result of POST /auth/signup and POST /auth/login. `token` is a MONOLITH JWT (utils/JWTBearer verifies it with the shared config.JWT_SECRET), so it is returned in the response BODY and never in a URL, a query string or a redirect.
  - `token` string, required
  - `token_type` string
  - `expires_in` integer, required
  - `id` string, required
  - `email` string, required
  - `name` string, required
  - `login_method` string, required
  - `workspace_id` string
  - `role` string
  - `needs_invite` boolean

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/brandbooster/apis/fastapi.md) · [All operations](https://skmtc.dev/brandbooster/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/brandbooster/fastapi/revisions/ff7f2b621b41/schema)
