readRead data
Read existing records without changing them.
API base URL
https://app.glingo.ru/api01
Read your first page of time entries. Replace the placeholder with your API key.
curl "https://app.glingo.ru/api/time?page=1&page_size=50" \
-H "x-api-key: <glk_...>"{
"ok": true,
"data": {
"entries": [],
"totalCount": 0
}
}Create an API key in Settings → API and MCP. Each key belongs to one workspace and uses the permissions of its owner. Send it with every request.
x-api-key: <glk_...>
Content-Type: application/jsonKeep keys on your server. Do not place them in browser code or public repositories. Revoke a key in settings when it is no longer needed.
Manage API keysKey presets set the available operations. Your workspace role still determines which records and reports you can see.
readRead existing records without changing them.
fullRead, create, update and delete records.
reports:readIncluded in new read and full keys. Older keys without reports:read need to be recreated for analytics. Team, activity and debtor reports require the owner or admin role.
02
Request and response examples are excerpts. Download the OpenAPI schema for the complete contract.
OpenAPI schemaPUT requests follow the endpoint’s update contract. Check the schema for required fields before sending a partial update.
/api/timeList time entries with stats, chart_by_day and chart_by_hour.Scope: read
Parameters
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
}
}/api/timeCreate a time entry.Scope: full
Parameters
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" } }
}/api/time/:idUpdate a time entry.Scope: full
Parameters
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" } }
}/api/time/:idDelete a time entry.Scope: full
Parameters
path: id
curl -X DELETE "https://app.glingo.ru/api/time/<id>" \
-H "x-api-key: <api_key>"{
"ok": true,
"data": { "id": "uuid" }
}/api/moneyList payments with totals and chart_by_day.Scope: read
Parameters
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
}
}/api/moneyCreate a payment.Scope: full
Parameters
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 } }
}/api/money/:idUpdate a payment.Scope: full
Parameters
path: id, body: inflow_date, amount, currency, comment?, counteragent_id?, project_id?
{
"ok": true,
"data": { "inflow": { "id": "uuid" } }
}/api/money/:idDelete a payment.Scope: full
Parameters
path: id
{
"ok": true,
"data": { "id": "uuid" }
}/api/projectsList projects and financial totals.Scope: read
Parameters
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 }
}/api/projectsCreate a project.Scope: full
Parameters
body: name, counteragent_id?
{
"ok": true,
"data": { "project": { "id": "uuid" } }
}/api/projects/:idUpdate a project.Scope: full
Parameters
path: id, body: name, counteragent_id?
{
"ok": true,
"data": { "project": { "id": "uuid" } }
}/api/projects/:idDelete a project.Scope: full
Parameters
path: id
{
"ok": true,
"data": { "id": "uuid" }
}/api/counteragentsList clients and totals.Scope: read
Parameters
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 }
}/api/counteragentsCreate a client.Scope: full
Parameters
body: name
{
"ok": true,
"data": { "counteragent": { "id": "uuid" } }
}/api/counteragents/:idUpdate a client.Scope: full
Parameters
path: id, body: name
{
"ok": true,
"data": { "counteragent": { "id": "uuid" } }
}/api/counteragents/:idDelete a client.Scope: full
Parameters
path: id
{
"ok": true,
"data": { "id": "uuid" }
}/api/calendarGet the calendar for a month.Scope: read
Parameters
month=YYYY-MM-01
{
"ok": true,
"data": {
"month": "2026-03-01",
"rows": [{ "accrual_date": "2026-03-10", "total_cost": "5000.00" }]
}
}/api/me/accessGet the current access and workspace context.Scope: read
Parameters
-
{
"ok": true,
"data": {
"workspace": { "id": "uuid", "slug": "ivanochek", "role": "owner" }
}
}/api/reports/teamMember time, earnings, receipts and debt. full returns rows and summary; summary omits rows; table returns only rows and period. ID filters are comma-separated. A response excerpt follows.Scope: reports:read
Parameters
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": []
}
}/api/reports/activityActivity summary, period comparison, members, projects, clients and event feed. Pagination applies only to the feed. ID filters are comma-separated. A response excerpt follows.Scope: reports:read
Parameters
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
}
}
}/api/reports/debtorsClient or project debt, risk metrics and previous-period comparison. ID filters are comma-separated. A response excerpt follows.Scope: reports:read
Parameters
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
}
}/api/reports/debtors/reconciliationAccruals and receipts for one entity through accrual_to, with running debt. The JSON response can be used to generate CSV. ID filters are comma-separated. A response excerpt follows.Scope: reports:read
Parameters
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
}
}
}/api/timesheet-matrixDaily minutes grouped by project, client or team. Defaults to the current UTC month. ID filters are comma-separated. A response excerpt follows.Scope: reports:read
Parameters
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": []
}
}/api/moneysheet-matrixDaily earned or received amounts grouped by entity. Defaults to earned and the current UTC month. ID filters are comma-separated. A response excerpt follows.Scope: reports:read
Parameters
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": []
}
}/api/dashboard/overviewTime and money KPIs, trends, debtors, risks and recent entries within the caller’s data visibility. ID filters are comma-separated. A response excerpt follows.Scope: reports:read
Parameters
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
Connect a compatible AI assistant to your workspace using the remote MCP endpoint. Configure the connection and review access in GlinGo settings.
https://app.glingo.ru/api/mcpCloud clients require a publicly reachable HTTPS address. OAuth must be enabled on the target environment; API keys work with clients that support custom headers.
Configure MCPResponses use the same envelope. Check ok even when handling an HTTP response.
{
"ok": false,
"error": {
"code": "unauthorized",
"message": "Unauthorized"
}
}| HTTP | code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing or invalid credentials. |
| 403 | forbidden | Insufficient scope or permissions. |
| 400 | invalid_param | Invalid query or path parameter. |
| 400 | invalid_body | Invalid JSON or request body. |
| 400 | validation_error | Business validation failed. |
| 404 | not_found | Record not found in the workspace. |
| 429 | rate_limited | Too many requests. |
| 500 | api_error | Internal API error. |
The default general API limit is 2,000 requests per 10 seconds per client identity (IP + auth subject). A 429 response includes Retry-After.
For reads, respect Retry-After or use exponential backoff with jitter on 429/5xx. Fix the request or permissions before retrying 400/401/403/404.
After an uncertain write result, check whether it succeeded before repeating it: a repeated request can create a duplicate.