Перейти к документации

Справочник API

Базовый адрес API

https://app.glingo.ru/api
REST API · JSON

01

Быстрый старт

Получите первую страницу записей времени. Вместо заполнителя подставьте свой API-ключ.

  1. Создайте ключ с правами чтения.
  2. Отправьте запрос на адрес приложения с заголовком x-api-key.
  3. Проверьте ok в ответе. Результат находится в data, а описание ошибки — в error.
cURL
curl "https://app.glingo.ru/api/time?page=1&page_size=50" \
  -H "x-api-key: <glk_...>"
Пример ответа
{
  "ok": true,
  "data": {
    "entries": [],
    "totalCount": 0
  }
}

Авторизация

Создайте API-ключ в настройках → API и MCP. Каждый ключ привязан к одному пространству и использует права своего владельца. Передавайте его с каждым запросом.

HTTP
x-api-key: <glk_...>
Content-Type: application/json

Храните ключ на сервере. Не размещайте его в коде браузера или публичных репозиториях. Если ключ больше не нужен, отзовите его в настройках.

Управление API-ключами

Права доступа

Набор прав ключа определяет доступные операции. Роль в пространстве по-прежнему ограничивает доступные записи и отчёты.

read

Чтение данных

Просмотр существующих записей без изменений.

full

Чтение и запись

Чтение, создание, изменение и удаление записей.

reports:read

Чтение аналитики

Входит в новые ключи read и full. Старые ключи без reports:read нужно пересоздать для аналитики. Отчёты по команде, активности и должникам доступны владельцу и администратору.

02

Справочник API

Примеры запросов и ответов сокращены. Полный контракт доступен в схеме OpenAPI.

Схема OpenAPI

PUT-запросы следуют контракту обновления конкретного метода. Перед частичным обновлением проверьте обязательные поля в схеме.

Время

GET/api/timeПолучить список записей времени + stats + chart_by_day + chart_by_hour.

Право: read

Параметры
page, page_size, accrual_from, accrual_to, created_from, created_to, counteragent_id, project_id, sort_by, sort_dir

Запрос
curl -X GET "https://app.glingo.ru/api/time?page=1&page_size=50" \
  -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "entries": [{ "id": "uuid", "description": "Консультация" }],
    "totalCount": 42
  }
}
POST/api/timeСоздать запись времени.

Право: full

Параметры
body: description, accrual_date, duration_minutes_total, cost, currency, counteragent_id?, project_id?

Запрос
curl -X POST "https://app.glingo.ru/api/time" \
  -H "x-api-key: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Работа по проекту",
    "accrual_date": "2026-03-19",
    "duration_minutes_total": 90,
    "cost": 3500,
    "currency": "RUB"
  }'
Пример ответа
{
  "ok": true,
  "data": { "entry": { "id": "uuid" } }
}
PUT/api/time/:idОбновить запись времени.

Право: full

Параметры
path: id, body: description, accrual_date, duration_minutes_total, cost, currency, counteragent_id?, project_id?

Запрос
curl -X PUT "https://app.glingo.ru/api/time/<id>" \
  -H "x-api-key: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{ "description": "Обновленное описание" }'
Пример ответа
{
  "ok": true,
  "data": { "entry": { "id": "uuid" } }
}
DELETE/api/time/:idУдалить запись времени.

Право: full

Параметры
path: id

Запрос
curl -X DELETE "https://app.glingo.ru/api/time/<id>" \
  -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": { "id": "uuid" }
}

Деньги

GET/api/moneyПолучить список поступлений + totals + chart_by_day.

Право: read

Параметры
page, page_size, search, inflow_from, inflow_to, counteragent_id, project_id, include_totals, totals_only, sort_by, sort_dir

Запрос
curl -X GET "https://app.glingo.ru/api/money?page=1&page_size=50" \
  -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "inflows": [{ "id": "uuid", "amount": 5000 }],
    "totalCount": 12
  }
}
POST/api/moneyСоздать поступление.

Право: full

Параметры
body: inflow_date, amount, currency, comment?, counteragent_id?, project_id?

Запрос
curl -X POST "https://app.glingo.ru/api/money" \
  -H "x-api-key: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "inflow_date": "2026-03-20",
    "amount": 15000,
    "currency": "RUB",
    "comment": "Оплата этапа #2"
  }'
Пример ответа
{
  "ok": true,
  "data": { "inflow": { "id": "uuid", "amount": 15000 } }
}
PUT/api/money/:idОбновить поступление.

Право: full

Параметры
path: id, body: inflow_date, amount, currency, comment?, counteragent_id?, project_id?

