A REST API for time entries, projects, tasks, reports, and webhooks — everything the TimeNova dashboard does, programmatically.
Overview
The TimeNova API mirrors the dashboard: create and query time entries, manage projects and tasks, pull reports, and subscribe to events with webhooks.
Authentication
Authenticate every request with an API key generated from your organization's settings, passed as a Bearer token.
curl https://api.timenova.com/v1/time-entries \
-H "Authorization: Bearer YOUR_API_KEY"Base URL
Every endpoint is relative to https://api.timenova.com/v1. All requests and responses use JSON.
Requests & Responses
A minimal example: create a time entry for a project and task, then read the entry back in the response.
curl -X POST https://api.timenova.com/v1/time-entries \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "proj_9F3kd2",
"taskId": "task_7bQ1lm",
"startedAt": "2026-07-21T09:00:00Z",
"durationSeconds": 5400
}'{
"id": "time_4mP2xz",
"projectId": "proj_9F3kd2",
"taskId": "task_7bQ1lm",
"startedAt": "2026-07-21T09:00:00Z",
"durationSeconds": 5400,
"createdAt": "2026-07-21T09:00:03Z"
}Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /time-entries | List time entries for the authenticated organization. |
| POST | /time-entries | Create a manual time entry. |
| PATCH | /time-entries/{id} | Update an existing time entry. |
| DELETE | /time-entries/{id} | Delete a time entry. |
| Method | Path | Description |
|---|---|---|
| GET | /projects | List projects. |
| POST | /projects | Create a project. |
| GET | /projects/{id}/tasks | List tasks for a project. |
| POST | /projects/{id}/tasks | Create a task. |
| Method | Path | Description |
|---|---|---|
| GET | /reports/summary | Aggregate tracked time by user, project, or date range. |
| GET | /reports/costs | Cost report with per-project budgets. |
| Method | Path | Description |
|---|---|---|
| GET | /webhooks | List configured webhook endpoints. |
| POST | /webhooks | Register a new webhook endpoint. |
| DELETE | /webhooks/{id} | Remove a webhook endpoint. |
SDKs & Libraries
The API is plain REST + JSON, so any HTTP client works today. Official language SDKs are on the roadmap.
Rate Limits
Requests are limited per API key. Once you exceed the limit, the API responds with 429 Too Many Requests and a Retry-After header — wait that many seconds before retrying. Need a higher limit for your workload? Reach out through the Contact page.
| Limit | Value |
|---|---|
| Requests per minute | 120 |
| Burst allowance | 20 requests |
| Webhook delivery retries | Automatic, with exponential backoff |
Error Codes
Errors are returned as standard HTTP status codes with a JSON body describing what went wrong.
| Status | Meaning | Description |
|---|---|---|
| 400 | Bad Request | The request body is missing a required field or is malformed. |
| 401 | Unauthorized | The API key is missing, invalid, or has been revoked. |
| 403 | Forbidden | The API key is valid but lacks permission for this action. |
| 404 | Not Found | The requested resource does not exist in this organization. |
| 422 | Unprocessable Entity | The request is well-formed but fails validation. |
| 429 | Too Many Requests | The rate limit was exceeded — check the Retry-After header. |
| 500 | Internal Server Error | Something went wrong on our end — safe to retry. |
Create an account to generate your API key and start making requests.