Recurring time logs hours on a project automatically on a cadence, for retainers and standing work. Each occurrence becomes an ordinary time entry (see Hours).
GET /api/v2/recurring-timeGET /api/v2/recurring-time?user_id=3Entries logged for one staff user.
GET /api/v2/recurring-time?status=pausedActive entries by default. status may be active, paused, stopped, or archived. Optional updated_since (ISO 8601).
{
"total_count": 2,
"page_count": 1,
"page_size": 20,
"recurring_project_items": [
{
"id": 1,
"title": "Weekly check-in",
"status": 0,
"project_id": 7,
"user_id": 3,
"hours": 2.0,
"time_interval": 1,
"next_date": "2026-09-15",
"occurrences_remaining": null,
"unlimited": true,
"billable": true
},
...
]
}
GET /api/v2/recurring-time/:idPOST /api/v2/recurring-time
{
"recurring_project_item": {
"project_id": 7,
"title": "Weekly check-in",
"hours": 2,
"time_interval": 1,
"next_date": "2026-09-15",
"unlimited": true,
"billable": true
}
}
Required Fields: title, hours, time_interval, next_date, and a project_id or client_id (HTTP 422 on failure)
0: Active1: Paused2: Stopped3: Archived
0: Every day1: Every week2: Every two weeks5: Every month6: Every workday, Monday to FridaySet occurrences_remaining and "unlimited": false to stop after a number of entries. user_id defaults to the authenticated user.
PUT /api/v2/recurring-time/:idYou may provide a partial list of fields to update.
POST /api/v2/recurring-time/:id/pausePOST /api/v2/recurring-time/:id/resumePOST /api/v2/recurring-time/:id/archivePaused entries log nothing until resumed. Archiving stops an entry for good and hides it from lists; the time already logged stays.
DELETE /api/v2/recurring-time/:idDeletions are permanent and not reversible.