Программный доступ к данным вашей компании: выгрузить инвентаризации и передачи в свой дашборд, завести сотрудников из кадровой системы, построить отчёт так, как нужно именно вам.
https://toolkeeper.io/openapi/v1Authorization: Bearer <ваш ключ>tk_live_7Qm2XbR4 — по нему ключ можно узнать,
но нельзя использовать.curl -s -H "Authorization: Bearer $TOOLKEEPER_API_KEY" \
https://toolkeeper.io/openapi/v1/me
Ответ покажет название ключа, вашу компанию, к каким пространствам он допущен, полный список
выданных прав и дату, после которой он перестанет работать. Если что-то идёт не так — начните
отладку именно с /me: этот метод не требует ни одного права и отвечает всегда,
когда ключ валиден.
Ключ состоит из четырёх частей, и каждая нужна:
tk_live_7Qm2XbR4_9fKd2LmQ8vTnRs4WcXy7BpZ1aHj3Ue a4Xb2Q
└──┬───┘└───┬──┘ └──────────────┬─────────────┘ └──┬─┘
│ │ │ │
│ │ │ └─ контрольная сумма
│ │ └─ секрет (~190 бит)
│ └─ публичный идентификатор ключа
└─ вендор и среда: live — боевые данные, test — тестовый контур
| Данные | Метод | Право | Что вернётся |
|---|---|---|---|
| Рабочие пространства | GET /workspaces |
workspaces:read | Список и карточка пространства: название, часовой пояс, кто владелец. |
| Сотрудники | GET /employees |
employees:read | ФИО, телефон, должность, пространства, роли. Пароли не отдаются никогда. |
| ТМЦ | GET /items |
items:read | Карточки с названиями категории, бренда, статуса, склада, ответственного. |
| История карточки | GET /items/{id}/history |
items:read | Полный аудит-трейл: изменения полей и все передачи в хронологии, с именами. |
| Инвентаризации | GET /inventories |
inventories:read | Кампании: статус, даты, охват, участники, позиции. |
| Отчёт инвентаризации | GET /inventories/{id}/report |
inventories:read | Найдено / не найдено / с замечаниями, стоимость недостачи, разбивка по людям. |
| Передачи | GET /transfers |
transfers:read | Кто кому что передал. Фильтр stuck=1 — зависшие, с временем ожидания. |
| Справочники | GET /dictionaries/storages |
dictionaries:read | Склады, объекты, категории/бренды/статусы/должности — для фильтров дашборда. |
| Сводная статистика | GET /stats |
stats:read | Счётчики по компании: люди, ТМЦ, стоимость, активность. |
| Справочник ролей | GET /roles |
roles:read | Роли, которые ключ имеет право назначать. |
| Про сам ключ | GET /me |
— (нужен только валидный ключ) | Чей ключ, к какому пространству привязан, какие права, до какой даты. |
| Действие | Метод | Право | Ограничения |
|---|---|---|---|
| Создать сотрудника | POST /employees |
employees:write | ФИО, телефон, должность, пространства, роли из белого списка. |
| Создать сотрудников пачкой | POST /employees/bulk |
employees:write | До 100 за раз, лимит 5 запросов в минуту. |
| Изменить сотрудника | PATCH /employees/{id} |
employees:write | Только свои поля. Пароль через API не меняется вообще. |
| Изменить права сотрудника | POST /employees/{id}/roles |
employees:roles | Отдельное право. Административные роли снять нельзя. |
| Удалить сотрудника | DELETE /employees/{id} |
employees:delete | Отдельное право. Владельца компании и админов удалить нельзя. |
| Создать ТМЦ | POST /items |
items:write | Карточка с категорией, брендом, складом, ответственным. |
| Создать ТМЦ пачкой | POST /items/bulk |
items:write | До 100 за раз, лимит 5 запросов в минуту. |
Права выдаются по одному. Ключ для дашборда получает только *:read и физически
не способен ничего изменить. Удаление сотрудников и переназначение прав — отдельные права,
которые не входят в обычную запись: скрипт, заводящий людей, не должен уметь их убирать.
Это не настройка и не вопрос выданных прав. Таких методов в API просто нет:
*/bulk — 5 в минуту. Остаток —
в заголовках X-Rate-Limit-*.Idempotency-Key. Повтор с тем же ключом и
тем же телом вернёт сохранённый ответ (Idempotent-Replay: true) вместо
второго сотрудника; повтор с другим телом — 409.?page= и ?per_page= (максимум 200).
Все ошибки — RFC 9457
application/problem+json. В теле всегда есть type, title,
status, detail, instance, а также ссылки
docs и base_url — чтобы вызывающая сторона могла разобраться
по одному ответу, ничего больше не открывая.
unauthorized — Ключ не передан, просрочен, отозван или неверен. В ответе есть заголовок WWW-Authenticate и подсказка, как аутентифицироваться. forbidden — Ключ валиден, но у него нет нужного права. В detail написано, какого именно — выпустите новый ключ с этим правом. not-found — Объекта нет либо он вне вашей компании. Мы намеренно не различаем эти случаи, чтобы по кодам ответа нельзя было нащупать чужие данные. validation — Данные не прошли проверку. В errors[] — по одной записи на поле: field, code, message. conflict — Повтор Idempotency-Key с другим телом запроса. rate-limited — Превышен лимит запросов либо слишком много неудачных попыток аутентификации. Подождите и повторите. bad-request — Запрос сформирован неверно — например, нечитаемый JSON или недопустимый параметр. server-error — Ошибка на нашей стороне. Повторите позже; текст ошибки наружу не раскрывается.
Напишите на sales@toolkeeper.io и укажите
публичный идентификатор ключа (например, tk_live_7Qm2XbR4) — по нему мы найдём
ваши запросы в журнале. Сам ключ присылать не нужно и не надо.