Local sign-in (deployments without Firebase)
const url = 'http://localhost:8000/api/auth/login/';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"email":"coach@club.ru","password":"…"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:8000/api/auth/login/ \ --header 'Content-Type: application/json' \ --data '{ "email": "coach@club.ru", "password": "…" }'Email + password sign-in for deployments running LOCAL auth (#818 — e.g. the RU/Кинемика build, where accounts are provisioned by the administrator; there is no self-signup). Returns a Bearer JWT to send on every subsequent request.
404 on deployments that use Firebase sign-in (this route is not part of their surface). 401 invalid_credentials on any credential failure — one generic detail, no user enumeration. Throttled (10/min).
Authorizations
Section titled “Authorizations”- None
Request Bodyrequired
Section titled “Request Bodyrequired”Request body for POST /api/auth/login/ (#818 local auth).
object
Account email, as provisioned by the administrator.
Password issued by the administrator.
Examples
Sign in
{ "email": "coach@club.ru", "password": "…"}Request body for POST /api/auth/login/ (#818 local auth).
object
Account email, as provisioned by the administrator.
Password issued by the administrator.
Examplegenerated
email=hello%40example.com&password=exampleRequest body for POST /api/auth/login/ (#818 local auth).
object
Account email, as provisioned by the administrator.
Password issued by the administrator.
Responses
Section titled “Responses”object
object
Examplegenerated
{ "token": "example", "expires_at": "2026-04-15T12:00:00Z", "admin": { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "email": "example", "display_name": "example" }}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examplegenerated
{ "detail": "example"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examplegenerated
{ "detail": "example"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examplegenerated
{ "detail": "example"}