---
title: "Admin work — API v1 and MCP | Nodea Documentation"
description: "Reference of the Admin work module: REST API v1 endpoints (projects, entries, monthly summary), the account:read scope, the products account permission, MCP tools work-log-summary and work-log-entries."
url: "https://nodea.io/en/api-docs/work-log"
lang: "en"
updated: "2026-10-14"
---

# Admin work — API v1 and MCP | Nodea Documentation

> Reference of the Admin work module — time Nodea administrators logged on your account: read-only API v1 endpoints (monthly projects, entries, summary against the hours package), the account:read scope, MCP tools and examples.

The **Admin work** module shows the time Nodea administrators spent on your account under the *Administration* and *Programming* services: entries day by day (date, time range, scope of work, administrator, billed time, kind — regular or incident) and a monthly summary against the hours package of the services. The panel shows the same view at /app/work-log. This document describes the REST API v1 layer (/api/v1/work-log/\*) and the module's MCP tools. The module is read-only and carries no amounts.

## Authentication and scopes

API v1 authenticates with a Passport personal access token in the Authorization: Bearer \<token\> header.

- account:read — every endpoint and tool of the module.

Rate limit: throttle:api-v1 = 240/min per token user. In MCP every tool additionally needs the transport scope mcp:use.

**Availability:** the module is being rolled out to customers gradually. Until it is enabled for customers the endpoints answer 404 and the MCP tools return the error "The work log is not available for this account yet.".

## Customer account and visibility

The data belongs to a **customer account** (see [Customer accounts](https://nodea.io/en/api-docs/accounts)). A request acts in the current account (token pin → X-Account-Id header → default account). Besides the token scope the account permission products is required. The API only returns entries visible to the customer — entries an administrator marked as internal are never returned and are not counted in the totals. A period is a calendar month in the Europe/Warsaw zone as YYYY-MM; times are returned in UTC (ISO 8601 with Z).

## API v1 — endpoints

MethodPathScopeDescriptionGET/api/v1/work-log/projectsaccount:readMonthly projects (account × service type × month), newest first. Parameters: period (YYYY-MM), category (administration|programming|other), per\_page (1–100, default 20), page. Only projects with at least one visible entry. GET/api/v1/work-log/entriesaccount:readEntries of one month in chronological order. Parameters: period (YYYY-MM, default the current month), category, per\_page (1–200, default 50), page. GET/api/v1/work-log/summaryaccount:readMonthly summary per service type: number of entries, billed time, used hours against the package and the overage. Parameter: period (default the current month).

### Response — WorkProjectResource

- id, period (YYYY-MM), category, title, status (open|closed — a closed month accepts no more changes), closed\_at (nullable), service\_id (nullable).
- entries\_count, billed\_seconds, billed\_hours — totals of the visible entries.

### Response — WorkEntryResource

- id, project\_id, period, category.
- task\_label (scope of work), description (nullable), kind (regular|incident).
- started\_at, ended\_at (ISO 8601 UTC), billed\_seconds, billed\_hours — billed time (after rounding; incident entries may carry a multiplier).
- staff\_name — the administrator who did the work (nullable).

The entry list returns period next to data, plus the standard pagination links and meta.

### Response — summary

{ "data": { "period": "2026-09", "categories": \[{ "category": "administration", "category\_label": "Administration", "entries\_count": 12, "billed\_seconds": 37800, "billable\_seconds": 37800, "used\_hours": 10.5, "included\_hours": 8, "overage\_hours": 2.5, "closed": false, "services": \[{ "id": 42, "name": "Administracja Linux", "included\_hours": 8 }\] }\] } }

included\_hours = null means the services declare no hours package (then overage\_hours is null too) — not the same as a 0 h package.

### Error codes

- 401 — missing/invalid token.
- 403 — missing account:read scope, no account context (no\_account\_context) or missing products permission (account\_permission\_denied).
- 404 — the module is not available to customers yet.
- 422 — invalid period, category or pagination parameters.

## Examples — API

curl -s "https://app.nodea.io/api/v1/work-log/summary?period=2026-09" \\ -H "Authorization: Bearer $NODEA\_TOKEN" \\ -H "Accept: application/json" curl -s "https://app.nodea.io/api/v1/work-log/entries?period=2026-09&per\_page=100" \\ -H "Authorization: Bearer $NODEA\_TOKEN" \\ -H "Accept: application/json"

## MCP — tools

ToolScopeArgumentsDescriptionwork-log-summaryaccount:readperiod?Monthly summary — the same shape as GET /api/v1/work-log/summary. work-log-entriesaccount:readperiod?, category?, page, per\_page (≤100)Entries of the month — fields as WorkEntryResource, plus period and pagination meta.

Both tools are annotated read-only and idempotent. JSON-RPC call example:

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"work-log-summary","arguments":{"period":"2026-09"}}}

Entries reach Nodea from the time-tracking system through the [integration API](https://nodea.io/en/api-docs/integration-api); this module never changes them.

## Related

- [Customer accounts — API v1 and MCP | Nodea Documentation](https://nodea.io/en/api-docs/accounts)
- [Billing — API v1 and MCP | Nodea Documentation](https://nodea.io/en/api-docs/billing)
- [Integration API (mTLS) | Nodea Documentation](https://nodea.io/en/api-docs/integration-api)

---

Languages: [pl](https://nodea.pl/pl/dokumentacja-api/work-log.md)  
Site index: [llms.txt](https://nodea.io/en/llms.txt)
