Time entries

Retrieve multiple time entries paginated

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}'
get

/api/2.0/timeEntries

Authorizations
Query parameters
afterstring
beforestring
sortBystring · enum
Options: date, createdDate, updatedDate, billableMinutes, minutes
sortTypestring · enum
Options: asc, desc
includeSubItemsboolean
sizeinteger · int64 · max: 100
Responses
curl -L \
  --url 'https://tracket.dev/api/2.0/timeEntries'
{
  "size": 25,
  "total": 150,
  "nextCursor": "text",
  "_links": {
    "self": {
      "href": "text"
    },
    "prev": {
      "href": "text"
    },
    "next": {
      "href": "text"
    }
  },
  "items": [
    {
      "item": "5273029382",
      "user": "35851565",
      "minutes": 60,
      "billableMinutes": 0,
      "team": "929301",
      "description": "Description of the time entry",
      "category": "21e5614a-6787-4102-a9e0-c331837a0bce",
      "project": "PC",
      "id": "4tMdlJNZIP8Sll2o2U4V",
      "createdDate": "2025-02-22T05:42:45.442Z",
      "board": "5272688006",
      "parentItem": "7172688044",
      "updatedDate": "2025-02-22T05:42:45.442Z",
      "customFields": {
        "myCustomFieldReference": "af19025a-1f4e-41d6-9990-503dac65f161"
      },
      "date": "2023-05-20",
      "approval": {
        "approver": "",
        "status": "open"
      },
      "_links": {
        "self": {
          "href": "text"
        }
      }
    }
  ]
}

Create a new time entry.

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"}'

post

/api/2.0/timeEntries

Authorizations
Body
itemstringrequired

monday.com item id

Example: 5273029382
userstringrequired

monday.com user id

Example: 35851565
minutesinteger · int64 · min: 1 · max: 1440required

Number of minutes worked

Example: 60
billableMinutesinteger · int64 · max: 1440 | nullable

Number of billable minutes worked

Example: 0
teamstring | nullable

monday.com team id

Example: 929301
descriptionstring | nullable
Example: Description of the time entry
categorystring | nullable

Tracket category id

Example: 21e5614a-6787-4102-a9e0-c331837a0bce
projectstring | nullable

Tracket project id

Example: PC
customFieldsobject | nullable

Map of custom field reference and option id

Example: {"myCustomFieldReference":"af19025a-1f4e-41d6-9990-503dac65f161"}
datestringrequired

The date of the time entry YYYY-MM-DD

Example: 2023-05-20
Responses
curl -L \
  --request POST \
  --url 'https://tracket.dev/api/2.0/timeEntries' \
  --header 'Content-Type: application/json' \
  --data '{"item":"5273029382","user":"35851565","minutes":60,"billableMinutes":0,"team":"929301","description":"Description of the time entry","category":"21e5614a-6787-4102-a9e0-c331837a0bce","project":"PC","customFields":{"myCustomFieldReference":"af19025a-1f4e-41d6-9990-503dac65f161"},"date":"2023-05-20"}'
{
  "item": "5273029382",
  "user": "35851565",
  "minutes": 60,
  "billableMinutes": 0,
  "team": "929301",
  "description": "Description of the time entry",
  "category": "21e5614a-6787-4102-a9e0-c331837a0bce",
  "project": "PC",
  "id": "4tMdlJNZIP8Sll2o2U4V",
  "createdDate": "2025-02-22T05:42:45.442Z",
  "board": "5272688006",
  "parentItem": "7172688044",
  "updatedDate": "2025-02-22T05:42:45.442Z",
  "customFields": {
    "myCustomFieldReference": "af19025a-1f4e-41d6-9990-503dac65f161"
  },
  "date": "2023-05-20",
  "approval": {
    "approver": "",
    "status": "open"
  },
  "_links": {
    "self": {
      "href": "text"
    }
  }
}

Retrieve a time entry by ID.

get

/api/2.0/timeEntries/{timeEntryId}

