Создание проекта и регистрация первого владельца
В Gigma нет отдельного API-метода «зарегистрировать владельца». Первый владелец создаётся внутри публичного запроса POST /api/projects одновременно с новым проектом.
Сам запрос возвращает только созданный проект. Учётная запись владельца и User Bearer в ответ не входят: для первого входа нужно отдельно запросить одноразовый пароль, выполнить POST /api/login и проверить пользователя через GET /api/user.
Маршруты, схемы запросов, авторизация и опубликованные HTTP-ответы сверены с OpenAPI-контрактом работающего API. Данные, которые сервер создаёт вместе с проектом, и поля
UserResourceсверены с кодомProjectController,UserServiceиUserResource.
Текущий api.json подтверждает Bearer-защиту и ответы GET /api/user, но схема UserResource в нём неполная. Поэтому поля проверки владельца в шаге 4 взяты из кода UserResource, который формирует фактический ответ API.
Результат
После завершения сценария у вас будут:
- идентификатор нового проекта из
item.id; - первая учётная запись
Userс рольюowner; - User Bearer владельца;
- подтверждённый доступ к
GET /api/user; - пустой проект, готовый к дальнейшей настройке.
Сохраните item.id из первого ответа. Методы входа и GET /api/user не возвращают идентификатор проекта.
Как устроена регистрация
Сервер выполняет действия в таком порядке:
- Проверяет
name,loginиmenu_id. - Создаёт
Project. - Добавляет стандартные роли и отделы проекта.
- Создаёт пользователя с переданным email и ролью
owner. - Привязывает владельцу пункты выбранного меню, пользовательские интеграции и доступные права.
- Отправляет приветственное письмо.
- Возвращает проект через
DictionaryResource.
Приветственное письмо не содержит User Bearer и не заменяет запрос одноразового пароля.
Новый проект создаётся без бизнеса, Application, каталога, складов, витрин, домена и демо-данных.
Перед началом
Подготовьте:
- название проекта;
- новый email владельца;
- существующий
menu_idдля административного меню.
Email проверяется на уникальность во всей таблице пользователей, а не только внутри одного проекта. Один и тот же login нельзя повторно использовать для создания владельца другого проекта.
Публичного метода для получения списка административных меню до регистрации нет. Значение menu_id должно быть известно заранее. Не подбирайте идентификатор и не копируйте его из примера.
Число 0 и строка "0" преобразуются сервером в null до валидации. Поэтому menu_id: 0 завершится ответом 422.
Шаг 1. Создайте проект и владельца
- Метод
- POST
- URL
https://api.gigma.ru/api/projects- Авторизация
- Не требуется
- Headers
Accept: application/json; Content-Type: application/json- Успешный ответ
200
App Token, User Bearer и Agent Token для этого запроса не нужны.
Параметры запроса
name(string, обязательно) — название проекта.login(string, обязательно, email) — уникальный email первого владельца.menu_id(integer, обязательно) — идентификатор существующего административного меню.
Пример запроса
{
"name": "Acme",
"login": "owner@example.com",
"menu_id": 42
} menu_id: 42 — условное значение. Передайте идентификатор своего меню.
Ответ
При успешном действии API возвращает HTTP 200 и объект проекта.
{
"item": {
"id": "314",
"name": "Acme",
"avatar": "https://api.gigma.ru/storage/uploads/default.svg",
"created_at": "2026-08-24T10:00:00.000000Z"
}
} Текущий api.json описывает item.id как строку, а DictionaryResource возвращает значение модели без явного приведения типа. Пока OpenAPI и фактический ответ не выровнены, принимайте строку или число и сразу нормализуйте идентификатор в строку.
Описание полей ответа
item.id— идентификатор проекта. Сохраните его сразу и обрабатывайте как непрозрачное значение.item.name— название проекта.item.avatar— изображение проекта или стандартное изображение.item.created_at— дата создания проекта.
Ответ не содержит владельца, роль, permissions и токен.
Что создаётся в коде
| Объект | Что создаётся |
|---|---|
| Проект | name, menu_id, пустой контур данных |
| Роли | owner, admin, manager, director, employee, head |
| Отделы | технический, коммерческий, конструкторский, СМО, логистика/склад |
| Владелец | User с переданным login, ролью owner, меню проекта и доступными permissions |
Ошибка валидации
Опубликованный контракт метода содержит два ответа: 200 и 422.
422 Unprocessable Entity возвращается, когда:
- отсутствует обязательное поле;
loginне является email или уже используется;menu_idне является целым числом;- меню с переданным
menu_idне существует.
Форма ответа:
{
"message": "<описание ошибки>",
"errors": {
"login": ["<причина>"]
}
} Статусы 401, 409 и 500 не опубликованы для этой операции в api.json. Не используйте их как стабильную часть клиентского контракта. Любой другой статус обрабатывайте как неподтверждённый сбой.
Получили 200 — сохраните item.id и переходите к входу владельца.
Шаг 2. Запросите одноразовый пароль
Приветственное письмо, которое отправляется при создании проекта, не является одноразовым паролем. Запросите пароль отдельным методом:
POST /api/send_password HTTP/1.1
Host: api.gigma.ru
Accept: application/json
Content-Type: application/json
{
"login": "owner@example.com"
} При успешном действии API возвращает 200:
{
"message": "Password successfully send"
} Пароль действует 5 минут. Полный контракт и ошибки описаны в методе «Отправьте пароль на email».
Шаг 3. Получите User Bearer
Передайте email владельца, пароль из письма и название административного клиента:
POST /api/login HTTP/1.1
Host: api.gigma.ru
Accept: application/json
Content-Type: application/json
{
"login": "owner@example.com",
"password": "<password_from_email>",
"device": "owner-console"
} При успешном входе сохраните user.access_token.value целиком, включая часть до символа |:
Authorization: Bearer <user.access_token.value> User Bearer нельзя передавать в публичную клиентскую часть сайта или приложения. Храните его в доверенном административном клиенте или на сервере продукта. Не добавляйте токен в URL, аналитику и обычные логи.
Полный ответ и ошибки описаны в методе «Получите Bearer сотрудника».
Шаг 4. Проверьте владельца
Сразу после входа запросите текущего пользователя:
GET /api/user HTTP/1.1
Host: api.gigma.ru
Authorization: Bearer <user_access_token>
Accept: application/json Проверьте поля фактического ответа API:
user.loginсовпадает с email изPOST /api/projects;user.role.nameравноowner;user.is_bannedравноfalse;user.permissionsсодержит права для следующего действия.
Если хотя бы одна проверка не прошла, не продолжайте настройку этим токеном. Пример фактического ответа находится в методе «Получите текущего сотрудника».
Если ответ на создание проекта потерян
POST /api/projects не принимает Idempotency-Key, а опубликованный контракт не обещает идемпотентность. Не повторяйте запрос автоматически после разрыва соединения, тайм-аута или неподтверждённого серверного сбоя.
Используйте POST /api/send_password с тем же login только как диагностическую проверку:
200означает, что пользователь с таким email существует. Получите Bearer и проверьте рольownerчерезGET /api/user;- ошибка валидации о неизвестном
loginозначает, что пользователя нет, но не доказывает отсутствие частично созданного проекта; GET /api/userне возвращаетitem.id, поэтому потерянный идентификатор проекта этим сценарием восстановить нельзя.
Если ответ 200 от POST /api/projects вместе с item.id не был получен, перед повторным созданием требуется проверить состояние проекта на стороне Gigma. Не меняйте email только для обхода конфликта.
Проверьте результат
Первый запуск завершён, когда выполнены все условия:
POST /api/projectsвернул200, аitem.idсохранён.POST /api/send_passwordвернул200.POST /api/loginвернулuser.access_token.value.GET /api/userвернул владельца с рольюowner.
Что делать дальше
| Задача | Раздел |
|---|---|
| Добавить бизнес и реквизиты | Бизнесы и реквизиты |
| Создать сайт, приложение или сервис и получить App Token | Настройка приложения |
| Подготовить товары или услуги | Каталог |
| Настроить склады и остатки | Управление складом |
| Добавить сотрудников и назначить права | Команда и доступ |
| Подключить программного агента | Агентский доступ |
Для входа клиентов не используйте User Bearer владельца. Клиенты получают Counterparty Bearer через сервис авторизации, а Application задаёт контекст клиентских запросов с помощью App Token.