Tracket
HomepageContact Support
  • Welcome to Tracket
  • 🚀Getting started
    • Overview
    • Quickstart guide
    • Your account
      • Subscription & Billing
        • Pricing overview
        • Pricing
        • Free trial
        • Billing
        • FAQ
      • Region & Language
    • Hire an expert
    • Release notes
      • xx May, 2025
      • Apr 22, 2025
      • Feb 20, 2025
      • Jan 14, 2025
      • Nov 19, 2024
      • Oct 22, 2024
      • Sep 4, 2024
      • Aug 19, 2024
      • Aug 13, 2024
      • Jul 15, 2024
      • Jun 18, 2024
      • May 23, 2024
      • Apr 30, 2024
      • Mar 14, 2024
      • Mar 5, 2024
      • Feb 21, 2024
      • Feb 1, 2024 - Tracket 2.0!
      • May 30, 2023
      • May 16, 2023
      • Apr 13, 2023
      • Feb 21, 2023
      • Jan 17, 2023
      • Dec 13, 2022
      • Nov 24, 2022
      • Nov 17, 2022
      • Oct 25, 2022
      • Sep 22, 2022
      • Jul 11, 2022
      • Jun 27, 2022
      • Jun 23, 2022
      • May 24, 2022
      • May 13, 2022
      • May 2, 2022
      • Apr 13, 2022
      • Apr 5, 2022
      • Mar 22, 2022
      • Feb 21, 2022
      • Feb 11, 2022
      • Feb 10, 2022
      • Feb 8, 2022
      • Jan 28, 2022
      • Jan 25, 2022
  • 📖Instructions
    • Installation
    • Setting up
      • Authorization
      • In-app setup
    • Logging time
    • Approving time
    • Team management
    • Reporting
    • Archive
    • Tracket mobile
  • ✨Features
    • Tracket settings
      • Introduction
      • Time entry template
      • Custom fields
      • Company policies
      • Default user preferences
      • Work schedules
      • Capacity
      • Archive
      • Exports
      • Transactional contacts
    • Time entries
      • Time input formats
      • Smart suggestions
      • Time frames
      • Timer
      • Board, item and subitem selector filters
    • Team management
      • Configure Tracket team admins
      • Team timesheets
    • Timesheet
      • Introduction
      • Grid view
      • List view
      • Calendar view
      • Create, edit and delete time entries
      • Bulk actions
    • Item view
      • Create, edit and delete time entries
      • Filters
      • Exports
    • Reports
      • Generate reports
      • Filters
      • Exports
    • Dashboarding
      • Introduction
      • Configure widgets
      • Permissions and widgets
      • Exports
    • Approvals
      • Introduction
      • Submit timesheets
      • Reopen timesheets
      • Approve timesheets
      • Reject timesheets
    • Tracket mobile
      • Create, edit and delete time entries
      • Approvals
    • Keyboard shortcuts
  • 🪄User preferences
    • Display options
    • Timer
    • Notifications
  • 🤖Workflow automation
    • Introduction
    • Integration recipes
      • Time to column
      • Item manipulation
    • Configure integrations
    • Integration trouble shooting
  • 🧑‍💻Development
    • Introduction
    • REST API
      • Versioning
      • Basics
        • Authentication
      • API reference
        • v2.0
          • Time entries
          • Time entry template
          • Categories
        • v1.0 (deprecated)
          • Time entries
          • Categories
          • Additional data from monday.com
  • ℹ️About
    • Security & Privacy policies
    • Support channel
    • Partner program
    • Frequently Asked Questions
Powered by GitBook
On this page

Was this helpful?

  1. Development
  2. REST API
  3. API reference
  4. v2.0

Time entries

Previousv2.0NextTime entry template

Last updated 1 year ago

Was this helpful?

🧑‍💻

Retrieve a time entry by ID.

get
Authorizations
Path parameters
timeEntryIdstringRequired
Query parameters
tzstringOptional

IANA timezone identifier, such as America/New_York Europe/Amsterdam UTC, defaults to UTC. This currently only affects the endTime property based on Daylight Saving Time changes.