Пример ответа
{
  "ok": true,
  "data": { "inflow": { "id": "uuid" } }
}
DELETE/api/money/:idУдалить поступление.

Право: full

Параметры
path: id

Пример ответа
{
  "ok": true,
  "data": { "id": "uuid" }
}

Проекты

GET/api/projectsПолучить список проектов и финансовые агрегаты.

Право: read

Параметры
page, page_size, search, for_select, include_totals, totals_only, accrual_from, accrual_to, sort_by, sort_dir

Пример ответа
{
  "ok": true,
  "data": { "projects": [{ "id": "uuid", "name": "Лендинг" }], "totalCount": 4 }
}
POST/api/projectsСоздать проект.

Право: full

Параметры
body: name, counteragent_id?

Пример ответа
{
  "ok": true,
  "data": { "project": { "id": "uuid" } }
}
PUT/api/projects/:idОбновить проект.

Право: full

Параметры
path: id, body: name, counteragent_id?

Пример ответа
{
  "ok": true,
  "data": { "project": { "id": "uuid" } }
}
DELETE/api/projects/:idУдалить проект.

Право: full

Параметры
path: id

Пример ответа
{
  "ok": true,
  "data": { "id": "uuid" }
}

Клиенты

GET/api/counteragentsПолучить список клиентов и агрегаты.

Право: read

Параметры
page, page_size, search, for_select, include_totals, totals_only, accrual_from, accrual_to, sort_by, sort_dir

Пример ответа
{
  "ok": true,
  "data": { "counteragents": [{ "id": "uuid", "name": "ООО Ромашка" }], "totalCount": 7 }
}
POST/api/counteragentsСоздать клиента.

Право: full

Параметры
body: name

Пример ответа
{
  "ok": true,
  "data": { "counteragent": { "id": "uuid" } }
}
PUT/api/counteragents/:idОбновить клиента.

Право: full

Параметры
path: id, body: name

Пример ответа
{
  "ok": true,
  "data": { "counteragent": { "id": "uuid" } }
}
DELETE/api/counteragents/:idУдалить клиента.

Право: full

Параметры
path: id

Пример ответа
{
  "ok": true,
  "data": { "id": "uuid" }
}

Календарь

GET/api/calendarПолучить срез календаря на месяц.

Право: read

Параметры
month=YYYY-MM-01

Пример ответа
{
  "ok": true,
  "data": {
    "month": "2026-03-01",
    "rows": [{ "accrual_date": "2026-03-10", "total_cost": "5000.00" }]
  }
}

Доступ

GET/api/me/accessПолучить текущий контекст доступа и workspace.

Право: read

Параметры
-

Пример ответа
{
  "ok": true,
  "data": {
    "workspace": { "id": "uuid", "slug": "ivanochek", "role": "owner" }
  }
}

Аналитика

GET/api/reports/teamВремя, начислено, получено и долг участников. full возвращает таблицу и сводку; summary — сводку без строк; table — только строки и период. Фильтры ID — через запятую. Ниже сокращённый пример ответа.

Право: reports:read

Параметры
accrual_from, accrual_to, project_id, counteragent_id, user_id, view=full|summary|table, sort_key=worked|earned|received|debt, sort_dir=asc|desc

Запрос
curl "https://app.glingo.ru/api/reports/team?view=table" -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "can_manage_team": true,
    "period": {
      "accrual_from": null,
      "accrual_to": null
    },
    "rows": []
  }
}
GET/api/reports/activityСводка активности, сравнение периодов, участники, проекты, клиенты и лента событий. Пагинация относится только к ленте. Фильтры ID — через запятую. Ниже сокращённый пример ответа.

Право: reports:read

Параметры
date_from, date_to, project_id, counteragent_id, user_id, feed_limit (1–100, default 30), feed_offset (default 0)

Запрос
curl "https://app.glingo.ru/api/reports/activity" -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "can_manage_team": true,
    "feed": [],
    "feed_pagination": {
      "offset": 0,
      "limit": 30,
      "total": 0,
      "has_more": false
    }
  }
}
GET/api/reports/debtorsДолги по клиентам или проектам, риски и сравнение с предыдущим периодом. Фильтры ID — через запятую. Ниже сокращённый пример ответа.

Право: reports:read

Параметры
accrual_from, accrual_to, project_id, counteragent_id, user_id, view=counteragents|projects, sort_key=name|client|debt|earned|received|last_paid|age|projects_count, sort_dir=asc|desc, overdue_only=1

