---
title: "Обменять одноразовую ссылку на сессию"
method: POST
path: "/api/v1/developer/sessions"
tags: ["Developer account"]
---

# Обменять одноразовую ссылку на сессию

`POST /api/v1/developer/sessions`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/developer/sessions`
- Auth: none required

Единственная операция контракта, возвращающая токен сессии разработчика, и возвращает она его ровно один раз: в хранилище лежит хеш, показать значение второй раз нечем. Заголовок Idempotency-Key эта группа не читает ни одной операцией — повтор ответа, несущего секрет, и был бы вторым его показом.

Переход по ЛЮБОЙ ссылке — подтверждения или входа — подтверждает адрес: обе уезжают в один ящик и доказывают ровно одно.

Причина отказа наружу одна на три случая: ссылки не было, ссылка истекла, ссылкой уже ходили. Различить их снаружи значит рассказать предъявителю, попал ли он в живой аккаунт; в журнале платформы они различаются.

## Request body

- DeveloperSessionInput
  - `code` string, required: Одноразовый секрет из письма; действует минуты и предъявляется один раз

## Response `201`

Токен сессии, его срок и аккаунт

- DeveloperSession
  - `token` string, required: Значение сессии; показывается ровно один раз, в хранилище лежит только хеш
  - `expires_in` integer, required: Секунды до истечения сессии
  - `account` DeveloperAccount, required
    - `id` string, uuid, required
    - `email` string, required: Единственный идентификатор человека в этом контуре; кабинета и роли у аккаунта нет вовсе
    - `display_name` string, required: Имя, которым разработчик подписывается; повторная регистрация его не переписывает
    - `status` 'pending' | 'active' | 'suspended' | 'revoked', required: pending — адрес назван, но по ссылке не ходили; active — владение ящиком доказано; suspended — вход закрыт платформой, возвращается; revoked — отозван навсегда
    - `email_confirmed_at` string, date-time
    - `last_sign_in_at` string, date-time
    - `suspended_at` string, date-time
    - `suspend_reason` string, required
    - `revoked_at` string, date-time
    - `revoke_reason` string, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Ссылка недействительна или уже использована — причина не уточняется
- `403`: Аккаунт приостановлен или отозван платформой
- `429`: Окно частоты по клиенту исчерпано

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/3c60ded179f2?raw)