Responses
200Success
application/json
get
GET /api/2.0/timeEntries/{timeEntryId} HTTP/1.1
Host: tracket.dev
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
200Success
{
  "item": "5273029382",
  "user": "35851565",
  "date": "2023-05-20",
  "minutes": 60,
  "billableMinutes": 0,
  "startTime": "16:30",
  "team": "929301",
  "description": "Description of the time entry",
  "customFields": {
    "myCustomFieldReference": "My custom field label"
  },
  "id": "4tMdlJNZIP8Sll2o2U4V",
  "createdDate": "2025-06-05T02:28:49.068Z",
  "board": "5272688006",
  "approval": {
    "status": "open",
    "approver": ""
  },
  "parentItem": "7172688044",
  "updatedDate": "2025-06-05T02:28:49.068Z",
  "_links": {
    "self": {
      "href": "text"
    }
  },
  "endTime": "17:30"
}

Delete a time entry.

delete
Authorizations
Path parameters
timeEntryIdstringRequired
Responses
200Success
application/json
delete
DELETE /api/2.0/timeEntries/{timeEntryId} HTTP/1.1
Host: tracket.dev
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
200Success
{
  "item": "5273029382",
  "user": "35851565",
  "date": "2023-05-20",
  "minutes": 60,
  "billableMinutes": 0,
  "startTime": "16:30",
  "team": "929301",
  "description": "Description of the time entry",
  "customFields": {
    "myCustomFieldReference": "My custom field label"
  },
  "id": "4tMdlJNZIP8Sll2o2U4V",
  "createdDate": "2025-06-05T02:28:49.068Z",
  "board": "5272688006",
  "approval": {
    "status": "open",
    "approver": ""
  },
  "parentItem": "7172688044",
  "updatedDate": "2025-06-05T02:28:49.068Z",
  "_links": {
    "self": {
      "href": "text"
    }
  },
  "endTime": "17:30"
}
  • GETRetrieve multiple time entries paginated
  • POSTCreate a new time entry.
  • GETRetrieve a time entry by ID.
  • PUTUpdate a time entry.
  • DELETEDelete a time entry.

Retrieve multiple time entries paginated

get

You can fetch pages of (filtered) time entries using this endpoint. The results are based on the authenticated user, which could be one of these three flavours:

  • monday.com admin - The request will receive all time entries that have been logged by any user.
  • team admins - The request will receive the time entries that have been logged by team members.
  • other users - Only the authenticated user's time entries will be returned.
curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries' \
--header 'Authorization: Bearer ${TOKEN}'

Pagination

By default, up to 25 time entries are retrieved per request. You can increase the page size up to 100 by using the size query parameter.

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?size=100' \
--header 'Authorization: Bearer ${TOKEN}'

The page result will contain a total attribute which indicates the total amount of time entries. There will be a nextCursor available along with a next page link in the _links attribute when there are more time-entries available.

{"size": 100,
 "total": 1354,
 "items": [
   ...
 ],
 "nextCursor": "WzE2OTk4MzM2MDAwMDAgMTY5OTg3MDIyMDYzM10=",
 "_links": {
   "self": {
     "href": "/api/2.0/timeEntries?size=100"
   },
   "next": {
     "href": "/api/2.0/timeEntries?size=100&after=WzE2OTk4MzM2MDAwMDAgMTY5OTg3MDIyMDYzM10="
   }
 }
}

Use the query parameter after to fetch the next page.

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?size=100&after=WzE2OTk4MzM2MDAwMDAgMTY5OTg3MDIyMDYzM10=' \
--header 'Authorization: Bearer ${TOKEN}'

Sorting

By default, the results are sorted by the date field in desc (descending) order. This means that time entries logged on the most recent dates will be retrieved first.

Use the sortBy and sortType query parameters to sort differently.

Sortable fields are:

  • date The date that time was logged on
  • createdDate The timestamp of when the time entry was created
  • updatedDate The timestamp of when the time entry was last updated.
  • minutes The amount of minutes that are logged.
  • billableMinutes The amount of billable minutes that are logged.

sortType can either be desc (default) or asc

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?sortBy=createdDate&sortType=asc' \
--header 'Authorization: Bearer ${TOKEN}'

Filtering

Basic filters

You can use filters to fetch a subset of time entries. Here are some basic examples:

Fetch time entries logged on a monday.com board

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?fields.board=5272688006' \
--header 'Authorization: Bearer ${TOKEN}'

Fetch time entries logged on a specific date.

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?fields.date=2023-12-30' \
--header 'Authorization: Bearer ${TOKEN}'

Advanced operators

The query parameter ?fields.date=2023-12-30 filters the result to time entries that are logged on the specific date 2023-12-30. Some use cases require different operators, a common one is fetching time entries for a specific date range.