Authorizations
Path parameters
timeEntryIdstringrequired
Responses
curl -L \
  --url 'https://tracket.dev/api/2.0/timeEntries/{timeEntryId}'
{
  "item": "5273029382",
  "user": "35851565",
  "minutes": 60,
  "billableMinutes": 0,
  "team": "929301",
  "description": "Description of the time entry",
  "category": "21e5614a-6787-4102-a9e0-c331837a0bce",
  "project": "PC",
  "id": "4tMdlJNZIP8Sll2o2U4V",
  "createdDate": "2025-02-22T05:42:45.442Z",
  "board": "5272688006",
  "parentItem": "7172688044",
  "updatedDate": "2025-02-22T05:42:45.442Z",
  "customFields": {
    "myCustomFieldReference": "af19025a-1f4e-41d6-9990-503dac65f161"
  },
  "date": "2023-05-20",
  "approval": {
    "approver": "",
    "status": "open"
  },
  "_links": {
    "self": {
      "href": "text"
    }
  }
}

Update a time entry.

put

/api/2.0/timeEntries/{timeEntryId}

Authorizations
Path parameters
timeEntryIdstringrequired
Body
itemstring

monday.com item id

Example: 5273029382
minutesinteger · int64 · min: 1 · max: 1440

Number of minutes worked

Example: 60
billableMinutesinteger · int64 · max: 1440 | nullable

Number of billable minutes worked

Example: 0
teamstring | nullable

monday.com team id

Example: 929301
descriptionstring | nullable
Example: Description of the time entry
categorystring | nullable

Tracket category id

Example: 21e5614a-6787-4102-a9e0-c331837a0bce
projectstring | nullable

Tracket project id

Example: PC
customFieldsobject | nullable

Map of custom field reference and option id

Example: {"myCustomFieldReference":"af19025a-1f4e-41d6-9990-503dac65f161"}
datestring

The date of the time entry YYYY-MM-DD

Example: 2023-05-20
Responses
curl -L \
  --request PUT \
  --url 'https://tracket.dev/api/2.0/timeEntries/{timeEntryId}' \
  --header 'Content-Type: application/json' \
  --data '{"item":"5273029382","minutes":60,"billableMinutes":0,"team":"929301","description":"Description of the time entry","category":"21e5614a-6787-4102-a9e0-c331837a0bce","project":"PC","customFields":{"myCustomFieldReference":"af19025a-1f4e-41d6-9990-503dac65f161"},"date":"2023-05-20"}'
{
  "item": "5273029382",
  "user": "35851565",
  "minutes": 60,
  "billableMinutes": 0,
  "team": "929301",
  "description": "Description of the time entry",
  "category": "21e5614a-6787-4102-a9e0-c331837a0bce",
  "project": "PC",
  "id": "4tMdlJNZIP8Sll2o2U4V",
  "createdDate": "2025-02-22T05:42:45.442Z",
  "board": "5272688006",
  "parentItem": "7172688044",
  "updatedDate": "2025-02-22T05:42:45.442Z",
  "customFields": {
    "myCustomFieldReference": "af19025a-1f4e-41d6-9990-503dac65f161"
  },
  "date": "2023-05-20",
  "approval": {
    "approver": "",
    "status": "open"
  },
  "_links": {
    "self": {
      "href": "text"
    }
  }
}

Delete a time entry.

delete

/api/2.0/timeEntries/{timeEntryId}

Authorizations
Path parameters
timeEntryIdstringrequired
Responses
curl -L \
  --request DELETE \
  --url 'https://tracket.dev/api/2.0/timeEntries/{timeEntryId}'
{
  "item": "5273029382",
  "user": "35851565",
  "minutes": 60,
  "billableMinutes": 0,
  "team": "929301",
  "description": "Description of the time entry",
  "category": "21e5614a-6787-4102-a9e0-c331837a0bce",
  "project": "PC",
  "id": "4tMdlJNZIP8Sll2o2U4V",
  "createdDate": "2025-02-22T05:42:45.442Z",
  "board": "5272688006",
  "parentItem": "7172688044",
  "updatedDate": "2025-02-22T05:42:45.442Z",
  "customFields": {
    "myCustomFieldReference": "af19025a-1f4e-41d6-9990-503dac65f161"
  },
  "date": "2023-05-20",
  "approval": {
    "approver": "",
    "status": "open"
  },
  "_links": {
    "self": {
      "href": "text"
    }
  }
}

Last updated

Was this helpful?