Introduction

Terake measures, accounts for and calculates everything to do with work. Its purpose is time: how long a job took, who did it, and on what. A worker starts and stops work from the mobile app, or by presenting an NFC or RFID card at a reader, and those start and stop times become the record everything else is counted from. Plans and rosters are made once and shared with the people who carry them out, arriving in each worker's calendar on the phone as well as in the browser; a plan item marked done becomes recorded work without anyone re-entering it. Alongside hours the system tracks what work consumes — materials, machinery, fuel — and the fields, sites or objects it was carried out on. Companies use it in agriculture and forestry, construction, maintenance, manufacturing and services. This API is that system's interface.

The main workhorse of the system lives in the Workdones section, in the Workdones view: an atomic piece of work is called a Workdone, and most other data ultimately exists to describe, plan or account for one. The other significant carriers of user data are plans and rosters, both in the Planning view, inspection and repair cases in Maintenance, and the faults raised against machinery, which are recorded in the Faults section of the Fleet view. If you are looking for where a company's day-to-day records actually accumulate, these are the places to start; if you are looking for results rather than records, use the Reports section in the Reporting view.

Nearly every record refers to shared lists — workers, worktypes, workobjects, customers, materials, facilities and the like — called classificators, and request bodies set those relations by id. The endpoints for looking the ids up are in the Classificators section of the Admin view; of them, prefer GET /api/search/{classificator_type}.

Choose a view

The reference is split by the job you are doing, so each page holds one domain rather than every endpoint in the system. The front page at /api/doc is this index; the endpoints live in the views below.

Workdones Work actually performed and the hours it took: start and stop, brigade start and stop, TTKI card readers, summarised worktime.
Planning Work scheduled before it happens: plans, rosters, shifts, calendar items, projects, recurrence.
Fieldbook The land and what is done to it: agrifields, agrifield works, crops, soil samples, fertilising, herding, geometry, cadastres.
Fleet Machinery and what it consumes: facilities, parts, fuel, fuel balances, transport, faults, identificators.
Maintenance Keeping machinery serviceable: inspection cases, repair cases, templates and intervals.
Materials What gets consumed and what is in stock: materials, categories, inventory, lifespans.
Reporting Consolidated figures over work already recorded. Prefer these over summing raw records.
Pria Statutory reporting to the Estonian agricultural registry over X-Road.
Files Attachments and generated output: file items, document types, PDFs and spreadsheets, signed documents.
Sync Keeping a device current: the flat API bookmarked sync and integration partners.
Identity Who someone is: worker groups, departments, professions, login, passwords and roles.
Admin Running the account and the lists it is described with: workers, workday rules, companies, customers, agreements, messages, settings, cost accounts, worktypes, workobjects and their categories, location areas, classificators.

Authentication and usage

To find your API key:

  1. Log in to Terake.
  2. In the left-hand menu, the one with the black background, click your name.
  3. Click "My profile".
  4. The key is in the "Apikey" field under "My workplace data".

To call an endpoint marked as requiring authentication, send the API key in the X-Terake-Api-Key HTTP request header. A missing or incorrect key, or a key belonging to a deleted or archived worker, results in a 401 error. The base URL of the Terake API is https://app.terake.com/api. To test an unauthenticated connection, open https://app.terake.com/api/ping; the answer is a JSON object with a "pong" parameter.

At the moment, use of the API is free of charge and unlimited: there is no per-request fee and no rate limit or quota on the number of calls. Please use common sense when making calls and do not load the service with unnecessary or excessive requests. For time-consuming tasks, such as bulk imports or large exports, prefer Estonian night time.

Status codes

200Returned when successful.
400The request could not be read, or a required parameter was missing or malformed.
401The API key is missing, unknown, or belongs to a worker who has been archived or deleted.
403The API key is valid but the worker may not see or change this record.
404No record matches the id or uuid in the URL, within the caller's company.
500Something went wrong on the server.

Some endpoints answer 200 with a body of { "error": "<slug>" } rather than an HTTP error status. Where that happens the endpoint's own description says so, and the slug is the thing to branch on. A handful of endpoints also return a status of their own beyond this list — for example deleting a refuelling Workdone answers 403 with { "error": { "slug": "message.delete_refueling_from" } } — and those are documented on the endpoint itself.

Help

Additional information about the Terake system is available in the admin interface help documentation, at https://help.terake.com/.

For any further questions or requests, please do not hesitate to contact us by e-mail at support@terake.com.

Dates and times

Send a date as Y-m-d and a date with a time as Y-m-d H:i:s, for example 2026-08-28 and 2026-08-28 14:30:00. Values are read in the company time zone. Other spellings PHP can parse are usually accepted, but a slash-separated date is read month-first, so send Y-m-d and avoid the ambiguity. A duration is HH:MM or HH:MM:SS, or a plain number of seconds.

Responses return dates and times in ISO 8601 with the offset, for example 2026-08-28T14:30:00+0300. The Return table below lists the fields of the response and their types; it has no description column for them, so the format above is the one to assume for every DateTime field it shows.

Documentation auto-generated on Sat, 26 Sep 26 10:13:08 +0300