You can use the Great Than Equals (gte) and Less Than Equals (lte) operator to perform a range query.

Example: fetch all time entries that were logged for the year 2023

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?fields.date.gte=2023-01-01&fields.date.lte=2023-12-31' \
--header 'Authorization: Bearer ${TOKEN}'

Supported fields

Not every field supports the same operators, here you can find a list of which operators are available and which ones you can use per field.

Operators & Fields

Operator Description Example
is Value for field is equal to supplied filter ?fields.board=5272688006 or fields.board.is=5272688006
in Value for field is equal to one of supplied comma separated values ?fields.board.in=5272688006,68726884545
not in Value for field is not equal to one of the supplied comma separated values ?fields.board.not in=5272688006,68726884545
gte Value for field is greater than or equals to supplied filter ?fields.minutes.gte=60
gt Value for field is greater than the supplied filter ?fields.minutes.gt=60
lte Value for field is less than or equals to supplied filter ?fields.minutes.lte=60
lt Value for field is less than the supplied filter ?fields.minutes.lt=60
Field Available operators
item is, in, not in
board is, in, not in
user is, in, not in
team is, in, not in
parentItem is, in, not in
itemType is, in, not in
category is, in, not in
project is, in, not in
description is
date is, gte, gt, lt, lte
createdDate is, gte, gt, lt, lte
updatedDate is, gte, gt, lt, lte
minutes is, gte, gt, lt, lte
billableMinutes is, gte, gt, lt, lte

Filter on sub items and parent items

To fetch time entries that are logged on a specific (sub) item, simply pass the (sub) item ID as a filter

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?fields.item=5272688006' \
--header 'Authorization: Bearer ${TOKEN}'

Use the includeSubItems query parameter if you also want to include the time entries that are logged on the item's sub items.

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?fields.item=5272688006&includeSubItems=true' \
--header 'Authorization: Bearer ${TOKEN}'

Filter on custom fields

You can filter on custom fields using the field ID and an option ID as value. The available operators are is in and not in.

curl -X GET 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries?fields.myCustomField=OPTIONID' \
--header 'Authorization: Bearer ${TOKEN}'
Authorizations
Query parameters
afterstringOptional
beforestringOptional
sortBystring · enumOptionalPossible values:
sortTypestring · enumOptionalPossible values:
tzstringOptional

IANA timezone identifier, such as America/New_York Europe/Amsterdam UTC, defaults to UTC. This currently only affects the endTime property based on Daylight Saving Time changes.

includeSubItemsbooleanOptional
sizeinteger · int64 · max: 100Optional
Responses
200Success
application/json
400Error
application/json
get
GET /api/2.0/timeEntries HTTP/1.1
Host: tracket.dev
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
{
  "size": 25,
  "total": 150,
  "nextCursor": "text",
  "items": [
    {
      "item": "5273029382",
      "user": "35851565",
      "date": "2023-05-20",
      "minutes": 60,
      "billableMinutes": 0,
      "startTime": "16:30",
      "team": "929301",
      "description": "Description of the time entry",
      "customFields": {
        "myCustomFieldReference": "My custom field label"
      },
      "id": "4tMdlJNZIP8Sll2o2U4V",
      "createdDate": "2025-06-05T02:28:49.068Z",
      "board": "5272688006",
      "approval": {
        "status": "open",
        "approver": ""
      },
      "parentItem": "7172688044",
      "updatedDate": "2025-06-05T02:28:49.068Z",
      "_links": {
        "self": {
          "href": "text"
        }
      },
      "endTime": "17:30"
    }
  ],
  "_links": {
    "self": {
      "href": "text"
    },
    "prev": {
      "href": "text"
    },
    "next": {
      "href": "text"
    }
  }
}

Create a new time entry.

post

A few keys are always required when creating time entries:

  • user monday.com user ID
  • date yyyy-mm-dd
  • minutes Integer
  • item monday.com (sub) item ID

Others fields could be required based on your settings in Tracket.

curl -X POST 'https://us.production.timesheet.avisi-apps.com/api/2.0/timeEntries' \
--header 'Authorization: Bearer ${TOKEN}' \
--header 'Content-Type: application/json' \
--data-raw '{"date": "2023-11-13",
"minutes": 60,
"item": "5473732489",
"user": "3585156"}'