Запрос
curl "https://app.glingo.ru/api/reports/debtors" -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "can_manage_team": true,
    "view": "counteragents",
    "rows": [],
    "comparison": null
  }
}
GET/api/reports/debtors/reconciliationНачисления и оплаты одной сущности до accrual_to включительно, с накопительным долгом. Ответ JSON можно использовать для выгрузки CSV. Фильтры ID — через запятую. Ниже сокращённый пример ответа.

Право: reports:read

Параметры
entity_id (required UUID), view=counteragents|projects, accrual_to

Запрос
curl "https://app.glingo.ru/api/reports/debtors/reconciliation?entity_id=00000000-0000-4000-8000-000000000001" -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "view": "counteragents",
    "entity_id": "00000000-0000-4000-8000-000000000001",
    "entity_name": "Acme",
    "period": {
      "accrual_to": null
    },
    "rows": [],
    "totals": {
      "worked_minutes_total": 0,
      "earned_total": 0,
      "received_total": 0,
      "debt_total": 0
    }
  }
}
GET/api/timesheet-matrixМинуты по дням с итогами по проектам, клиентам или команде. По умолчанию текущий месяц UTC. Фильтры ID — через запятую. Ниже сокращённый пример ответа.

Право: reports:read

Параметры
accrual_from, accrual_to, project_id, counteragent_id, user_id, view=project|counteragent|team

Запрос
curl "https://app.glingo.ru/api/timesheet-matrix?accrual_from=2026-09-01&accrual_to=2026-09-01" -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "view": "project",
    "can_manage_team": true,
    "unique_counteragents_count": 0,
    "period": {
      "accrual_from": "2026-09-01",
      "accrual_to": "2026-09-01",
      "days": [
        "2026-09-01"
      ]
    },
    "rows": [],
    "holidays": []
  }
}
GET/api/moneysheet-matrixНачислено или получено по дням и сущностям. По умолчанию earned и текущий месяц UTC. Фильтры ID — через запятую. Ниже сокращённый пример ответа.

Право: reports:read

Параметры
accrual_from, accrual_to, project_id, counteragent_id, user_id, view=project|counteragent|team, metric=earned|received

Запрос
curl "https://app.glingo.ru/api/moneysheet-matrix?accrual_from=2026-09-01&accrual_to=2026-09-01" -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "view": "project",
    "can_manage_team": true,
    "unique_counteragents_count": 0,
    "period": {
      "accrual_from": "2026-09-01",
      "accrual_to": "2026-09-01",
      "days": [
        "2026-09-01"
      ]
    },
    "rows": [],
    "holidays": []
  }
}
GET/api/dashboard/overviewKPI времени и денег, динамика, должники, риски и последние записи в пределах доступных данных. Фильтры ID — через запятую. Ниже сокращённый пример ответа.

Право: reports:read

Параметры
date_from, date_to, project_id, counteragent_id, user_id

Запрос
curl "https://app.glingo.ru/api/dashboard/overview" -H "x-api-key: <api_key>"
Пример ответа
{
  "ok": true,
  "data": {
    "can_manage_team": true,
    "workspace_currency": "RUB",
    "period": {
      "from": null,
      "to": null,
      "previous_from": null,
      "previous_to": null
    }
  }
}

03

MCP для AI-ассистентов

Подключите совместимого AI-ассистента к пространству через удалённый MCP. Настройка подключения и управление доступом находятся в настройках GlinGo.

MCP
https://app.glingo.ru/api/mcp

Облачным клиентам нужен публичный HTTPS-адрес. OAuth должен быть включён на целевом стенде; API-ключи работают с клиентами, поддерживающими собственные заголовки.

Настроить MCP

Ошибки

Ответы используют единый формат. Проверяйте ok при обработке HTTP-ответа.

JSON
{
  "ok": false,
  "error": {
    "code": "unauthorized",
    "message": "Unauthorized"
  }
}
HTTPcodeОписание
401unauthorizedКлюч отсутствует или недействителен.
403forbiddenНедостаточно прав ключа или роли.
400invalid_paramНекорректный параметр пути или запроса.
400invalid_bodyНекорректный JSON или тело запроса.
400validation_errorНе пройдена проверка бизнес-правил.
404not_foundЗапись не найдена в пространстве.
429rate_limitedПревышен лимит запросов.
500api_errorВнутренняя ошибка API.

Лимиты и повторы

Общий лимит API по умолчанию — 2000 запросов за 10 секунд на идентификатор клиента (IP + auth subject). Ответ 429 содержит заголовок Retry-After.

Для чтения учитывайте Retry-After или увеличивайте паузу между попытками с небольшим случайным смещением при 429/5xx. Перед повтором 400/401/403/404 исправьте запрос или права.

Если результат записи неизвестен, проверьте, выполнилась ли она, прежде чем повторять запрос: повтор может создать дубликат.