Authorizations
Body
itemstringRequired

monday.com item id

Example: 5273029382
userstringRequired

monday.com user id

Example: 35851565
datestringRequired

The date of the time entry YYYY-MM-DD

Example: 2023-05-20
minutesinteger · int64 · min: 1 · max: 1440Required

Number of minutes worked

Example: 60
billableMinutesinteger · int64 · max: 1440Optional

Number of billable minutes worked

startTimestringOptional

When work started in ISO 8601 format

Example: 16:30
teamstringOptional

monday.com team id

Example: 929301
descriptionstringOptionalExample: Description of the time entry
categorystringOptionalDeprecated

Tracket category id (deprecated) you should use the custom field "category"

Example: 21e5614a-6787-4102-a9e0-c331837a0bce
customFieldsobjectOptional

Map of custom field reference and option id

Example: {"myCustomFieldReference":"af19025a-1f4e-41d6-9990-503dac65f161"}
Responses
201Success
application/json
400Error
application/json
post
POST /api/2.0/timeEntries HTTP/1.1
Host: tracket.dev
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 255

{
  "item": "5273029382",
  "user": "35851565",
  "date": "2023-05-20",
  "minutes": 60,
  "billableMinutes": 0,
  "startTime": "16:30",
  "team": "929301",
  "description": "Description of the time entry",
  "customFields": {
    "myCustomFieldReference": "af19025a-1f4e-41d6-9990-503dac65f161"
  }
}
{
  "item": "5273029382",
  "user": "35851565",
  "date": "2023-05-20",
  "minutes": 60,
  "billableMinutes": 0,
  "startTime": "16:30",
  "team": "929301",
  "description": "Description of the time entry",
  "customFields": {
    "myCustomFieldReference": "My custom field label"
  },
  "id": "4tMdlJNZIP8Sll2o2U4V",
  "createdDate": "2025-06-05T02:28:49.068Z",
  "board": "5272688006",
  "approval": {
    "status": "open",
    "approver": ""
  },
  "parentItem": "7172688044",
  "updatedDate": "2025-06-05T02:28:49.068Z",
  "_links": {
    "self": {
      "href": "text"
    }
  },
  "endTime": "17:30"
}

Update a time entry.

put
Authorizations
Path parameters
timeEntryIdstringRequired
Body
itemstringOptional

monday.com item id

Example: 5273029382
datestringOptional

The date of the time entry YYYY-MM-DD

Example: 2023-05-20
minutesinteger · int64 · min: 1 · max: 1440Optional

Number of minutes worked

Example: 60
billableMinutesinteger · int64 · max: 1440Optional

Number of billable minutes worked

startTimestringOptional

When work started in ISO 8601 format

Example: 16:30
teamstringOptional

monday.com team id

Example: 929301
descriptionstringOptionalExample: Description of the time entry
categorystringOptionalDeprecated

Tracket category id (deprecated) you should use the custom field "category"

Example: 21e5614a-6787-4102-a9e0-c331837a0bce
customFieldsobjectOptional

Map of custom field reference and option id

Example: {"myCustomFieldReference":"af19025a-1f4e-41d6-9990-503dac65f161"}
Responses
200Success
application/json
400Error
application/json
put
PUT /api/2.0/timeEntries/{timeEntryId} HTTP/1.1
Host: tracket.dev
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 237

{
  "item": "5273029382",
  "date": "2023-05-20",
  "minutes": 60,
  "billableMinutes": 0,
  "startTime": "16:30",
  "team": "929301",
  "description": "Description of the time entry",
  "customFields": {
    "myCustomFieldReference": "af19025a-1f4e-41d6-9990-503dac65f161"
  }
}
{
  "item": "5273029382",
  "user": "35851565",
  "date": "2023-05-20",
  "minutes": 60,
  "billableMinutes": 0,
  "startTime": "16:30",
  "team": "929301",
  "description": "Description of the time entry",
  "customFields": {
    "myCustomFieldReference": "My custom field label"
  },
  "id": "4tMdlJNZIP8Sll2o2U4V",
  "createdDate": "2025-06-05T02:28:49.068Z",
  "board": "5272688006",
  "approval": {
    "status": "open",
    "approver": ""
  },
  "parentItem": "7172688044",
  "updatedDate": "2025-06-05T02:28:49.068Z",
  "_links": {
    "self": {
      "href": "text"
    }
  },
  "endTime": "17:30"
}