NAV Navbar
cURL

Introduction

Welcome! This document provides a full list of all Timely APIs currently available, so you can start integrating Timely with your favorite applications.

Got questions? Please send them to support@timelyapp.com.

Authentication

OAuth2 Authentication: http://tools.ietf.org/html/rfc6749

Create an OAuth Application (only available to the Admin User): https://timelyapp.com/:account_id/oauth_applications

Enter your application name and the redirect_url to your application.

Acquire the Application Id and Secret.

The base URL for all API's is: https://api.timelyapp.com/1.1

Authorization

OAuth Code

Example Request: (try this in your web browser)
https://api.timelyapp.com/1.1/oauth/authorize?response_type=code
&redirect_uri=your_redirect_uri&client_id=your_client_id

Users are redirected to request their Timely identity.

HTTP Request

GET /oauth/authorize

Compulsory Parameters

Parameter Description
response_type code
redirect_uri http://your-redirect-url/
client_id your_application_id

If the user accepts your request, Timely will redirect back with the code parameter, which you need to use to get the token.

OAuth Token

Example Request:
curl -X POST --data "redirect_uri=https://your-redirect_url/&code=your_response_code
&client_id=application_id&client_secret=application_secret&grant_type=authorization_code"
https://api.timelyapp.com/1.1/oauth/token
{
  "access_token":"1886f011cd72eabc88d087eabd741b51a9059f5ba57c7bc439285fe86a4e465a",
  "token_type":"bearer",
  "refresh_token":"9db4d1a5d87c707b8125d8f93ad08091fb3ff8b93be901dbeaba968cf532ed9b"
}
200 OK

Users are redirected to request their Timely identity.

HTTP Request

POST /oauth/token

Compulsory Parameters

Parameter Description
redirect_uri http://your-redirect-url/
code your_response_code
client_id your_application_id
client_secret your_application_secret
grant_type authorization_code

The response will be a token with a refresh token. Use the token to use the following API.

Use Timely API to integrate with your apps

Timely API helps you integrate your application with Timely. Following are the list of API’s available. For any help or support email support@timelyapp.com

Accounts

List all accounts

Returns all the accounts created against one email address.

Request

curl -g "https://api.timelyapp.com/1.1/accounts" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer -NlKbq2VxI_mFT81cVRbp-cXl9taFSgh60D_SfGtohQ" \
    -H "Cookie: "

Endpoint

GET /1.1/accounts

GET /1.1/accounts
Accept: application/json
Content-Type: application/json
Authorization: Bearer -NlKbq2VxI_mFT81cVRbp-cXl9taFSgh60D_SfGtohQ

Parameters

None known.

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 8878,
    "name": "Timely",
    "color": "44505e",
    "currency": {
      "id": "usd",
      "name": "United States Dollar",
      "iso_code": "USD",
      "symbol": "$",
      "symbol_first": true
    },
    "logo": {
      "large_retina": "/assets/account_thumbs/account_large_retina-9aefd4c1fb903fb750d36f1b1cc64dc01eb578efd2fd0eb5311344082d6d036e.png",
      "medium_retina": "/assets/account_thumbs/account_medium_retina-3e55e5ac5ba6b1d8077c1e329691e55032a5831997c9e712998594192d534fdf.png",
      "small_retina": "/assets/account_thumbs/account_small_retina-1b8bfb705765064d856161ba9daa1d52155f181c330ac6fe9b5e2f366adaf4fe.png",
      "brand_logo": false
    },
    "from": "Web",
    "max_users": 0,
    "seats": 1,
    "num_users": 1,
    "max_projects": 0,
    "num_projects": 0,
    "plan_id": 2638,
    "plan_name": "Essential",
    "next_charge": "2020-10-04",
    "start_of_week": 0,
    "created_at": 1599213651,
    "payment_mode": "web",
    "paid": true,
    "company_size": "10-49",
    "plan_code": "essential",
    "plan_custom": false,
    "appstore_transaction_id": null,
    "owner_id": 24743,
    "weekly_user_capacity": 40.0,
    "default_hour_rate": 0.0,
    "support_email": "support@timelyapp.com",
    "capacity": {
      "hours": 40,
      "minutes": 0,
      "seconds": 0.0,
      "formatted": "40:00",
      "total_hours": 40.0,
      "total_seconds": 144000.0,
      "total_minutes": 2400.0
    },
    "status": "active",
    "beta": false,
    "expired": false,
    "trial": false,
    "days_to_end_trial": 0,
    "features": [
      {
        "name": "control",
        "days": -1
      },
      {
        "name": "memories",
        "days": -1
      },
      {
        "name": "billing",
        "days": -1
      },
      {
        "name": "project_required_fields",
        "days": -1
      },
      {
        "name": "teams",
        "days": -1
      },
      {
        "name": "recurring_budget",
        "days": -1
      },
      {
        "name": "notifications_project_budget",
        "days": -1
      },
      {
        "name": "weekly_user_capacity",
        "days": -1
      },
      {
        "name": "company_view",
        "days": -1
      },
      {
        "name": "anomalies",
        "days": -1
      },
      {
        "name": "log_hours_for_others",
        "days": -1
      },
      {
        "name": "project_budget",
        "days": -1
      },
      {
        "name": "budgets_hourly_rates",
        "days": -1
      },
      {
        "name": "account_branding",
        "days": -1
      },
      {
        "name": "team_lead",
        "days": -1
      },
      {
        "name": "ai_timesheet_creation",
        "days": -1
      },
      {
        "name": "in_app_support",
        "days": -1
      },
      {
        "name": "planning",
        "days": -1
      },
      {
        "name": "people_dashboard",
        "days": -1
      },
      {
        "name": "people_notify",
        "days": -1
      },
      {
        "name": "audits",
        "days": -1
      },
      {
        "name": "invoices",
        "days": -1
      }
    ]
  }
]

Retrieve activities

This endpoint shows you all activities tied to you and/or any other users you have permission to view. Activities include: logged hours, created a report, shared a report.

Request

curl -g "https://api.timelyapp.com/1.1/8876/activities" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer A-mP79MQyQ_ooJMRjsfBsUL4MhG9a_GLazfABXojVPU" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/activities

GET /1.1/8876/activities
Accept: application/json
Content-Type: application/json
Authorization: Bearer A-mP79MQyQ_ooJMRjsfBsUL4MhG9a_GLazfABXojVPU

Parameters

Name Description
account_id The ID of the account you want to retrieve
limit Retrieve a limited number of activities
offset Retrieve activities from offset
order Sorting order on created_at
filter Filter activities by entity_type - Ex: filter=projects

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 39363,
    "user": {
      "id": 24738,
      "email": "marijaxvfyahjk@timelyapp.com",
      "name": "Marija Petrovic",
      "avatar": {
        "large_retina": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
        "large": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
        "medium_retina": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
        "medium": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
        "timeline": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
      },
      "updated_at": "2020-09-04T12:00:50+02:00"
    },
    "message": "archived",
    "activity_type": "archive_project",
    "url": "http://app.timelyapp.local:3002/8876/projects/42224",
    "updated_at": "2020-08-28T12:00:50+02:00",
    "detail": null,
    "associated_ids": [

    ],
    "entity_type": "Project",
    "entity_deleted": false,
    "parent_entity_name": "",
    "entity": {
      "id": 42224,
      "active": true,
      "name": "Timely",
      "color": "67a3bc",
      "client": {
        "id": 9232,
        "name": "Timely",
        "active": true,
        "external_id": null,
        "updated_at": "2020-09-04T12:00:50+02:00"
      },
      "updated_at": "2020-09-04T12:00:50+02:00"
    },
    "anomaly": false
  },
  {
    "id": 39362,
    "user": {
      "id": 24738,
      "email": "marijaxvfyahjk@timelyapp.com",
      "name": "Marija Petrovic",
      "avatar": {
        "large_retina": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
        "large": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
        "medium_retina": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
        "medium": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
        "timeline": "https://www.gravatar.com/avatar/5a0df163ae1fff1f35e818e0bd60a3b8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
      },
      "updated_at": "2020-09-04T12:00:50+02:00"
    },
    "message": "50% of budget used",
    "activity_type": "project_budget_progress_fifty",
    "url": "http://app.timelyapp.local:3002/8876/projects/42224",
    "updated_at": "2020-09-04T12:00:50+02:00",
    "detail": null,
    "associated_ids": [

    ],
    "entity_type": "Project",
    "entity_deleted": false,
    "parent_entity_name": "",
    "entity": {
      "id": 42224,
      "active": true,
      "name": "Timely",
      "color": "67a3bc",
      "client": {
        "id": 9232,
        "name": "Timely",
        "active": true,
        "external_id": null,
        "updated_at": "2020-09-04T12:00:50+02:00"
      },
      "updated_at": "2020-09-04T12:00:50+02:00"
    },
    "anomaly": false
  }
]

Retrieve an account

Returns one account object related to one company and one subscription plan.

Request

curl -g "https://api.timelyapp.com/1.1/accounts/8877" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Wi4Fn350utzQeuneNwqkItU2iJSMaFNsGMzodbP2vrk" \
    -H "Cookie: "

Endpoint

GET /1.1/accounts/:id

GET /1.1/accounts/8877
Accept: application/json
Content-Type: application/json
Authorization: Bearer Wi4Fn350utzQeuneNwqkItU2iJSMaFNsGMzodbP2vrk

Parameters

Name Description
id The id of the account to be retrieved

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 8877,
  "name": "Timely",
  "color": "44505e",
  "currency": {
    "id": "usd",
    "name": "United States Dollar",
    "iso_code": "USD",
    "symbol": "$",
    "symbol_first": true
  },
  "logo": {
    "large_retina": "/assets/account_thumbs/account_large_retina-9aefd4c1fb903fb750d36f1b1cc64dc01eb578efd2fd0eb5311344082d6d036e.png",
    "medium_retina": "/assets/account_thumbs/account_medium_retina-3e55e5ac5ba6b1d8077c1e329691e55032a5831997c9e712998594192d534fdf.png",
    "small_retina": "/assets/account_thumbs/account_small_retina-1b8bfb705765064d856161ba9daa1d52155f181c330ac6fe9b5e2f366adaf4fe.png",
    "brand_logo": false
  },
  "from": "Web",
  "max_users": 0,
  "seats": 1,
  "num_users": 1,
  "max_projects": 0,
  "num_projects": 0,
  "plan_id": 2637,
  "plan_name": "Essential",
  "next_charge": "2020-10-04",
  "start_of_week": 0,
  "created_at": 1599213651,
  "payment_mode": "web",
  "paid": true,
  "company_size": "10-49",
  "plan_code": "essential",
  "plan_custom": false,
  "appstore_transaction_id": null,
  "owner_id": 24741,
  "weekly_user_capacity": 40.0,
  "default_hour_rate": 0.0,
  "support_email": "support@timelyapp.com",
  "capacity": {
    "hours": 40,
    "minutes": 0,
    "seconds": 0.0,
    "formatted": "40:00",
    "total_hours": 40.0,
    "total_seconds": 144000.0,
    "total_minutes": 2400.0
  },
  "status": "active",
  "beta": false,
  "expired": false,
  "trial": false,
  "days_to_end_trial": 0,
  "features": [
    {
      "name": "control",
      "days": -1
    },
    {
      "name": "memories",
      "days": -1
    },
    {
      "name": "billing",
      "days": -1
    },
    {
      "name": "project_required_fields",
      "days": -1
    },
    {
      "name": "teams",
      "days": -1
    },
    {
      "name": "recurring_budget",
      "days": -1
    },
    {
      "name": "notifications_project_budget",
      "days": -1
    },
    {
      "name": "weekly_user_capacity",
      "days": -1
    },
    {
      "name": "company_view",
      "days": -1
    },
    {
      "name": "anomalies",
      "days": -1
    },
    {
      "name": "log_hours_for_others",
      "days": -1
    },
    {
      "name": "project_budget",
      "days": -1
    },
    {
      "name": "budgets_hourly_rates",
      "days": -1
    },
    {
      "name": "account_branding",
      "days": -1
    },
    {
      "name": "team_lead",
      "days": -1
    },
    {
      "name": "ai_timesheet_creation",
      "days": -1
    },
    {
      "name": "in_app_support",
      "days": -1
    },
    {
      "name": "planning",
      "days": -1
    },
    {
      "name": "people_dashboard",
      "days": -1
    },
    {
      "name": "people_notify",
      "days": -1
    },
    {
      "name": "audits",
      "days": -1
    },
    {
      "name": "invoices",
      "days": -1
    }
  ]
}

Clients

Clients are the companies that you work for. An account can have multiple clients.

Create a client

This API lets you create a client for an account.

Request

curl "https://api.timelyapp.com/1.1/8900/clients" -d '{"client":{"name":"Timely","active":true,"external_id":null}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ogGOfP9Vh-mdgFj8xbIM-l1KOW3LDiph2DnIwFn2DC0" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/clients

POST /1.1/8900/clients
Accept: application/json
Content-Type: application/json
Authorization: Bearer ogGOfP9Vh-mdgFj8xbIM-l1KOW3LDiph2DnIwFn2DC0

Parameters

{"client":{"name":"Timely","active":true,"external_id":null}}
Name Description
name required Specifies the client name
active Example values: "true" or "false". Using "false" changes the client state to "archived"
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 9248,
  "name": "Timely",
  "active": true,
  "external_id": null,
  "updated_at": "2020-09-04T12:01:03+02:00"
}

List all clients

Client lists will return your 10 most recently updated clients. Additionally, you can add the “per_page”, “filter” and “order” optional parameters to change the result

NOTE: Client list will return recently updated 10 clients.

Request

curl -g "https://api.timelyapp.com/1.1/8901/clients" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 1awAgjDIytKBBJLb0hJ9LnB8GD2J8iavxWL-uaHVkak" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/clients

GET /1.1/8901/clients
Accept: application/json
Content-Type: application/json
Authorization: Bearer 1awAgjDIytKBBJLb0hJ9LnB8GD2J8iavxWL-uaHVkak

Parameters

Name Description
account_id Account ID for the clients you want to retrieve
offset Retrieve clients from offset
limit Retrieve number of clients
show Specifies which records to retrieve. The default shows a current account’s active clients (show=active). Example: "show=all" or "show=active" or "show=archived"

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 9249,
    "name": "Timely",
    "active": true,
    "external_id": null,
    "updated_at": "2020-09-04T12:01:04+02:00"
  }
]

Update a client

Update client details just by using a client’s ID.

Request

curl "https://api.timelyapp.com/1.1/8902/clients/9250" -d '{"client":{"name":"Updated name","active":true}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer RBREbj5MdFZp-843cxiCKIQUN4CwsMfkP8tx5evHfFU" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/clients/:id

PUT /1.1/8902/clients/9250
Accept: application/json
Content-Type: application/json
Authorization: Bearer RBREbj5MdFZp-843cxiCKIQUN4CwsMfkP8tx5evHfFU

Parameters

{"client":{"name":"Updated name","active":true}}
Name Description
id required Client ID
name required Specifies the client name
active Example values: “true” or “false”. Using “false” changes the client state to “archived”
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 9250,
  "name": "Updated name",
  "active": true,
  "external_id": null,
  "updated_at": "2020-09-04T12:01:04+02:00"
}

Events

Events are all the entries a user makes. Users can add, delete and edit all entries. Some user’s actions are restricted based on their access level in Timely.

Create an event

When a user creates an event on their own timesheet.

Note: By default, the event is created for a user’s first active project, or the project they last logged time to.

Request

curl "https://api.timelyapp.com/1.1/8920/events" -d '{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-09-04T12:01:12.719+02:00","to":"2020-09-04T15:31:12.719+02:00","day":"2020-09-04","note":"Notes for testing with some random #hash in it.","billed":false,"hour_rate":100,"timer_state":0,"created_from":"Web","updated_from":"Web","project_id":42247}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer uxrLire-nHSV507kL2Rih_v7v_cxUKQFHL0g6mf7x3Y" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/events

POST /1.1/8920/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer uxrLire-nHSV507kL2Rih_v7v_cxUKQFHL0g6mf7x3Y

Parameters

{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-09-04T12:01:12.719+02:00","to":"2020-09-04T15:31:12.719+02:00","day":"2020-09-04","note":"Notes for testing with some random #hash in it.","billed":false,"hour_rate":100,"timer_state":0,"created_from":"Web","updated_from":"Web","project_id":42247}}
Name Description
day required Event day
hours required Event hours
minutes required Event minutes
estimated_minutes Specifies estimated minutes for an event. Example values: 0-60
estimated_hours Specifies estimated hours for an event. Example values: 0-12
note Specifies notes for an event
from Specifies the “from” time in a timestamp. Example values: from: "2017-05-26T10:00:00+05:30"
to Specifies the “to” time in a timestamp. Example values: to: "2017-05-26T12:00:00+05:30"
label_ids Specifies label IDs for an event. Example values: label_ids:[2,3,4]
project_id Specifies the project ID for an event
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)

Response

Content-Type: application/json; charset=utf-8
201 Created
{
  "id": 17704,
  "uid": "5f9449ba01fb3bf921996d83dd46e9de",
  "user": {
    "id": 24832,
    "email": "marijaghhqvxct@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/0114f04d62e0702a02d39c499c0791d5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/0114f04d62e0702a02d39c499c0791d5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/0114f04d62e0702a02d39c499c0791d5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/0114f04d62e0702a02d39c499c0791d5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/0114f04d62e0702a02d39c499c0791d5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:12+02:00"
  },
  "project": {
    "id": 42247,
    "active": true,
    "account_id": 8920,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213672,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9256,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:12+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 3,
    "minutes": 30,
    "seconds": 0,
    "formatted": "03:30",
    "total_hours": 3.5,
    "total_seconds": 12600,
    "total_minutes": 210
  },
  "estimated_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "cost": {
    "fractional": 17500,
    "formatted": "$175.00",
    "amount": 175.0
  },
  "estimated_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "day": "2020-09-04",
  "note": "Notes for testing with some random #hash in it.",
  "sequence": 1,
  "estimated": false,
  "timer_state": "default",
  "timer_started_on": 0,
  "timer_stopped_on": 0,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213672,
  "created_at": 1599213672,
  "created_from": "Timely",
  "updated_from": "Timely",
  "billed": false,
  "to": "2020-09-04T15:31:12+02:00",
  "from": "2020-09-04T12:01:12+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": 24832,
  "updater_id": 24832,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Create an event for a project

Note: Normal user can add hours to existing projects from account. Limited user can add hours to only his projects.

Request

curl "https://api.timelyapp.com/1.1/8919/projects/42246/events" -d '{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-09-04T12:01:12.119+02:00","to":"2020-09-04T15:31:12.119+02:00","day":"2020-09-04","note":"Notes for testing with some random #hash in it.","billed":false,"hour_rate":100,"timer_state":0,"created_from":"Web","updated_from":"Web","project_id":42246}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer lTewZ9oG3Be7xZ53uPR848oUWoRSMaQlXhiJDvetHRM" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/projects/:project_id/events

POST /1.1/8919/projects/42246/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer lTewZ9oG3Be7xZ53uPR848oUWoRSMaQlXhiJDvetHRM

Parameters

{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-09-04T12:01:12.119+02:00","to":"2020-09-04T15:31:12.119+02:00","day":"2020-09-04","note":"Notes for testing with some random #hash in it.","billed":false,"hour_rate":100,"timer_state":0,"created_from":"Web","updated_from":"Web","project_id":42246}}
Name Description
day required Event day
hours required Event hours
minutes required Event minutes
project_id required The numerical ID of the desired project. Example values: 123

Response

Content-Type: application/json; charset=utf-8
201 Created
{
  "id": 17703,
  "uid": "5edbb88e4a0768a67fc6804f9d2b7944",
  "user": {
    "id": 24830,
    "email": "marijaksjjyvae@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/713c64e1d4dd49f89ea7223ec71726f0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/713c64e1d4dd49f89ea7223ec71726f0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/713c64e1d4dd49f89ea7223ec71726f0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/713c64e1d4dd49f89ea7223ec71726f0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/713c64e1d4dd49f89ea7223ec71726f0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:11+02:00"
  },
  "project": {
    "id": 42246,
    "active": true,
    "account_id": 8919,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213672,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9255,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:12+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 3,
    "minutes": 30,
    "seconds": 0,
    "formatted": "03:30",
    "total_hours": 3.5,
    "total_seconds": 12600,
    "total_minutes": 210
  },
  "estimated_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "cost": {
    "fractional": 17500,
    "formatted": "$175.00",
    "amount": 175.0
  },
  "estimated_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "day": "2020-09-04",
  "note": "Notes for testing with some random #hash in it.",
  "sequence": 1,
  "estimated": false,
  "timer_state": "default",
  "timer_started_on": 0,
  "timer_stopped_on": 0,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213672,
  "created_at": 1599213672,
  "created_from": "Timely",
  "updated_from": "Timely",
  "billed": false,
  "to": "2020-09-04T15:31:12+02:00",
  "from": "2020-09-04T12:01:12+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": 24830,
  "updater_id": 24830,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Create an event for another user

Note: Normal users can add hours for any user. If a project_id is not provided, the event is created against a user’s first active project, or the project they logged an event to in the last hour.

Request

curl "https://api.timelyapp.com/1.1/8918/users/24828/events" -d '{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-09-04T12:01:11.449+02:00","to":"2020-09-04T15:31:11.449+02:00","day":"2020-09-04","note":"Notes for testing with some random #hash in it.","billed":false,"hour_rate":100,"timer_state":0,"created_from":"Web","updated_from":"Web","user_id":24828}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer mz7WblsyPa1Y0VdGsILc7TINlxG06PTd0dJx5u0hlVI" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/users/:user_id/events

POST /1.1/8918/users/24828/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer mz7WblsyPa1Y0VdGsILc7TINlxG06PTd0dJx5u0hlVI

Parameters

{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-09-04T12:01:11.449+02:00","to":"2020-09-04T15:31:11.449+02:00","day":"2020-09-04","note":"Notes for testing with some random #hash in it.","billed":false,"hour_rate":100,"timer_state":0,"created_from":"Web","updated_from":"Web","user_id":24828}}
Name Description
day required Event day
hours required Event hours
minutes required Event minutes
user_id required The numerical ID of the desired user. Example values: 123

Response

Content-Type: application/json; charset=utf-8
201 Created
{
  "id": 17702,
  "uid": "512b64c840510a6f1f1d01c98b010148",
  "user": {
    "id": 24828,
    "email": "marijaiqndgbod@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/a3d48e2c357a9f02691dc3d073479ebd?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/a3d48e2c357a9f02691dc3d073479ebd?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/a3d48e2c357a9f02691dc3d073479ebd?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/a3d48e2c357a9f02691dc3d073479ebd?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/a3d48e2c357a9f02691dc3d073479ebd?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:10+02:00"
  },
  "project": {
    "id": 42245,
    "active": true,
    "account_id": 8918,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213671,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9254,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:11+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 3,
    "minutes": 30,
    "seconds": 0,
    "formatted": "03:30",
    "total_hours": 3.5,
    "total_seconds": 12600,
    "total_minutes": 210
  },
  "estimated_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "cost": {
    "fractional": 17500,
    "formatted": "$175.00",
    "amount": 175.0
  },
  "estimated_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "day": "2020-09-04",
  "note": "Notes for testing with some random #hash in it.",
  "sequence": 1,
  "estimated": false,
  "timer_state": "default",
  "timer_started_on": 0,
  "timer_stopped_on": 0,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213671,
  "created_at": 1599213671,
  "created_from": "Timely",
  "updated_from": "Timely",
  "billed": false,
  "to": "2020-09-04T15:31:11+02:00",
  "from": "2020-09-04T12:01:11+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": 24828,
  "updater_id": 24828,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Delete an event

Note: Normal users can delete events logged to other projects by other users on an account. Limited users can only delete their own events.

Request

curl "https://api.timelyapp.com/1.1/8921/events/17705" -d '' -X DELETE \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer -A0WepePacbKkwRNNk5U5DfW6P4CKB8wwmnYK1TE2Ho" \
    -H "Cookie: "

Endpoint

DELETE /1.1/:account_id/events/:id

DELETE /1.1/8921/events/17705
Accept: application/json
Content-Type: application/json
Authorization: Bearer -A0WepePacbKkwRNNk5U5DfW6P4CKB8wwmnYK1TE2Ho

Parameters

Name Description
account_id The account ID containing the hour you want to delete
id required The ID for the hour you want to delete

Response

Content-Type: application/json; charset=utf-8
200 OK
{
}

List all events

Get all events linked to active projects on a user’s account.

Note: If “filter” param is not passed, the default returns current users's logged events, filter=planned returns planned events and filter=all returns logged and planned events.

Request

curl -g "https://api.timelyapp.com/1.1/8925/events" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer P9LAEMADnorYfZgf-84aUWzzuQbVhML_Ao-bBMFj7zo" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/events

GET /1.1/8925/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer P9LAEMADnorYfZgf-84aUWzzuQbVhML_Ao-bBMFj7zo

Parameters

Name Description
account_id The account ID containing the hours you want to retrieve
since Specifies the start date for returned results. Example: since=2014-08-18
upto Specifies the end date for returned results. Example: upto=2014-08-24
day Specifies the day date for returned results. Example: day=2014-08-24
filter Specifies which records to retrieve (Default logged). Example: filter=logged or filter=planned or filter=all

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 17709,
    "uid": "65ef909bda8e30e4e2bc3ce828ed870e",
    "user": {
      "id": 24842,
      "email": "marijaeedrujpg@timelyapp.com",
      "name": "Marija Petrovic",
      "avatar": {
        "large_retina": "https://www.gravatar.com/avatar/a1eba2b3ce5ce9ae704fa48fd0222156?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
        "large": "https://www.gravatar.com/avatar/a1eba2b3ce5ce9ae704fa48fd0222156?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
        "medium_retina": "https://www.gravatar.com/avatar/a1eba2b3ce5ce9ae704fa48fd0222156?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
        "medium": "https://www.gravatar.com/avatar/a1eba2b3ce5ce9ae704fa48fd0222156?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
        "timeline": "https://www.gravatar.com/avatar/a1eba2b3ce5ce9ae704fa48fd0222156?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
      },
      "updated_at": "2020-09-04T12:01:15+02:00"
    },
    "project": {
      "id": 42252,
      "active": true,
      "account_id": 8925,
      "name": "Timely",
      "color": "67a3bc",
      "rate_type": "project",
      "billable": true,
      "updated_at": 1599213675,
      "external_id": null,
      "budget_scope": null,
      "client": {
        "id": 9261,
        "name": "Timely",
        "active": true,
        "external_id": null,
        "updated_at": "2020-09-04T12:01:15+02:00"
      },
      "required_notes": false,
      "budget": 0,
      "budget_type": "",
      "hour_rate": 50.0,
      "hour_rate_in_cents": 5000.0,
      "budget_progress": 0.0,
      "budget_percent": 0.0,
      "labels": [

      ],
      "label_ids": [

      ],
      "required_label_ids": [

      ]
    },
    "duration": {
      "hours": 3,
      "minutes": 30,
      "seconds": 0,
      "formatted": "03:30",
      "total_hours": 3.5,
      "total_seconds": 12600,
      "total_minutes": 210
    },
    "estimated_duration": {
      "hours": 4,
      "minutes": 0,
      "seconds": 0,
      "formatted": "04:00",
      "total_hours": 4.0,
      "total_seconds": 14400,
      "total_minutes": 240
    },
    "cost": {
      "fractional": 17500,
      "formatted": "$175.00",
      "amount": 175.0
    },
    "estimated_cost": {
      "fractional": 20000,
      "formatted": "$200.00",
      "amount": 200.0
    },
    "day": "2020-09-04",
    "note": "Notes for testing with some random #hash in it.",
    "sequence": 1,
    "estimated": false,
    "timer_state": "default",
    "timer_started_on": 0,
    "timer_stopped_on": 0,
    "label_ids": [

    ],
    "user_ids": [

    ],
    "updated_at": 1599213675,
    "created_at": 1599213675,
    "created_from": "Web",
    "updated_from": "Web",
    "billed": false,
    "to": "2020-09-04T15:31:15+02:00",
    "from": "2020-09-04T12:01:15+02:00",
    "deleted": false,
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "creator_id": null,
    "updater_id": null,
    "external_id": null,
    "entry_ids": [

    ],
    "suggestion_id": null,
    "draft": false,
    "manage": true
  }
]

List all events for a project

Note: Normal users can access events logged to all projects on an account. Limited users can only access events in projects they belong to.

Request

curl -g "https://api.timelyapp.com/1.1/8927/projects/42254/events" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer auSzItjwAJODvQdTXOd4gpKaskrStIV7oJ2gd747hhk" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/projects/:project_id/events

GET /1.1/8927/projects/42254/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer auSzItjwAJODvQdTXOd4gpKaskrStIV7oJ2gd747hhk

Parameters

Name Description
account_id The account ID containing the hours you want to retrieve
project_id The project ID for the hours you want to retrieve
since Specifies the start date for returned results. Example: since=2014-08-18
upto Specifies the end date for returned results. Example: upto=2014-08-24
day Specifies the day date for returned results. Example: day=2014-08-24

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 17711,
    "uid": "329b389349bbd4ab51e9b50ff0a1a885",
    "user": {
      "id": 24846,
      "email": "marijadvuirmvf@timelyapp.com",
      "name": "Marija Petrovic",
      "avatar": {
        "large_retina": "https://www.gravatar.com/avatar/84500867816f9f536f0fda8401a6ae4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
        "large": "https://www.gravatar.com/avatar/84500867816f9f536f0fda8401a6ae4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
        "medium_retina": "https://www.gravatar.com/avatar/84500867816f9f536f0fda8401a6ae4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
        "medium": "https://www.gravatar.com/avatar/84500867816f9f536f0fda8401a6ae4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
        "timeline": "https://www.gravatar.com/avatar/84500867816f9f536f0fda8401a6ae4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
      },
      "updated_at": "2020-09-04T12:01:16+02:00"
    },
    "project": {
      "id": 42254,
      "active": true,
      "account_id": 8927,
      "name": "Timely",
      "color": "67a3bc",
      "rate_type": "project",
      "billable": true,
      "updated_at": 1599213677,
      "external_id": null,
      "budget_scope": null,
      "client": {
        "id": 9263,
        "name": "Timely",
        "active": true,
        "external_id": null,
        "updated_at": "2020-09-04T12:01:17+02:00"
      },
      "required_notes": false,
      "budget": 0,
      "budget_type": "",
      "hour_rate": 50.0,
      "hour_rate_in_cents": 5000.0,
      "budget_progress": 0.0,
      "budget_percent": 0.0,
      "labels": [

      ],
      "label_ids": [

      ],
      "required_label_ids": [

      ]
    },
    "duration": {
      "hours": 3,
      "minutes": 30,
      "seconds": 0,
      "formatted": "03:30",
      "total_hours": 3.5,
      "total_seconds": 12600,
      "total_minutes": 210
    },
    "estimated_duration": {
      "hours": 4,
      "minutes": 0,
      "seconds": 0,
      "formatted": "04:00",
      "total_hours": 4.0,
      "total_seconds": 14400,
      "total_minutes": 240
    },
    "cost": {
      "fractional": 17500,
      "formatted": "$175.00",
      "amount": 175.0
    },
    "estimated_cost": {
      "fractional": 20000,
      "formatted": "$200.00",
      "amount": 200.0
    },
    "day": "2020-09-04",
    "note": "Notes for testing with some random #hash in it.",
    "sequence": 1,
    "estimated": false,
    "timer_state": "default",
    "timer_started_on": 0,
    "timer_stopped_on": 0,
    "label_ids": [

    ],
    "user_ids": [

    ],
    "updated_at": 1599213677,
    "created_at": 1599213677,
    "created_from": "Web",
    "updated_from": "Web",
    "billed": false,
    "to": "2020-09-04T15:31:17+02:00",
    "from": "2020-09-04T12:01:17+02:00",
    "deleted": false,
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "creator_id": null,
    "updater_id": null,
    "external_id": null,
    "entry_ids": [

    ],
    "suggestion_id": null,
    "draft": false,
    "manage": true
  }
]

List all events for a user

Note: Normal users can access events logged by other users on an account. Limited users can only access their own logged events.

Request

curl -g "https://api.timelyapp.com/1.1/8926/users/24844/events" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 6rts5hIWx19VsjJv6R18hE11qCDAc1D5g5r05rY8L-s" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/users/:user_id/events

GET /1.1/8926/users/24844/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer 6rts5hIWx19VsjJv6R18hE11qCDAc1D5g5r05rY8L-s

Parameters

Name Description
account_id The account ID containing the hours you want to retrieve
user_id The user ID for the hours you want to retrieve
since Specifies the start date for returned results. Example: since=2014-08-18
upto Specifies the end date for returned results. Example: upto=2014-08-24
day Specifies the day date for returned results. Example: day=2014-08-24

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 17710,
    "uid": "9e284987861e168601af5d3582b0fede",
    "user": {
      "id": 24844,
      "email": "marijayfxoscai@timelyapp.com",
      "name": "Marija Petrovic",
      "avatar": {
        "large_retina": "https://www.gravatar.com/avatar/3936da3db0713bc9fa5b2f55889574a8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
        "large": "https://www.gravatar.com/avatar/3936da3db0713bc9fa5b2f55889574a8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
        "medium_retina": "https://www.gravatar.com/avatar/3936da3db0713bc9fa5b2f55889574a8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
        "medium": "https://www.gravatar.com/avatar/3936da3db0713bc9fa5b2f55889574a8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
        "timeline": "https://www.gravatar.com/avatar/3936da3db0713bc9fa5b2f55889574a8?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
      },
      "updated_at": "2020-09-04T12:01:16+02:00"
    },
    "project": {
      "id": 42253,
      "active": true,
      "account_id": 8926,
      "name": "Timely",
      "color": "67a3bc",
      "rate_type": "project",
      "billable": true,
      "updated_at": 1599213676,
      "external_id": null,
      "budget_scope": null,
      "client": {
        "id": 9262,
        "name": "Timely",
        "active": true,
        "external_id": null,
        "updated_at": "2020-09-04T12:01:16+02:00"
      },
      "required_notes": false,
      "budget": 0,
      "budget_type": "",
      "hour_rate": 50.0,
      "hour_rate_in_cents": 5000.0,
      "budget_progress": 0.0,
      "budget_percent": 0.0,
      "labels": [

      ],
      "label_ids": [

      ],
      "required_label_ids": [

      ]
    },
    "duration": {
      "hours": 3,
      "minutes": 30,
      "seconds": 0,
      "formatted": "03:30",
      "total_hours": 3.5,
      "total_seconds": 12600,
      "total_minutes": 210
    },
    "estimated_duration": {
      "hours": 4,
      "minutes": 0,
      "seconds": 0,
      "formatted": "04:00",
      "total_hours": 4.0,
      "total_seconds": 14400,
      "total_minutes": 240
    },
    "cost": {
      "fractional": 17500,
      "formatted": "$175.00",
      "amount": 175.0
    },
    "estimated_cost": {
      "fractional": 20000,
      "formatted": "$200.00",
      "amount": 200.0
    },
    "day": "2020-09-04",
    "note": "Notes for testing with some random #hash in it.",
    "sequence": 1,
    "estimated": false,
    "timer_state": "default",
    "timer_started_on": 0,
    "timer_stopped_on": 0,
    "label_ids": [

    ],
    "user_ids": [

    ],
    "updated_at": 1599213676,
    "created_at": 1599213676,
    "created_from": "Web",
    "updated_from": "Web",
    "billed": false,
    "to": "2020-09-04T15:31:16+02:00",
    "from": "2020-09-04T12:01:16+02:00",
    "deleted": false,
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "creator_id": null,
    "updater_id": null,
    "external_id": null,
    "entry_ids": [

    ],
    "suggestion_id": null,
    "draft": false,
    "manage": true
  }
]

Logged in user updating details and user of an event

Note: Normal users can change an event’s creator to another user on their account. Limited users cannot edit event details.

Request

curl "https://api.timelyapp.com/1.1/8932/users/24856/events/17716" -d '{"event":{"note":"Updated details and project","minutes":0,"hours":0,"estimated":true,"estimated_minutes":0,"estimated_hours":2}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Tosvqxs67d4qf2qy0Ljf793YEcQyu48tX4KNSCbLidk" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/users/:user_id/events/:id

PUT /1.1/8932/users/24856/events/17716
Accept: application/json
Content-Type: application/json
Authorization: Bearer Tosvqxs67d4qf2qy0Ljf793YEcQyu48tX4KNSCbLidk

Parameters

{"event":{"note":"Updated details and project","minutes":0,"hours":0,"estimated":true,"estimated_minutes":0,"estimated_hours":2}}
Name Description
id required Event ID
day required Event day
hours required Event hours
minutes required Event minutes
estimated_minutes Specifies estimated minutes for an event. Example values: 0-60
estimated_hours Specifies estimated hours for an event. Example values: 0-12
note Specifies notes for an event
from Specifies the “from” time in a timestamp. Example values: from: "2017-05-26T10:00:00+05:30"
to Specifies the “to” time in a timestamp. Example values: to: "2017-05-26T12:00:00+05:30"
label_ids Specifies label IDs for an event. Example values: label_ids:[2,3,4]
project_id Specifies the project ID for an event
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 17716,
  "uid": "88fb5550341fd3bb49edeb9c7a006747",
  "user": {
    "id": 24856,
    "email": "marijaegyayxbq@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/8602cef26c467d00a6e3bdbd9917870e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/8602cef26c467d00a6e3bdbd9917870e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/8602cef26c467d00a6e3bdbd9917870e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/8602cef26c467d00a6e3bdbd9917870e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/8602cef26c467d00a6e3bdbd9917870e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:19+02:00"
  },
  "project": {
    "id": 42259,
    "active": true,
    "account_id": 8932,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213680,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9268,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:20+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "estimated_duration": {
    "hours": 4,
    "minutes": 0,
    "seconds": 0,
    "formatted": "04:00",
    "total_hours": 4.0,
    "total_seconds": 14400,
    "total_minutes": 240
  },
  "cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "estimated_cost": {
    "fractional": 20000,
    "formatted": "$200.00",
    "amount": 200.0
  },
  "day": "2020-09-04",
  "note": "Updated details and project",
  "sequence": 1,
  "estimated": true,
  "timer_state": "default",
  "timer_started_on": 0,
  "timer_stopped_on": 0,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213680,
  "created_at": 1599213680,
  "created_from": "Web",
  "updated_from": "Timely",
  "billed": false,
  "to": "2020-09-04T15:31:20+02:00",
  "from": "2020-09-04T12:01:20+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": null,
  "updater_id": 24856,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Loggedin user updating details and project of their event

Request

curl "https://api.timelyapp.com/1.1/8931/projects/42258/events/17715" -d '{"event":{"note":"Updated details and project","minutes":0,"hours":0,"estimated":true,"estimated_minutes":0,"estimated_hours":2}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer gQhJWDLVgWHujsrZ3nth3k5srFq9jDgQtJc33fA7EQ4" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/projects/:project_id/events/:id

PUT /1.1/8931/projects/42258/events/17715
Accept: application/json
Content-Type: application/json
Authorization: Bearer gQhJWDLVgWHujsrZ3nth3k5srFq9jDgQtJc33fA7EQ4

Parameters

{"event":{"note":"Updated details and project","minutes":0,"hours":0,"estimated":true,"estimated_minutes":0,"estimated_hours":2}}
Name Description
id required Event ID
project_id required Project ID
day required Event day
hours required Event hours
minutes required Event minutes
estimated_minutes Specifies estimated minutes for an event. Example values: 0-60
estimated_hours Specifies estimated hours for an event. Example values: 0-12
note Specifies notes for an event
from Specifies the “from” time in a timestamp. Example values: from: "2017-05-26T10:00:00+05:30"
to Specifies the “to” time in a timestamp. Example values: to: "2017-05-26T12:00:00+05:30"
label_ids Specifies label IDs for an event. Example values: label_ids:[2,3,4]
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 17715,
  "uid": "03f49b05efdd5edf3b57ed84b1cfb226",
  "user": {
    "id": 24854,
    "email": "marijasqyfggmn@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/0d12c2a64bd9587e5e7e787a57b097fb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/0d12c2a64bd9587e5e7e787a57b097fb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/0d12c2a64bd9587e5e7e787a57b097fb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/0d12c2a64bd9587e5e7e787a57b097fb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/0d12c2a64bd9587e5e7e787a57b097fb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:19+02:00"
  },
  "project": {
    "id": 42258,
    "active": true,
    "account_id": 8931,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213679,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9267,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:19+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "estimated_duration": {
    "hours": 4,
    "minutes": 0,
    "seconds": 0,
    "formatted": "04:00",
    "total_hours": 4.0,
    "total_seconds": 14400,
    "total_minutes": 240
  },
  "cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "estimated_cost": {
    "fractional": 20000,
    "formatted": "$200.00",
    "amount": 200.0
  },
  "day": "2020-09-04",
  "note": "Updated details and project",
  "sequence": 1,
  "estimated": true,
  "timer_state": "default",
  "timer_started_on": 0,
  "timer_stopped_on": 0,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213679,
  "created_at": 1599213679,
  "created_from": "Web",
  "updated_from": "Timely",
  "billed": false,
  "to": "2020-09-04T15:31:19+02:00",
  "from": "2020-09-04T12:01:19+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": null,
  "updater_id": 24854,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Retrieve an event

Request

curl -g "https://api.timelyapp.com/1.1/8924/events/17708" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer AMLyfgDlDYLEiu066SU8WaJ10YzTitWpNL1O6Y9lLRw" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/events/:id

GET /1.1/8924/events/17708
Accept: application/json
Content-Type: application/json
Authorization: Bearer AMLyfgDlDYLEiu066SU8WaJ10YzTitWpNL1O6Y9lLRw

Parameters

Name Description
account_id The account ID containing the hour you want to retrieve
id The ID of the hour you want to retrieve

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 17708,
  "uid": "a2c37478e74595e450b880721a3193fc",
  "user": {
    "id": 24840,
    "email": "marijausjkosdm@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/a303a59c70d2dea56407bdb4991fa519?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/a303a59c70d2dea56407bdb4991fa519?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/a303a59c70d2dea56407bdb4991fa519?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/a303a59c70d2dea56407bdb4991fa519?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/a303a59c70d2dea56407bdb4991fa519?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:14+02:00"
  },
  "project": {
    "id": 42251,
    "active": true,
    "account_id": 8924,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213675,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9260,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:15+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 3,
    "minutes": 30,
    "seconds": 0,
    "formatted": "03:30",
    "total_hours": 3.5,
    "total_seconds": 12600,
    "total_minutes": 210
  },
  "estimated_duration": {
    "hours": 4,
    "minutes": 0,
    "seconds": 0,
    "formatted": "04:00",
    "total_hours": 4.0,
    "total_seconds": 14400,
    "total_minutes": 240
  },
  "cost": {
    "fractional": 17500,
    "formatted": "$175.00",
    "amount": 175.0
  },
  "estimated_cost": {
    "fractional": 20000,
    "formatted": "$200.00",
    "amount": 200.0
  },
  "day": "2020-09-04",
  "note": "Notes for testing with some random #hash in it.",
  "sequence": 1,
  "estimated": false,
  "timer_state": "default",
  "timer_started_on": 0,
  "timer_stopped_on": 0,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213675,
  "created_at": 1599213675,
  "created_from": "Web",
  "updated_from": "Web",
  "billed": false,
  "to": "2020-09-04T15:31:15+02:00",
  "from": "2020-09-04T12:01:15+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": null,
  "updater_id": null,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Start timer on an event

Request

curl "https://api.timelyapp.com/1.1/8928/events/17712/start" -d '' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer AqRFZLttF7birHhtj86cb56G5KEFWq17aEIWoIfBJfQ" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/events/:id/start

PUT /1.1/8928/events/17712/start
Accept: application/json
Content-Type: application/json
Authorization: Bearer AqRFZLttF7birHhtj86cb56G5KEFWq17aEIWoIfBJfQ

Parameters

Name Description
id required Event ID

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 17712,
  "uid": "fed976a4672b5ad568fc569efdb02758",
  "user": {
    "id": 24848,
    "email": "marijairddrttl@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/0ef1e4195606972bc4536d9a1f2954e5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/0ef1e4195606972bc4536d9a1f2954e5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/0ef1e4195606972bc4536d9a1f2954e5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/0ef1e4195606972bc4536d9a1f2954e5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/0ef1e4195606972bc4536d9a1f2954e5?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:17+02:00"
  },
  "project": {
    "id": 42255,
    "active": true,
    "account_id": 8928,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213677,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9264,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:17+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 3,
    "minutes": 30,
    "seconds": 0,
    "formatted": "03:30",
    "total_hours": 3.5,
    "total_seconds": 12600,
    "total_minutes": 210
  },
  "estimated_duration": {
    "hours": 4,
    "minutes": 0,
    "seconds": 0,
    "formatted": "04:00",
    "total_hours": 4.0,
    "total_seconds": 14400,
    "total_minutes": 240
  },
  "cost": {
    "fractional": 17500,
    "formatted": "$175.00",
    "amount": 175.0
  },
  "estimated_cost": {
    "fractional": 20000,
    "formatted": "$200.00",
    "amount": 200.0
  },
  "day": "2020-09-04",
  "note": "Notes for testing with some random #hash in it.",
  "sequence": 1,
  "estimated": false,
  "timer_state": "start",
  "timer_started_on": 1599213677,
  "timer_stopped_on": 0,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213677,
  "created_at": 1599213677,
  "created_from": "Web",
  "updated_from": "Timely",
  "billed": false,
  "to": "2020-09-04T15:31:17+02:00",
  "from": "2020-09-04T12:01:17+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": null,
  "updater_id": 24848,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Stop timer on an event

Request

curl "https://api.timelyapp.com/1.1/8929/events/17713/stop" -d '' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer -GgaZfC2SHFEYXW0fMdH-t83leGKcV2PyoTgK0RWnhA" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/events/:id/stop

PUT /1.1/8929/events/17713/stop
Accept: application/json
Content-Type: application/json
Authorization: Bearer -GgaZfC2SHFEYXW0fMdH-t83leGKcV2PyoTgK0RWnhA

Parameters

Name Description
id required Event ID

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 17713,
  "uid": "e2db197e07804d57f3af6c3bd1368f5e",
  "user": {
    "id": 24850,
    "email": "marijawgnilibi@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/d274d7c70c324019ca82c3a5f2955d18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/d274d7c70c324019ca82c3a5f2955d18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/d274d7c70c324019ca82c3a5f2955d18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/d274d7c70c324019ca82c3a5f2955d18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/d274d7c70c324019ca82c3a5f2955d18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:17+02:00"
  },
  "project": {
    "id": 42256,
    "active": true,
    "account_id": 8929,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213678,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9265,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:18+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 4,
    "minutes": 30,
    "seconds": 0,
    "formatted": "04:30",
    "total_hours": 4.5,
    "total_seconds": 16200,
    "total_minutes": 270
  },
  "estimated_duration": {
    "hours": 4,
    "minutes": 0,
    "seconds": 0,
    "formatted": "04:00",
    "total_hours": 4.0,
    "total_seconds": 14400,
    "total_minutes": 240
  },
  "cost": {
    "fractional": 22500,
    "formatted": "$225.00",
    "amount": 225.0
  },
  "estimated_cost": {
    "fractional": 20000,
    "formatted": "$200.00",
    "amount": 200.0
  },
  "day": "2020-09-04",
  "note": "Notes for testing with some random #hash in it.",
  "sequence": 1,
  "estimated": false,
  "timer_state": "stop",
  "timer_started_on": 0,
  "timer_stopped_on": 1599213678,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213678,
  "created_at": 1599213678,
  "created_from": "Web",
  "updated_from": "Timely",
  "billed": false,
  "to": "2020-09-04T15:31:18+02:00",
  "from": "2020-09-04T12:01:18+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": null,
  "updater_id": 24850,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Update an event

Note: Normal users can edit the project_id and events created by other users on their account. Limited users can only edit their own events.

Request

curl "https://api.timelyapp.com/1.1/8930/events/17714" -d '{"event":{"note":"Updated notes","minutes":0,"hours":0,"estimated":true,"estimated_minutes":0,"estimated_hours":2}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer C7l6jEioagYxHEDe7Ldo2N1OCgQi77LTKadDDcj3_mY" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/events/:id

PUT /1.1/8930/events/17714
Accept: application/json
Content-Type: application/json
Authorization: Bearer C7l6jEioagYxHEDe7Ldo2N1OCgQi77LTKadDDcj3_mY

Parameters

{"event":{"note":"Updated notes","minutes":0,"hours":0,"estimated":true,"estimated_minutes":0,"estimated_hours":2}}
Name Description
id required Event ID
day required Event day
hours required Event hours
minutes required Event minutes
project_id Project ID
estimated_minutes Specifies estimated minutes for an event. Example values: 0-60
estimated_hours Specifies estimated hours for an event. Example values: 0-12
note Specifies notes for an event
from Specifies the “from” time in a timestamp. Example values: from: "2017-05-26T10:00:00+05:30"
to Specifies the “to” time in a timestamp. Example values: to: "2017-05-26T12:00:00+05:30"
label_ids Specifies label IDs for an event. Example values: label_ids:[2,3,4]
external_id The external_id can be used to reference external resource ids to Timely resources, should be alphanumeric 512 characters

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 17714,
  "uid": "6f612fb837c33214c0bdae50c8189d16",
  "user": {
    "id": 24852,
    "email": "marijaehefrfac@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/a1a15fea5d4b3a2803c93c76b3f8cacb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/a1a15fea5d4b3a2803c93c76b3f8cacb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/a1a15fea5d4b3a2803c93c76b3f8cacb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/a1a15fea5d4b3a2803c93c76b3f8cacb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/a1a15fea5d4b3a2803c93c76b3f8cacb?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:18+02:00"
  },
  "project": {
    "id": 42257,
    "active": true,
    "account_id": 8930,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213679,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9266,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:19+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ]
  },
  "duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "estimated_duration": {
    "hours": 4,
    "minutes": 0,
    "seconds": 0,
    "formatted": "04:00",
    "total_hours": 4.0,
    "total_seconds": 14400,
    "total_minutes": 240
  },
  "cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "estimated_cost": {
    "fractional": 20000,
    "formatted": "$200.00",
    "amount": 200.0
  },
  "day": "2020-09-04",
  "note": "Updated notes",
  "sequence": 1,
  "estimated": true,
  "timer_state": "default",
  "timer_started_on": 0,
  "timer_stopped_on": 0,
  "label_ids": [

  ],
  "user_ids": [

  ],
  "updated_at": 1599213679,
  "created_at": 1599213679,
  "created_from": "Web",
  "updated_from": "Timely",
  "billed": false,
  "to": "2020-09-04T15:31:19+02:00",
  "from": "2020-09-04T12:01:19+02:00",
  "deleted": false,
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "creator_id": null,
  "updater_id": 24852,
  "external_id": null,
  "entry_ids": [

  ],
  "suggestion_id": null,
  "draft": false,
  "manage": true
}

Forecasts (beta)

Forecasts (currently in beta as "Planning") lets you visualize upcoming work for all Timely users in one clean calendar view. You can then quickly assign work or edit plans across your different projects and teams.

Create a forecast

Request

curl "https://api.timelyapp.com/1.1/8935/forecasts" -d '{"from":"2019-05-10","to":"2019-05-16","forecasts":{"note":"Note","from":"2019-05-10","to":"2019-05-16","hours":6,"minutes":0,"user_id":24862,"project_id":42262}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 8i8bAqNGqQkx2ZUV96Yvc7bkmrVYFPz86mUWZ7uBKIY" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/forecasts

POST /1.1/8935/forecasts
Accept: application/json
Content-Type: application/json
Authorization: Bearer 8i8bAqNGqQkx2ZUV96Yvc7bkmrVYFPz86mUWZ7uBKIY

Parameters

{"from":"2019-05-10","to":"2019-05-16","forecasts":{"note":"Note","from":"2019-05-10","to":"2019-05-16","hours":6,"minutes":0,"user_id":24862,"project_id":42262}}
Name Description
hours required Forecast hours
minutes required Forecast minutes
note Specifies notes for a forecast
from Specifies the “from” time in a timestamp. Example values: from: "2017-05-26T10:00:00+05:30"
to Specifies the “to” time in a timestamp. Example values: to: "2017-05-26T12:00:00+05:30"
user_id required The numerical ID of the desired user. Example values: 123
project_id required The numerical ID of the desired project. Example values: 123
label_ids Specifies label IDs for a forecast. Example values: label_ids:[2,3,4]

Response

Content-Type: application/json; charset=utf-8
201 Created
{
  "id": 430,
  "note": "Note",
  "from": "2019-05-10",
  "to": "2019-05-16",
  "user": {
    "id": 24862,
    "email": "marijaaqkcibsf@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/b34b7905808542688baaaee20894fd29?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/b34b7905808542688baaaee20894fd29?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/b34b7905808542688baaaee20894fd29?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/b34b7905808542688baaaee20894fd29?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/b34b7905808542688baaaee20894fd29?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:21+02:00"
  },
  "project": {
    "id": 42262,
    "active": true,
    "name": "Timely",
    "color": "67a3bc",
    "client": {
      "id": 9271,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:21+02:00"
    },
    "updated_at": "2020-09-04T12:01:22+02:00"
  },
  "hours": 6,
  "minutes": 0,
  "duration": {
    "hours": 6,
    "minutes": 0,
    "seconds": 0,
    "formatted": "06:00",
    "total_hours": 6.0,
    "total_seconds": 21600,
    "total_minutes": 360
  },
  "updated_at": "2020-09-04T12:01:21+02:00",
  "created_at": "2020-09-04T12:01:21+02:00",
  "label_ids": [

  ]
}

Delete a forecast

Request

curl "https://api.timelyapp.com/1.1/8936/forecasts/431" -d '' -X DELETE \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer xj19nPpfEUnJanl3kWPmpsuv0vGcxMaeO_M9nA-O2Jw" \
    -H "Cookie: "

Endpoint

DELETE /1.1/:account_id/forecasts/:id

DELETE /1.1/8936/forecasts/431
Accept: application/json
Content-Type: application/json
Authorization: Bearer xj19nPpfEUnJanl3kWPmpsuv0vGcxMaeO_M9nA-O2Jw

Parameters

Name Description
account_id The account ID containing the forecast you want to delete
id required The ID for the forecast you want to delete

Response

Content-Type: application/json; charset=utf-8
200 OK
{
}

List all forecasts

Request

curl -g "https://api.timelyapp.com/1.1/8937/forecasts" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer CvON4YrtVEaAwZopQgmZ_YCTs-pa6d832wki15ApFAE" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/forecasts

GET /1.1/8937/forecasts
Accept: application/json
Content-Type: application/json
Authorization: Bearer CvON4YrtVEaAwZopQgmZ_YCTs-pa6d832wki15ApFAE

Parameters

Name Description
account_id The account ID containing the forecasts you want to retrieve
user_id The user ID for the forecasts you want to retrieve
since Specifies the start date for returned results. Example: since=2014-08-18
upto Specifies the end date for returned results. Example: upto=2014-08-24
forecast_ids Specifies the forecasts for which you want results. Numerical forecast IDs should separated by a comma, like so: "user_ids": "175551,117861"
user_ids Specifies the users for which you want results. Numerical user IDs should separated by a comma, like so: "user_ids": "175551,117861"
project_ids Specifies the projects for which you want results. Numerical project IDs should be separated by a comma, like so: "project_ids": "1751,1171"
page Page number (Default 1)
per_page Records per page (Default 50)

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 432,
    "note": "note",
    "from": "2020-08-31",
    "to": "2020-09-06",
    "user": {
      "id": 24866,
      "email": "marijaaigpqisn@timelyapp.com",
      "name": "Marija Petrovic",
      "avatar": {
        "large_retina": "https://www.gravatar.com/avatar/8469ac6227b5269db1ab9681613be4bc?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
        "large": "https://www.gravatar.com/avatar/8469ac6227b5269db1ab9681613be4bc?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
        "medium_retina": "https://www.gravatar.com/avatar/8469ac6227b5269db1ab9681613be4bc?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
        "medium": "https://www.gravatar.com/avatar/8469ac6227b5269db1ab9681613be4bc?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
        "timeline": "https://www.gravatar.com/avatar/8469ac6227b5269db1ab9681613be4bc?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
      },
      "updated_at": "2020-09-04T12:01:22+02:00"
    },
    "project": {
      "id": 42264,
      "active": true,
      "name": "Timely",
      "color": "67a3bc",
      "client": {
        "id": 9273,
        "name": "Timely",
        "active": true,
        "external_id": null,
        "updated_at": "2020-09-04T12:01:23+02:00"
      },
      "updated_at": "2020-09-04T12:01:23+02:00"
    },
    "hours": 6,
    "minutes": 0,
    "duration": {
      "hours": 6,
      "minutes": 0,
      "seconds": 0,
      "formatted": "06:00",
      "total_hours": 6.0,
      "total_seconds": 21600,
      "total_minutes": 360
    },
    "updated_at": "2020-09-04T12:01:23+02:00",
    "created_at": "2020-09-04T12:01:23+02:00",
    "label_ids": [

    ]
  }
]

Update a forecast

Request

curl "https://api.timelyapp.com/1.1/8938/forecasts/433" -d '{"forecasts":{"note":"new note","from":"2019-05-10","to":"2019-05-16","hours":2,"minutes":0,"user_id":24868,"project_id":42265}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer KyY8nQLtBaOz-hGqH846utuP2-LAsDjv_3MRmBgyhCU" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/forecasts/:id

PUT /1.1/8938/forecasts/433
Accept: application/json
Content-Type: application/json
Authorization: Bearer KyY8nQLtBaOz-hGqH846utuP2-LAsDjv_3MRmBgyhCU

Parameters

{"forecasts":{"note":"new note","from":"2019-05-10","to":"2019-05-16","hours":2,"minutes":0,"user_id":24868,"project_id":42265}}
Name Description
id required Forecast ID
hours required Forecast hours
minutes required Forecast minutes
note Specifies notes for a forecast
from Specifies the “from” time in a timestamp. Example values: from: "2017-05-26T10:00:00+05:30"
to Specifies the “to” time in a timestamp. Example values: to: "2017-05-26T12:00:00+05:30"
user_id required The numerical ID of the desired user. Example values: 123
project_id required The numerical ID of the desired project. Example values: 123
label_ids Specifies label IDs for a forecast. Example values: label_ids:[2,3,4]

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 433,
  "note": "new note",
  "from": "2019-05-10",
  "to": "2019-05-16",
  "user": {
    "id": 24868,
    "email": "marijaivjotnnm@timelyapp.com",
    "name": "Marija Petrovic",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/3ac828ea01e96687034b9a76649470b9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/3ac828ea01e96687034b9a76649470b9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
      "medium_retina": "https://www.gravatar.com/avatar/3ac828ea01e96687034b9a76649470b9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/3ac828ea01e96687034b9a76649470b9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
      "timeline": "https://www.gravatar.com/avatar/3ac828ea01e96687034b9a76649470b9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
    },
    "updated_at": "2020-09-04T12:01:23+02:00"
  },
  "project": {
    "id": 42265,
    "active": true,
    "name": "Timely",
    "color": "67a3bc",
    "client": {
      "id": 9274,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:23+02:00"
    },
    "updated_at": "2020-09-04T12:01:23+02:00"
  },
  "hours": 2,
  "minutes": 0,
  "duration": {
    "hours": 2,
    "minutes": 0,
    "seconds": 0,
    "formatted": "02:00",
    "total_hours": 2.0,
    "total_seconds": 7200,
    "total_minutes": 120
  },
  "updated_at": "2020-09-04T12:01:23+02:00",
  "created_at": "2020-09-04T12:01:23+02:00",
  "label_ids": [

  ]
}

Labels

Labels (AKA Tags) help you classify work, group related tasks and require certain information for events. This API lets you to create, list, update and delete tags created on an account.

Create a label

Request

curl "https://api.timelyapp.com/1.1/8951/labels" -d '{"label":{"name":"Web Programming"}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer eN24Xdp3IYnOdMczg_sEqmlTNkhiXbO0KGrdT8BASDw" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/labels

POST /1.1/8951/labels
Accept: application/json
Content-Type: application/json
Authorization: Bearer eN24Xdp3IYnOdMczg_sEqmlTNkhiXbO0KGrdT8BASDw

Parameters

{"label":{"name":"Web Programming"}}
Name Description
name required Specifies the label name
emoji Specifies the emoji url for a label
parent_id Set a parent_id if you want to create a child label

Response

Content-Type: application/json; charset=utf-8
201 Created
{
  "id": 4810,
  "name": "Web Programming",
  "sequence": 1,
  "parent_id": null,
  "emoji": "https://raw.githubusercontent.com/iamcal/emoji-data/v4.0.4/img-twitter-64/1f3f7-fe0f.png",
  "children": [

  ]
}

Delete a label

Request

curl "https://api.timelyapp.com/1.1/8952/labels/4811" -d '' -X DELETE \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer FfseLLz7XS40EfV17bMgABdtvnKu_LdkPQEVbwV1FIA" \
    -H "Cookie: "

Endpoint

DELETE /1.1/:account_id/labels/:id

DELETE /1.1/8952/labels/4811
Accept: application/json
Content-Type: application/json
Authorization: Bearer FfseLLz7XS40EfV17bMgABdtvnKu_LdkPQEVbwV1FIA

Parameters

Name Description
account_id The account ID containing the label you want to delete
id The ID of the label you want to delete

Response

Content-Type: application/json; charset=utf-8
200 OK
{
}

List all child labels

Get the children of any tag on a user’s account.

Request

curl -g "https://api.timelyapp.com/1.1/8955/labels?parent_id=4813" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 5PrIU9tEIBkGLTrItj0dNmsgziBmNnUnaGVjsBAce_c" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/labels

GET /1.1/8955/labels?parent_id=4813
Accept: application/json
Content-Type: application/json
Authorization: Bearer 5PrIU9tEIBkGLTrItj0dNmsgziBmNnUnaGVjsBAce_c

Parameters

parent_id: 4813
Name Description
account_id The account ID containing the label you want to. retrieve
parent_id The parent ID whose children you want to retrieve

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 4813,
  "name": "Web Programming",
  "sequence": 1,
  "parent_id": null,
  "emoji": null,
  "children": [

  ]
}

List all labels

Get all the tags present in user’s account.

Request

curl -g "https://api.timelyapp.com/1.1/8954/labels" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer VIbnUtqGZN_rrcXKRyJAhU5J2VsYvP5eZ83EYdGRgZ8" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/labels

GET /1.1/8954/labels
Accept: application/json
Content-Type: application/json
Authorization: Bearer VIbnUtqGZN_rrcXKRyJAhU5J2VsYvP5eZ83EYdGRgZ8

Parameters

None known.

Response

Content-Type: application/json; charset=utf-8
200 OK
[

]

Retrieve a label

Get single tags present in user’s account.

Request

curl -g "https://api.timelyapp.com/1.1/8953/labels/4812" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer N4YlF8XA-mY-Rlal9yHZsr91oIKcPlJsaoKtzn-ZO1E" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/labels/:id

GET /1.1/8953/labels/4812
Accept: application/json
Content-Type: application/json
Authorization: Bearer N4YlF8XA-mY-Rlal9yHZsr91oIKcPlJsaoKtzn-ZO1E

Parameters

Name Description
account_id The account ID containing the label you want to. retrieve
id The ID of the label you want to retrieve

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 4812,
  "name": "Web Programming",
  "sequence": 1,
  "parent_id": null,
  "emoji": null,
  "children": [

  ]
}

Update a label

Request

curl "https://api.timelyapp.com/1.1/8956/labels/4814" -d '{"label":{"name":"updated name"}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Voc-1D6Uv2-5GwCWQe9ZJV9eMUcQ8MNY0-28EvDQD5c" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/labels/:id

PUT /1.1/8956/labels/4814
Accept: application/json
Content-Type: application/json
Authorization: Bearer Voc-1D6Uv2-5GwCWQe9ZJV9eMUcQ8MNY0-28EvDQD5c

Parameters

{"label":{"name":"updated name"}}
Name Description
id required Label ID
name required Specifies the label name
emoji Specifies the emoji url for a tag
parent_id Set a parent_id if you want to create a child label

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 4814,
  "name": "updated name",
  "sequence": 1,
  "parent_id": null,
  "emoji": "https://raw.githubusercontent.com/iamcal/emoji-data/v4.0.4/img-twitter-64/1f3f7-fe0f.png",
  "children": [

  ]
}

Permissions

Retrieve current user's permissions

Using the account id one can see the currently logged user's permissions

Request

curl -g "https://api.timelyapp.com/1.1/8967/users/current/permissions" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer LtsAxW_pKDIicl1U7bnVjG77Lv_nr7GFvgJH31zAGtQ" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/users/current/permissions

GET /1.1/8967/users/current/permissions
Accept: application/json
Content-Type: application/json
Authorization: Bearer LtsAxW_pKDIicl1U7bnVjG77Lv_nr7GFvgJH31zAGtQ

Parameters

Name Description
account_id Account id for which current user's permissions are to be retrieved

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "resource": "user",
    "permissions": [
      "create",
      "read",
      "update",
      "delete",
      "notify"
    ]
  },
  {
    "resource": "project",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "label",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "company",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "team",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "account",
    "permissions": [
      "create",
      "read",
      "update",
      "manage_plan",
      "manage_subscriptions",
      "manage_dev"
    ]
  },
  {
    "resource": "report",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "forecast",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  }
]

Retrieve user's permissions by id

Using the account id and user id one can see a specific user's permissions

Request

curl -g "https://api.timelyapp.com/1.1/8968/users/24925/permissions" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 0uSPp0us1cg8d8IPrDsEvy7OGTxvLBZVh_IX0Fmh878" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/users/:user_id/permissions

GET /1.1/8968/users/24925/permissions
Accept: application/json
Content-Type: application/json
Authorization: Bearer 0uSPp0us1cg8d8IPrDsEvy7OGTxvLBZVh_IX0Fmh878

Parameters

Name Description
account_id Account for which user's permissions are required
user_id User whose permissions are required

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "resource": "user",
    "permissions": [
      "create",
      "read",
      "update",
      "delete",
      "notify"
    ]
  },
  {
    "resource": "project",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "label",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "company",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "team",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "account",
    "permissions": [
      "create",
      "read",
      "update",
      "manage_plan",
      "manage_subscriptions",
      "manage_dev"
    ]
  },
  {
    "resource": "report",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  },
  {
    "resource": "forecast",
    "permissions": [
      "create",
      "read",
      "update",
      "delete"
    ]
  }
]

Projects

Projects contain all the project details on an account. With this API, you can retrieve, update, create or delete a specific project, or list all projects.

Create a project

Request

curl "https://api.timelyapp.com/1.1/8974/projects" -d '{"project":{"name":"New Project","rate_type":"project","hour_rate":50.0,"active":true,"deleted":false,"currency_code":"usd","color":"67a3bc","client_id":9299,"budget_type":"M","budget":300,"users":[{"user_id":24937}],"budget_recurrence":{"recur":"week","start_date":"2018-09-21","end_date":"2019-09-21","recur_until":"end_date"},"labels":[{"label_id":4815,"required":true},{"label_id":4816,"required":true},{"label_id":4817,"required":false},{"label_id":4818,"required":false}]}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer iqkIBgqduT2rJddbT3NR-62mz9YrjwRPgEQGbbk228Y" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/projects

POST /1.1/8974/projects
Accept: application/json
Content-Type: application/json
Authorization: Bearer iqkIBgqduT2rJddbT3NR-62mz9YrjwRPgEQGbbk228Y

Parameters

{"project":{"name":"New Project","rate_type":"project","hour_rate":50.0,"active":true,"deleted":false,"currency_code":"usd","color":"67a3bc","client_id":9299,"budget_type":"M","budget":300,"users":[{"user_id":24937}],"budget_recurrence":{"recur":"week","start_date":"2018-09-21","end_date":"2019-09-21","recur_until":"end_date"},"labels":[{"label_id":4815,"required":true},{"label_id":4816,"required":true},{"label_id":4817,"required":false},{"label_id":4818,"required":false}]}}
Name Description
project required Project attributes
name required Specifies the project name
color required Specifies the project color. It should be one of these: 47b17c, 67a3bc, bd4c4f, d0915a, 866b9c, cdae4f, 5ab8b7, c697c0
client_id required Specifies the numerical client ID
users required Specifies the project users. It should be an array of users, with numerical user IDs and an hour_rate. For example: "users": [{ "user_id": 175551, "hour_rate": 25.0 },{ "user_id": 117861, "hour_rate": 27.0 }]
billable Specifies whether the project is billable or not. It should be “true” or “false”
budget Specifies the budget for the project. It should be numeric value
hour_rate Specifies the hourly rate for the project. It should be numeric valu
rate_type Specifies the hourly rate type for the project. It should be “user” or “project”
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)
budget_recurrence Specifies when a recurring budget will refresh
send_invite Specifies if you want to send a project invite email. It should be “true” or “false”
required_notes Project hours notes to be required for logging
labels Specifies the project labels, should be array of labels with numerical label id and required flag Example: "labels": [{ "label_id": 1, "required": true }, { "label_id": 2, "required": false }]

Response

Content-Type: application/json; charset=utf-8
201 Created
{
  "id": 42291,
  "active": true,
  "account_id": 8974,
  "name": "New Project",
  "color": "67a3bc",
  "rate_type": "project",
  "billable": true,
  "updated_at": 1599213701,
  "external_id": null,
  "budget_scope": null,
  "client": {
    "id": 9299,
    "name": "Timely",
    "active": true,
    "external_id": null,
    "updated_at": "2020-09-04T12:01:41+02:00"
  },
  "required_notes": false,
  "budget": 300,
  "budget_type": "M",
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "budget_progress": 0.0,
  "budget_percent": 0.0,
  "users": [
    {
      "user_id": 24937,
      "hour_rate": 50.0,
      "hour_rate_in_cents": 5000.0,
      "updated_at": "2020-09-04T12:01:41+02:00",
      "created_at": "2020-09-04T12:01:41+02:00",
      "deleted": false
    }
  ],
  "labels": [
    {
      "project_id": 42291,
      "label_id": 4815,
      "budget": null,
      "required": true,
      "updated_at": "2020-09-04T12:01:41+02:00"
    },
    {
      "project_id": 42291,
      "label_id": 4816,
      "budget": null,
      "required": true,
      "updated_at": "2020-09-04T12:01:41+02:00"
    },
    {
      "project_id": 42291,
      "label_id": 4817,
      "budget": null,
      "required": false,
      "updated_at": "2020-09-04T12:01:41+02:00"
    },
    {
      "project_id": 42291,
      "label_id": 4818,
      "budget": null,
      "required": false,
      "updated_at": "2020-09-04T12:01:41+02:00"
    }
  ],
  "label_ids": [
    4815,
    4816,
    4817,
    4818
  ],
  "required_label_ids": [
    4815,
    4816
  ],
  "cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "estimated_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "estimated_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "billed_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "billed_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "unbilled_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "unbilled_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "first_logged_on": null,
  "last_logged_on": null,
  "budget_recurrence": {
    "recur": "week",
    "start_date": "2018-09-21",
    "end_date": "2019-09-21",
    "recur_until": "end_date",
    "days_count": 365,
    "updated_at": "2020-09-04T12:01:41+02:00"
  }
}

Delete a project

Request

curl "https://api.timelyapp.com/1.1/8975/projects/42292" -d '' -X DELETE \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 8yQTcMCVLQlKYe-5RUhte2M2NyMfgmglPSCzBe3tGp4" \
    -H "Cookie: "

Endpoint

DELETE /1.1/:account_id/projects/:id

DELETE /1.1/8975/projects/42292
Accept: application/json
Content-Type: application/json
Authorization: Bearer 8yQTcMCVLQlKYe-5RUhte2M2NyMfgmglPSCzBe3tGp4

Parameters

Name Description
account_id The account ID containing the project you want to delete
id The ID of the project you want to delete

Response

Content-Type: application/json; charset=utf-8
200 OK
{
}

List all projects

Note: Admin users can access all projects on an account. Other users can only access the projects they belong to.

Project lists will return your 10000 most recently updated projects. Additionally, you can add the “limit”, “filter”, ”sort” and “order” optional parameters to change the result.

Request

curl -g "https://api.timelyapp.com/1.1/8977/projects" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ZW9AI_6vxmdIizI7gM9P6pX34WvwWHRkN7s4-q55VVU" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/projects

GET /1.1/8977/projects
Accept: application/json
Content-Type: application/json
Authorization: Bearer ZW9AI_6vxmdIizI7gM9P6pX34WvwWHRkN7s4-q55VVU

Parameters

Name Description
offset Retrieve projects from offset
limit Retrieve number of projects
sort Field to sort projects by (Default updated_at)
order Sorting order (Default desc)
filter Filter projects - mine, active, archived, all
updated_after Retrieve records updated after a certain timestamp
project_ids Retrieve specific projects

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 42294,
    "active": true,
    "account_id": 8977,
    "name": "Timely",
    "color": "67a3bc",
    "rate_type": "project",
    "billable": true,
    "updated_at": 1599213703,
    "external_id": null,
    "budget_scope": null,
    "client": {
      "id": 9302,
      "name": "Timely",
      "active": true,
      "external_id": null,
      "updated_at": "2020-09-04T12:01:43+02:00"
    },
    "required_notes": false,
    "budget": 0,
    "budget_type": "",
    "hour_rate": 50.0,
    "hour_rate_in_cents": 5000.0,
    "budget_progress": 0.0,
    "budget_percent": 0.0,
    "users": [
      {
        "user_id": 24943,
        "hour_rate": 100.0,
        "hour_rate_in_cents": 10000.0,
        "updated_at": "2020-09-04T12:01:43+02:00",
        "created_at": "2020-09-04T12:01:43+02:00",
        "deleted": false
      }
    ],
    "labels": [

    ],
    "label_ids": [

    ],
    "required_label_ids": [

    ],
    "cost": {
      "fractional": 0,
      "formatted": "$0.00",
      "amount": 0.0
    },
    "estimated_cost": {
      "fractional": 0,
      "formatted": "$0.00",
      "amount": 0.0
    },
    "duration": {
      "hours": 0,
      "minutes": 0,
      "seconds": 0,
      "formatted": "00:00",
      "total_hours": 0.0,
      "total_seconds": 0,
      "total_minutes": 0
    },
    "estimated_duration": {
      "hours": 0,
      "minutes": 0,
      "seconds": 0,
      "formatted": "00:00",
      "total_hours": 0.0,
      "total_seconds": 0,
      "total_minutes": 0
    },
    "billed_cost": {
      "fractional": 0,
      "formatted": "$0.00",
      "amount": 0.0
    },
    "billed_duration": {
      "hours": 0,
      "minutes": 0,
      "seconds": 0,
      "formatted": "00:00",
      "total_hours": 0.0,
      "total_seconds": 0,
      "total_minutes": 0
    },
    "unbilled_cost": {
      "fractional": 0,
      "formatted": "$0.00",
      "amount": 0.0
    },
    "unbilled_duration": {
      "hours": 0,
      "minutes": 0,
      "seconds": 0,
      "formatted": "00:00",
      "total_hours": 0.0,
      "total_seconds": 0,
      "total_minutes": 0
    }
  }
]

Retrieve a project

Retrieve a single project by using its ID.

Request

curl -g "https://api.timelyapp.com/1.1/8976/projects/42293" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer q8fGSoizbpMe7nTc9thfgcbo-lz0YkQ5y7cA4qZfwVc" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/projects/:id

GET /1.1/8976/projects/42293
Accept: application/json
Content-Type: application/json
Authorization: Bearer q8fGSoizbpMe7nTc9thfgcbo-lz0YkQ5y7cA4qZfwVc

Parameters

Name Description
account_id The account ID containing the project you want to retrieve
id The ID of the project you want to retrieve

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 42293,
  "active": true,
  "account_id": 8976,
  "name": "Timely",
  "color": "67a3bc",
  "rate_type": "project",
  "billable": true,
  "updated_at": 1599213702,
  "external_id": null,
  "budget_scope": null,
  "client": {
    "id": 9301,
    "name": "Timely",
    "active": true,
    "external_id": null,
    "updated_at": "2020-09-04T12:01:42+02:00"
  },
  "required_notes": false,
  "budget": 0,
  "budget_type": "",
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "budget_progress": 0.0,
  "budget_percent": 0.0,
  "users": [
    {
      "user_id": 24941,
      "hour_rate": 100.0,
      "hour_rate_in_cents": 10000.0,
      "updated_at": "2020-09-04T12:01:42+02:00",
      "created_at": "2020-09-04T12:01:42+02:00",
      "deleted": false
    }
  ],
  "labels": [

  ],
  "label_ids": [

  ],
  "required_label_ids": [

  ],
  "cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "estimated_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "estimated_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "billed_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "billed_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "unbilled_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "unbilled_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "first_logged_on": null,
  "last_logged_on": null
}

Update a project

Request

curl "https://api.timelyapp.com/1.1/8979/projects/42296" -d '{"project":{"name":"updated project name"}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer KTdQ4-Mys3Tk8IaAHqAGHoq7TU54yFPavUAsYjOwBx8" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/projects/:id

PUT /1.1/8979/projects/42296
Accept: application/json
Content-Type: application/json
Authorization: Bearer KTdQ4-Mys3Tk8IaAHqAGHoq7TU54yFPavUAsYjOwBx8

Parameters

{"project":{"name":"updated project name"}}
Name Description
id required Project ID
project Project attributes
name required Specifies the project name
active Example values: “true” or “false”. Using “false” changes the project state to “archived”
color required Specifies the project color. It should be one of these: 47b17c, 67a3bc, bd4c4f, d0915a, 866b9c, cdae4f, 5ab8b7, c697c0
client_id required Specifies the numerical client ID
users required Specifies the project users. It should be an array of users, with numerical user IDs and an hour_rate. For example: "users": [{ "user_id": 175551, "hour_rate": 25.0 },{ "user_id": 117861, "hour_rate": 27.0 }]
billable Specifies whether the project is billable or not. It should be “true” or “false”
budget Specifies the budget for the project. It should be numeric value
hour_rate Specifies the hourly rate for the project. It should be numeric value
rate_type Specifies the hourly rate type for the project. It should be “user” or “project”
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)
send_invite Specifies if you want to send a project invite email. It should be “true” or “false”
required_notes Project hours notes to be required for logging

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 42296,
  "active": true,
  "account_id": 8979,
  "name": "updated project name",
  "color": "67a3bc",
  "rate_type": "project",
  "billable": true,
  "updated_at": 1599213704,
  "external_id": null,
  "budget_scope": null,
  "client": {
    "id": 9304,
    "name": "Timely",
    "active": true,
    "external_id": null,
    "updated_at": "2020-09-04T12:01:44+02:00"
  },
  "required_notes": false,
  "budget": 0,
  "budget_type": "",
  "hour_rate": 50.0,
  "hour_rate_in_cents": 5000.0,
  "budget_progress": 0.0,
  "budget_percent": 0.0,
  "users": [
    {
      "user_id": 24947,
      "hour_rate": 50.0,
      "hour_rate_in_cents": 5000.0,
      "updated_at": "2020-09-04T12:01:44+02:00",
      "created_at": "2020-09-04T12:01:44+02:00",
      "deleted": false
    }
  ],
  "labels": [

  ],
  "label_ids": [

  ],
  "required_label_ids": [

  ],
  "cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "estimated_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "estimated_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "billed_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "billed_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "unbilled_cost": {
    "fractional": 0,
    "formatted": "$0.00",
    "amount": 0.0
  },
  "unbilled_duration": {
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
    "formatted": "00:00",
    "total_hours": 0.0,
    "total_seconds": 0,
    "total_minutes": 0
  },
  "first_logged_on": null,
  "last_logged_on": null
}

Reports

Enjoy clear oversight over your business, including individual and team performance. Export reports in .XLS, .PDF and .CSV formats.

All Reports

For a normal user accessing all account reports.

Note:

1) If start_date and end_date parameters are not passed, the period will default to the beginning-to-end of a month. 2) If user and project parameters are not passed, by default a normal user will get all reports on an account, and a limited user will only get reports they have created. 3) Only normal users can access reports created by other users on an account. Limited users can only access reports they have created. 4) Only normal users can access reports for other projects on an account. Limited users can only access reports for projects they have created.

Request

curl "https://api.timelyapp.com/1.1/9011/reports" -d '{"user_ids":"25042","since":"2018-01-01","until":"2019-01-01","project_ids":"42365"}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 5BQMbDcFMG87c9wgODeuSvXimj8NqXD9c4wqrqIQjkE" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/reports

POST /1.1/9011/reports
Accept: application/json
Content-Type: application/json
Authorization: Bearer 5BQMbDcFMG87c9wgODeuSvXimj8NqXD9c4wqrqIQjkE

Parameters

{"user_ids":"25042","since":"2018-01-01","until":"2019-01-01","project_ids":"42365"}
Name Description
account_id The account ID containing the report you want to retrieve
user_ids Specifies the users for which you want reports. Numerical user IDs should separated by a comma, like so: "user_ids": "175551,117861"
since Specifies the start date for a report: For example: "since" : "Jan 01, 2014"
until Specifies the end date for a report. For example: "until" : "Dec 31, 2014"
project_ids Specifies the projects for which you want reports. Numerical project IDs should be separated by a comma, like so: "project_ids": "1751,1171"
billed Specifies whether you want to report to show estimated or billed events. For example: "billed": false or "billed": true
label_ids Specifies the labels pertaining to a report you want to see. Numerical label IDs should be separated by a comma, like so: "label_ids": "751,117"

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 9336,
    "name": "Timely",
    "projects": [
      {
        "id": 42365,
        "active": true,
        "account_id": 9011,
        "name": "Timely",
        "color": "67a3bc",
        "rate_type": "project",
        "billable": true,
        "updated_at": 1599213725,
        "external_id": null,
        "budget_scope": null,
        "client": {
          "id": 9336,
          "name": "Timely",
          "active": true,
          "external_id": null,
          "updated_at": "2020-09-04T12:02:05+02:00"
        },
        "required_notes": false,
        "budget": 0,
        "budget_type": "",
        "hour_rate": 50.0,
        "hour_rate_in_cents": 5000.0,
        "budget_progress": 0.0,
        "budget_percent": 0.0,
        "duration": {
          "hours": 5,
          "minutes": 0,
          "seconds": 0,
          "formatted": "05:00",
          "total_hours": 5.0,
          "total_seconds": 18000,
          "total_minutes": 300
        },
        "estimated_duration": {
          "hours": 8,
          "minutes": 0,
          "seconds": 0,
          "formatted": "08:00",
          "total_hours": 8.0,
          "total_seconds": 28800,
          "total_minutes": 480
        },
        "billed_duration": {
          "hours": 0,
          "minutes": 0,
          "seconds": 0,
          "formatted": "00:00",
          "total_hours": 0.0,
          "total_seconds": 0,
          "total_minutes": 0
        },
        "unbilled_duration": {
          "hours": 5,
          "minutes": 0,
          "seconds": 0,
          "formatted": "05:00",
          "total_hours": 5.0,
          "total_seconds": 18000,
          "total_minutes": 300
        },
        "cost": {
          "fractional": 25000,
          "formatted": "$250.00",
          "amount": 250.0
        },
        "estimated_cost": {
          "fractional": 40000,
          "formatted": "$400.00",
          "amount": 400.0
        },
        "billed_cost": {
          "fractional": 0,
          "formatted": "$0.00",
          "amount": 0.0
        },
        "unbilled_cost": {
          "fractional": 25000,
          "formatted": "$250.00",
          "amount": 250.0
        }
      }
    ],
    "duration": {
      "hours": 5,
      "minutes": 0,
      "seconds": 0,
      "formatted": "05:00",
      "total_hours": 5.0,
      "total_seconds": 18000,
      "total_minutes": 300
    },
    "estimated_duration": {
      "hours": 8,
      "minutes": 0,
      "seconds": 0,
      "formatted": "08:00",
      "total_hours": 8.0,
      "total_seconds": 28800,
      "total_minutes": 480
    },
    "billed_duration": {
      "hours": 0,
      "minutes": 0,
      "seconds": 0,
      "formatted": "00:00",
      "total_hours": 0.0,
      "total_seconds": 0,
      "total_minutes": 0
    },
    "unbilled_duration": {
      "hours": 5,
      "minutes": 0,
      "seconds": 0,
      "formatted": "05:00",
      "total_hours": 5.0,
      "total_seconds": 18000,
      "total_minutes": 300
    },
    "cost": {
      "fractional": 25000,
      "formatted": "$250.00",
      "amount": 250.0
    },
    "estimated_cost": {
      "fractional": 40000,
      "formatted": "$400.00",
      "amount": 400.0
    },
    "billed_cost": {
      "fractional": 0,
      "formatted": "$0.00",
      "amount": 0.0
    },
    "unbilled_cost": {
      "fractional": 25000,
      "formatted": "$250.00",
      "amount": 250.0
    }
  }
]

Filter reports

Use filter endpoints with parameters to limit returned data, so you only see the values that you need.

Request

curl "https://api.timelyapp.com1.1/9012/reports/filter" -d '{"user_ids":"25044","since":"2018-01-01","until":"2019-01-01","project_ids":"42366"}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer N9WctnU-DIrxmNmpGIrJhsJnSik42CkUW9B7ZH5hqx0" \
    -H "Cookie: "

Endpoint

POST 1.1/:account_id/reports/filter

POST 1.1/9012/reports/filter
Accept: application/json
Content-Type: application/json
Authorization: Bearer N9WctnU-DIrxmNmpGIrJhsJnSik42CkUW9B7ZH5hqx0

Parameters

{"user_ids":"25044","since":"2018-01-01","until":"2019-01-01","project_ids":"42366"}
Name Description
billed Retrieve billed hours only. Example: billed=true
label_ids Specifies the label IDs of the hours you want to retrieve. Label IDs should be a numerical array, like so: label_ids: [3, 4, 2]
project_ids Specifies the project IDs of the hours you want to retrieve. Project IDs should be a numerical array, like so: project_ids: [3, 4, 2]
since The start date of a report. For example: 'since=2019-01-01'
team_ids Specifies the team IDs of the hours you want to retrieve. Team IDs should be a numerical array, like so: team_ids: [3, 4, 2]
until The end date of a report. For example: 'until=2019-12-31''
user_ids Specifies the user IDs of the hours you want to retrieve. User IDs should be a numerical array, like so: user_ids: [3, 4, 2]
group_by Specifies how to group the hours. Default: group_by: ["clients", "users", "labels", "days", "teams"]

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "totals": {
    "duration": {
      "hours": 5,
      "minutes": 0,
      "seconds": 0,
      "formatted": "05:00",
      "total_hours": 5.0,
      "total_seconds": 18000,
      "total_minutes": 300
    },
    "estimated_duration": {
      "hours": 8,
      "minutes": 0,
      "seconds": 0,
      "formatted": "08:00",
      "total_hours": 8.0,
      "total_seconds": 28800,
      "total_minutes": 480
    },
    "billed_duration": {
      "hours": 0,
      "minutes": 0,
      "seconds": 0,
      "formatted": "00:00",
      "total_hours": 0.0,
      "total_seconds": 0,
      "total_minutes": 0
    },
    "unbilled_duration": {
      "hours": 5,
      "minutes": 0,
      "seconds": 0,
      "formatted": "05:00",
      "total_hours": 5.0,
      "total_seconds": 18000,
      "total_minutes": 300
    },
    "cost": {
      "fractional": 25000,
      "formatted": "$250.00",
      "amount": 250.0
    },
    "estimated_cost": {
      "fractional": 40000,
      "formatted": "$400.00",
      "amount": 400.0
    },
    "billed_cost": {
      "fractional": 0,
      "formatted": "$0.00",
      "amount": 0.0
    },
    "unbilled_cost": {
      "fractional": 25000,
      "formatted": "$250.00",
      "amount": 250.0
    }
  },
  "clients": [
    {
      "id": 9337,
      "name": "Timely",
      "projects": [
        {
          "id": 42366,
          "active": true,
          "account_id": 9012,
          "name": "Timely",
          "color": "67a3bc",
          "rate_type": "project",
          "billable": true,
          "updated_at": 1599213725,
          "external_id": null,
          "budget_scope": null,
          "client": {
            "id": 9337,
            "name": "Timely",
            "active": true,
            "external_id": null,
            "updated_at": "2020-09-04T12:02:05+02:00"
          },
          "required_notes": false,
          "budget": 0,
          "budget_type": "",
          "hour_rate": 50.0,
          "hour_rate_in_cents": 5000.0,
          "budget_progress": 0.0,
          "budget_percent": 0.0,
          "duration": {
            "hours": 5,
            "minutes": 0,
            "seconds": 0,
            "formatted": "05:00",
            "total_hours": 5.0,
            "total_seconds": 18000,
            "total_minutes": 300
          },
          "estimated_duration": {
            "hours": 8,
            "minutes": 0,
            "seconds": 0,
            "formatted": "08:00",
            "total_hours": 8.0,
            "total_seconds": 28800,
            "total_minutes": 480
          },
          "billed_duration": {
            "hours": 0,
            "minutes": 0,
            "seconds": 0,
            "formatted": "00:00",
            "total_hours": 0.0,
            "total_seconds": 0,
            "total_minutes": 0
          },
          "unbilled_duration": {
            "hours": 5,
            "minutes": 0,
            "seconds": 0,
            "formatted": "05:00",
            "total_hours": 5.0,
            "total_seconds": 18000,
            "total_minutes": 300
          },
          "cost": {
            "fractional": 25000,
            "formatted": "$250.00",
            "amount": 250.0
          },
          "estimated_cost": {
            "fractional": 40000,
            "formatted": "$400.00",
            "amount": 400.0
          },
          "billed_cost": {
            "fractional": 0,
            "formatted": "$0.00",
            "amount": 0.0
          },
          "unbilled_cost": {
            "fractional": 25000,
            "formatted": "$250.00",
            "amount": 250.0
          }
        }
      ],
      "duration": {
        "hours": 5,
        "minutes": 0,
        "seconds": 0,
        "formatted": "05:00",
        "total_hours": 5.0,
        "total_seconds": 18000,
        "total_minutes": 300
      },
      "estimated_duration": {
        "hours": 8,
        "minutes": 0,
        "seconds": 0,
        "formatted": "08:00",
        "total_hours": 8.0,
        "total_seconds": 28800,
        "total_minutes": 480
      },
      "billed_duration": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "formatted": "00:00",
        "total_hours": 0.0,
        "total_seconds": 0,
        "total_minutes": 0
      },
      "unbilled_duration": {
        "hours": 5,
        "minutes": 0,
        "seconds": 0,
        "formatted": "05:00",
        "total_hours": 5.0,
        "total_seconds": 18000,
        "total_minutes": 300
      },
      "cost": {
        "fractional": 25000,
        "formatted": "$250.00",
        "amount": 250.0
      },
      "estimated_cost": {
        "fractional": 40000,
        "formatted": "$400.00",
        "amount": 400.0
      },
      "billed_cost": {
        "fractional": 0,
        "formatted": "$0.00",
        "amount": 0.0
      },
      "unbilled_cost": {
        "fractional": 25000,
        "formatted": "$250.00",
        "amount": 250.0
      }
    }
  ],
  "users": [
    {
      "id": 25044,
      "email": "marijappkfthfr@timelyapp.com",
      "name": "Marija Petrovic",
      "time_zone": "Europe/Paris",
      "updated_at": 1599213725,
      "active": false,
      "deleted": false,
      "memory_onboarded": true,
      "day_view_onboarded": true,
      "last_received_memories_date": null,
      "date_format": "dmy",
      "time_format": "24",
      "avatar": {
        "large_retina": "https://www.gravatar.com/avatar/de3d5d2447b8dbb70aec2776f3771d4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
        "large": "https://www.gravatar.com/avatar/de3d5d2447b8dbb70aec2776f3771d4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=",
        "medium_retina": "https://www.gravatar.com/avatar/de3d5d2447b8dbb70aec2776f3771d4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
        "medium": "https://www.gravatar.com/avatar/de3d5d2447b8dbb70aec2776f3771d4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=",
        "timeline": "https://www.gravatar.com/avatar/de3d5d2447b8dbb70aec2776f3771d4e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-41a3c6144fa6b06eceedb1fa1d82ed1763f24f9b93904044558c64c0e868fbec.jpg&s="
      },
      "duration": {
        "hours": 5,
        "minutes": 0,
        "seconds": 0,
        "formatted": "05:00",
        "total_hours": 5.0,
        "total_seconds": 18000,
        "total_minutes": 300
      },
      "estimated_duration": {
        "hours": 8,
        "minutes": 0,
        "seconds": 0,
        "formatted": "08:00",
        "total_hours": 8.0,
        "total_seconds": 28800,
        "total_minutes": 480
      },
      "billed_duration": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "formatted": "00:00",
        "total_hours": 0.0,
        "total_seconds": 0,
        "total_minutes": 0
      },
      "unbilled_duration": {
        "hours": 5,
        "minutes": 0,
        "seconds": 0,
        "formatted": "05:00",
        "total_hours": 5.0,
        "total_seconds": 18000,
        "total_minutes": 300
      },
      "cost": {
        "fractional": 25000,
        "formatted": "$250.00",
        "amount": 250.0
      },
      "estimated_cost": {
        "fractional": 40000,
        "formatted": "$400.00",
        "amount": 400.0
      },
      "billed_cost": {
        "fractional": 0,
        "formatted": "$0.00",
        "amount": 0.0
      },
      "unbilled_cost": {
        "fractional": 25000,
        "formatted": "$250.00",
        "amount": 250.0
      }
    }
  ],
  "labels": [
    {
      "id": 0,
      "name": "Untagged",
      "sequence": -1,
      "parent_id": null,
      "emoji": "https://raw.githubusercontent.com/iamcal/emoji-data/v2.4.4/img-twitter-64/1f3f7.png",
      "children": [

      ],
      "duration": {
        "hours": 5,
        "minutes": 0,
        "seconds": 0,
        "formatted": "05:00",
        "total_hours": 5.0,
        "total_seconds": 18000,
        "total_minutes": 300
      },
      "estimated_duration": {
        "hours": 8,
        "minutes": 0,
        "seconds": 0,
        "formatted": "08:00",
        "total_hours": 8.0,
        "total_seconds": 28800,
        "total_minutes": 480
      },
      "billed_duration": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "formatted": "00:00",
        "total_hours": 0.0,
        "total_seconds": 0,
        "total_minutes": 0
      },
      "unbilled_duration": {
        "hours": 5,
        "minutes": 0,
        "seconds": 0,
        "formatted": "05:00",
        "total_hours": 5.0,
        "total_seconds": 18000,
        "total_minutes": 300
      },
      "cost": {
        "fractional": 25000,
        "formatted": "$250.00",
        "amount": 250.0
      },
      "estimated_cost": {
        "fractional": 40000,
        "formatted": "$400.00",
        "amount": 400.0
      },
      "billed_cost": {
        "fractional": 0,
        "formatted": "$0.00",
        "amount": 0.0
      },
      "unbilled_cost": {
        "fractional": 25000,
        "formatted": "$250.00",
        "amount": 250.0
      }
    }
  ],
  "days": [
    {
      "day": "2018-01-02",
      "duration": {
        "hours": 2,
        "minutes": 30,
        "seconds": 0,
        "formatted": "02:30",
        "total_hours": 2.5,
        "total_seconds": 9000,
        "total_minutes": 150
      },
      "estimated_duration": {
        "hours": 4,
        "minutes": 0,
        "seconds": 0,
        "formatted": "04:00",
        "total_hours": 4.0,
        "total_seconds": 14400,
        "total_minutes": 240
      },
      "billed_duration": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "formatted": "00:00",
        "total_hours": 0.0,
        "total_seconds": 0,
        "total_minutes": 0
      },
      "unbilled_duration": {
        "hours": 2,
        "minutes": 30,
        "seconds": 0,
        "formatted": "02:30",
        "total_hours": 2.5,
        "total_seconds": 9000,
        "total_minutes": 150
      },
      "cost": {
        "fractional": 12500,
        "formatted": "$125.00",
        "amount": 125.0
      },
      "estimated_cost": {
        "fractional": 20000,
        "formatted": "$200.00",
        "amount": 200.0
      },
      "billed_cost": {
        "fractional": 0,
        "formatted": "$0.00",
        "amount": 0.0
      },
      "unbilled_cost": {
        "fractional": 12500,
        "formatted": "$125.00",
        "amount": 125.0
      }
    },
    {
      "day": "2018-01-01",
      "duration": {
        "hours": 2,
        "minutes": 30,
        "seconds": 0,
        "formatted": "02:30",
        "total_hours": 2.5,
        "total_seconds": 9000,
        "total_minutes": 150
      },
      "estimated_duration": {
        "hours": 4,
        "minutes": 0,
        "seconds": 0,
        "formatted": "04:00",
        "total_hours": 4.0,
        "total_seconds": 14400,
        "total_minutes": 240
      },
      "billed_duration": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "formatted": "00:00",
        "total_hours": 0.0,
        "total_seconds": 0,
        "total_minutes": 0
      },
      "unbilled_duration": {
        "hours": 2,
        "minutes": 30,
        "seconds": 0,
        "formatted": "02:30",
        "total_hours": 2.5,
        "total_seconds": 9000,
        "total_minutes": 150
      },
      "cost": {
        "fractional": 12500,
        "formatted": "$125.00",
        "amount": 125.0
      },
      "estimated_cost": {
        "fractional": 20000,
        "formatted": "$200.00",
        "amount": 200.0
      },
      "billed_cost": {
        "fractional": 0,
        "formatted": "$0.00",
        "amount": 0.0
      },
      "unbilled_cost": {
        "fractional": 12500,
        "formatted": "$125.00",
        "amount": 125.0
      }
    }
  ],
  "teams": [
    {
      "id": 0,
      "name": "No team",
      "color": "866b9c",
      "emoji": "https://raw.githubusercontent.com/iamcal/emoji-data/v4.0.4/img-twitter-64/1f465.png",
      "external_id": null,
      "duration": {
        "hours": 5,
        "minutes": 0,
        "seconds": 0,
        "formatted": "05:00",
        "total_hours": 5.0,
        "total_seconds": 18000,
        "total_minutes": 300
      },
      "estimated_duration": {
        "hours": 8,
        "minutes": 0,
        "seconds": 0,
        "formatted": "08:00",
        "total_hours": 8.0,
        "total_seconds": 28800,
        "total_minutes": 480
      },
      "billed_duration": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "formatted": "00:00",
        "total_hours": 0.0,
        "total_seconds": 0,
        "total_minutes": 0
      },
      "unbilled_duration": {
        "hours": 5,
        "minutes": 0,
        "seconds": 0,
        "formatted": "05:00",
        "total_hours": 5.0,
        "total_seconds": 18000,
        "total_minutes": 300
      },
      "cost": {
        "fractional": 25000,
        "formatted": "$250.00",
        "amount": 250.0
      },
      "estimated_cost": {
        "fractional": 40000,
        "formatted": "$400.00",
        "amount": 400.0
      },
      "billed_cost": {
        "fractional": 0,
        "formatted": "$0.00",
        "amount": 0.0
      },
      "unbilled_cost": {
        "fractional": 25000,
        "formatted": "$250.00",
        "amount": 250.0
      }
    }
  ]
}

Roles

List roles

Note: default attribute shows which role to select by default

Request

curl -g "https://api.timelyapp.com/1.1/9013/roles" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Ewr4-zN0sT7VtkPx8xzWWeN0SCzVZZATYZ7SHYWF5Os" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/roles

GET /1.1/9013/roles
Accept: application/json
Content-Type: application/json
Authorization: Bearer Ewr4-zN0sT7VtkPx8xzWWeN0SCzVZZATYZ7SHYWF5Os

Parameters

Name Description
account_id Account id for which roles are required

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 26856,
    "name": "admin",
    "display_name": "Admin",
    "description": "Can see, create and edit all hours, projects and teams.",
    "scopes": [
      {
        "name": "hide_hourly_rate",
        "display_name": "Hide rate",
        "description": "Hide hourly rates for this user",
        "default": false,
        "options": [
          false
        ]
      }
    ],
    "default": false
  },
  {
    "id": 26857,
    "name": "manager",
    "display_name": "Manager",
    "description": "Can see, log and edit hours for anyone on the same project as them.",
    "scopes": [
      {
        "name": "hide_hourly_rate",
        "display_name": "Hide rate",
        "description": "Hide hourly rates for this user",
        "default": false,
        "options": [
          true,
          false
        ]
      }
    ],
    "default": true
  },
  {
    "id": 26858,
    "name": "employee",
    "display_name": "Employee",
    "description": "Can only see, log and edit their own hours.",
    "scopes": [
      {
        "name": "hide_hourly_rate",
        "display_name": "Hide rate",
        "description": "Hide hourly rates for this user",
        "default": false,
        "options": [
          true,
          false
        ]
      }
    ],
    "default": false
  }
]

Teams

The team object shows all teams available on an account.

Create a team

Request

curl "https://api.timelyapp.com/1.1/9031/teams" -d '{"team":{"name":"Timely","color":"67a3bc","emoji":"http://path.to/emoji.png","external_id":null,"users":[{"user_id":25082,"lead":true},{"user_id":25084,"lead":false}]}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer tf6x9r5Bg6FS5O_-i-hAggMOx1fwF8z-wBDWx9KdGk8" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/teams

POST /1.1/9031/teams
Accept: application/json
Content-Type: application/json
Authorization: Bearer tf6x9r5Bg6FS5O_-i-hAggMOx1fwF8z-wBDWx9KdGk8

Parameters

{"team":{"name":"Timely","color":"67a3bc","emoji":"http://path.to/emoji.png","external_id":null,"users":[{"user_id":25082,"lead":true},{"user_id":25084,"lead":false}]}}
Name Description
name required Specifies the team name
emoji Specifies the emoji url for a team
color Specifies the project color for a team
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)
users required Specifies users and their role within a team. For example: users:[{'user_id': 1, 'lead': true}]

Response

Content-Type: application/json; charset=utf-8
201 Created
{
  "id": 795,
  "name": "Timely",
  "color": "67a3bc",
  "emoji": "http://path.to/emoji.png",
  "external_id": null,
  "user_ids": [
    25082,
    25084
  ],
  "users": [
    {
      "id": 4438,
      "user_id": 25082,
      "team_id": 795,
      "lead": true
    },
    {
      "id": 4439,
      "user_id": 25084,
      "team_id": 795,
      "lead": false
    }
  ]
}

Delete a team

Request

curl "https://api.timelyapp.com/1.1/9032/teams/796" -d '' -X DELETE \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ARfSO8-qNOPFqhg_vVhX2O8cRnokzR-EB-goSFhl4vs" \
    -H "Cookie: "

Endpoint

DELETE /1.1/:account_id/teams/:id

DELETE /1.1/9032/teams/796
Accept: application/json
Content-Type: application/json
Authorization: Bearer ARfSO8-qNOPFqhg_vVhX2O8cRnokzR-EB-goSFhl4vs

Parameters

Name Description
account_id The account ID containing the team you want to delete
id The ID of the team you want to delete

Response

Content-Type: application/json; charset=utf-8
200 OK
{
}

List all teams

Request

curl -g "https://api.timelyapp.com/1.1/9034/teams" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer AFcHLED8Z2Hq3Y8q4xcelV8ebaw37mKdBQ2IHsfJQU4" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/teams

GET /1.1/9034/teams
Accept: application/json
Content-Type: application/json
Authorization: Bearer AFcHLED8Z2Hq3Y8q4xcelV8ebaw37mKdBQ2IHsfJQU4

Parameters

Name Description
page Page number (Default 1)
per_page Records per page (Default 50)
order Sorting order on name
filter Filter teams - mine, all

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 798,
    "name": "Timely",
    "color": "67a3bc",
    "emoji": "http://path.to/emoji.png",
    "external_id": null,
    "user_ids": [

    ],
    "users": [

    ]
  }
]

Retrieve a team

Request

curl -g "https://api.timelyapp.com/1.1/9033/teams/797" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer SXyYF-Nn-78CGNZcEi9_FAiAgDK8rJneslw7AJYuHIo" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/teams/:id

GET /1.1/9033/teams/797
Accept: application/json
Content-Type: application/json
Authorization: Bearer SXyYF-Nn-78CGNZcEi9_FAiAgDK8rJneslw7AJYuHIo

Parameters

Name Description
account_id The account ID containing the team you want to retrieve
id The ID of the team you want to retrieve

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 797,
  "name": "Timely",
  "color": "67a3bc",
  "emoji": "http://path.to/emoji.png",
  "external_id": null,
  "user_ids": [

  ],
  "users": [

  ]
}

Update a team

Request

curl "https://api.timelyapp.com/1.1/9035/teams/799" -d '{"team":{"name":"Backend","color":"67a3bc","emoji":"http://path.to/emoji.png","external_id":null,"users":[{"user_id":25091,"lead":true}]}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Paf_4pHzLtUMRk-_v1hRlXY0f99_YLyzj44KbvPh86Y" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/teams/:id

PUT /1.1/9035/teams/799
Accept: application/json
Content-Type: application/json
Authorization: Bearer Paf_4pHzLtUMRk-_v1hRlXY0f99_YLyzj44KbvPh86Y

Parameters

{"team":{"name":"Backend","color":"67a3bc","emoji":"http://path.to/emoji.png","external_id":null,"users":[{"user_id":25091,"lead":true}]}}
Name Description
name required Specifies the team name
emoji Specifies the emoji url for a team
color Specifies the project color for a team
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)
users required Specific users with their role in the team. Ex: users:[{'user_id': 1, 'lead': true}]

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 799,
  "name": "Backend",
  "color": "67a3bc",
  "emoji": "http://path.to/emoji.png",
  "external_id": null,
  "user_ids": [
    25091
  ],
  "users": [
    {
      "id": 4440,
      "user_id": 25091,
      "team_id": 799,
      "lead": true
    }
  ]
}

Users

An account can have multiple users associated with it. All users have a specific access level, and are usually created by an employer on behalf of an employee.

Create/Invite a user

Note: user_level can have values “normal” or “limited”. A user’s name and email can only be updated by the user themself.

Request

curl "https://api.timelyapp.com/1.1/9040/users" -d '{"user":{"name":"Marija Petrovic","email":"marija@timely.com","user_level":"normal","admin":false,"projects":[{"project_id":42395,"hour_rate":10}]},"admin":{"id":2375,"email":"notifications@timelyapp.com","created_at":"2020-09-04T12:02:22.000+02:00","updated_at":"2020-09-04T12:02:22.000+02:00","name":"Timely","notifier":false}}' -X POST \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Kc2_Zeuzzx4dKanj5A4vCjrDZ99Szdc6gun8NzEe658" \
    -H "Cookie: "

Endpoint

POST /1.1/:account_id/users

POST /1.1/9040/users
Accept: application/json
Content-Type: application/json
Authorization: Bearer Kc2_Zeuzzx4dKanj5A4vCjrDZ99Szdc6gun8NzEe658

Parameters

{"user":{"name":"Marija Petrovic","email":"marija@timely.com","user_level":"normal","admin":false,"projects":[{"project_id":42395,"hour_rate":10}]},"admin":{"id":2375,"email":"notifications@timelyapp.com","created_at":"2020-09-04T12:02:22.000+02:00","updated_at":"2020-09-04T12:02:22.000+02:00","name":"Timely","notifier":false}}
Name Description
user required User attributes
name required Specifies the user name
email required Specifies the user email
projects Description: Specifies the projects that the user will be part of. For example: "projects": [ {"project_id": 11 , "hour_rate": 10 }, {"project_id": 12 , "hour_rate": 20 }]
role_id required Specifies the user's role in the account
user_level (Deprecated) Specifies the user level; either “normal” or “limited”. The default is "normal". For example: "user_level": "normal"
admin (Deprecated) Specifies the user is an admin. In this case user_level should be “normal”. For example: "admin": "true"
external_id The external_id can be used to reference external resource IDs to Timely resources, and should be alphanumeric (max. 512 characters)
weekly_capacity Specifies the user's weekly hour capacity. The default is account's weekly capacity. To avoid rounding issues, values are allowed upto 1 decimal place and divisible by 5.
add_to_all_projects Specifies whether the user should be added to all projects in the account. For example: "add_to_all_projects":true

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 25103,
  "email": "marija@timely.com",
  "name": "Marija Petrovic",
  "active": false,
  "day_view_onboarded": false,
  "memory_onboarded": false,
  "created_at": 1599213742,
  "updated_at": 1599213742,
  "last_received_memories_date": null,
  "sign_in_count": null,
  "external_id": null,
  "time_zone": "Etc/UTC",
  "avatar": {
    "large_retina": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
    "large": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
    "medium_retina": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
    "medium": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
    "small_retina": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25",
    "small": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25"
  },
  "type": "User",
  "user_level": "manager",
  "admin": false,
  "hide_hourly_rate": false,
  "deleted": false,
  "default_hour_rate": 0.0,
  "role_id": 26938,
  "role": {
    "id": 26938,
    "name": "manager"
  },
  "weekly_capacity": 40.0
}

Delete a user

Request

curl "https://api.timelyapp.com/1.1/9041/users/25104" -d '' -X DELETE \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 2P39TnSPB7HXgwtFWW_g5z9ofdiBmtEfHaPvqyf95D4" \
    -H "Cookie: "

Endpoint

DELETE /1.1/:account_id/users/:id

DELETE /1.1/9041/users/25104
Accept: application/json
Content-Type: application/json
Authorization: Bearer 2P39TnSPB7HXgwtFWW_g5z9ofdiBmtEfHaPvqyf95D4

Parameters

Name Description
account_id The account ID containing the user you want to delete
id The ID of the user you want to delete

Response

Content-Type: application/json; charset=utf-8
200 OK
{
}

List all users

Note: The user list will return the 10 most recently updated users.

Request

curl -g "https://api.timelyapp.com/1.1/9044/users" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 1Hn2EyTJmT2wA6HtS7FDnxGFyhQNyPzIrisf-0U5Dj4" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/users

GET /1.1/9044/users
Accept: application/json
Content-Type: application/json
Authorization: Bearer 1Hn2EyTJmT2wA6HtS7FDnxGFyhQNyPzIrisf-0U5Dj4

Parameters

Name Description
account_id The account ID containing the users you want to retrieve
limit Retrieve a limited number of users
offset Retrieve users from offset
order Sorting order on updated_at
filter Filter users - Ex: filter=deleted

Response

Content-Type: application/json; charset=utf-8
200 OK
[
  {
    "id": 25110,
    "email": "marijauylyrczg@timelyapp.com",
    "name": "Marija Petrovic",
    "active": false,
    "day_view_onboarded": true,
    "memory_onboarded": true,
    "created_at": 1599213744,
    "updated_at": 1599213744,
    "last_received_memories_date": null,
    "sign_in_count": null,
    "external_id": null,
    "time_zone": "Europe/Paris",
    "avatar": {
      "large_retina": "https://www.gravatar.com/avatar/7ea68eb5574ee464e6d23a5e038de1ea?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "large": "https://www.gravatar.com/avatar/7ea68eb5574ee464e6d23a5e038de1ea?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
      "medium_retina": "https://www.gravatar.com/avatar/7ea68eb5574ee464e6d23a5e038de1ea?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "medium": "https://www.gravatar.com/avatar/7ea68eb5574ee464e6d23a5e038de1ea?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
      "small_retina": "https://www.gravatar.com/avatar/7ea68eb5574ee464e6d23a5e038de1ea?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25",
      "small": "https://www.gravatar.com/avatar/7ea68eb5574ee464e6d23a5e038de1ea?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25"
    },
    "type": "User",
    "user_level": "admin",
    "admin": true,
    "hide_hourly_rate": false,
    "deleted": false,
    "default_hour_rate": 0.0,
    "role_id": 26949,
    "role": {
      "id": 26949,
      "name": "admin"
    },
    "weekly_capacity": 40.0
  }
]

Retrieve a user

Request

curl -g "https://api.timelyapp.com/1.1/9042/users/25106" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ROsJaaVFgsbAXTa37FCOP6euKIbMceLNJIV1gOota3A" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/users/:id

GET /1.1/9042/users/25106
Accept: application/json
Content-Type: application/json
Authorization: Bearer ROsJaaVFgsbAXTa37FCOP6euKIbMceLNJIV1gOota3A

Parameters

Name Description
account_id The account ID containing the users you want to retrieve
id The ID of the user you want to retrieve

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 25106,
  "email": "marijanrvzyhlk@timelyapp.com",
  "name": "Marija Petrovic",
  "active": false,
  "day_view_onboarded": true,
  "memory_onboarded": true,
  "created_at": 1599213743,
  "updated_at": 1599213743,
  "last_received_memories_date": null,
  "sign_in_count": null,
  "external_id": null,
  "time_zone": "Europe/Paris",
  "avatar": {
    "large_retina": "https://www.gravatar.com/avatar/46c3002bd2f3ab8072ecf5c24d89f000?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
    "large": "https://www.gravatar.com/avatar/46c3002bd2f3ab8072ecf5c24d89f000?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
    "medium_retina": "https://www.gravatar.com/avatar/46c3002bd2f3ab8072ecf5c24d89f000?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
    "medium": "https://www.gravatar.com/avatar/46c3002bd2f3ab8072ecf5c24d89f000?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
    "small_retina": "https://www.gravatar.com/avatar/46c3002bd2f3ab8072ecf5c24d89f000?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25",
    "small": "https://www.gravatar.com/avatar/46c3002bd2f3ab8072ecf5c24d89f000?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25"
  },
  "type": "User",
  "user_level": "admin",
  "admin": true,
  "hide_hourly_rate": false,
  "deleted": false,
  "default_hour_rate": 0.0,
  "role_id": 26943,
  "role": {
    "id": 26943,
    "name": "admin"
  },
  "weekly_capacity": 40.0
}

Retrieve current user

Request

curl -g "https://api.timelyapp.com/1.1/9043/users/current" -X GET \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Sfvvl0ndJ2BhgphoifsuX-mGf4DQwSZtO0HQ98kYTWM" \
    -H "Cookie: "

Endpoint

GET /1.1/:account_id/users/current

GET /1.1/9043/users/current
Accept: application/json
Content-Type: application/json
Authorization: Bearer Sfvvl0ndJ2BhgphoifsuX-mGf4DQwSZtO0HQ98kYTWM

Parameters

Name Description
account_id The account ID containing the current user

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 25108,
  "email": "marijamehjxswr@timelyapp.com",
  "name": "Marija Petrovic",
  "active": false,
  "day_view_onboarded": true,
  "memory_onboarded": true,
  "created_at": 1599213744,
  "updated_at": 1599213744,
  "last_received_memories_date": null,
  "sign_in_count": null,
  "external_id": null,
  "time_zone": "Europe/Paris",
  "avatar": {
    "large_retina": "https://www.gravatar.com/avatar/f4b4d3ea59e9db2848a0a4f548735baf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
    "large": "https://www.gravatar.com/avatar/f4b4d3ea59e9db2848a0a4f548735baf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
    "medium_retina": "https://www.gravatar.com/avatar/f4b4d3ea59e9db2848a0a4f548735baf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
    "medium": "https://www.gravatar.com/avatar/f4b4d3ea59e9db2848a0a4f548735baf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
    "small_retina": "https://www.gravatar.com/avatar/f4b4d3ea59e9db2848a0a4f548735baf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25",
    "small": "https://www.gravatar.com/avatar/f4b4d3ea59e9db2848a0a4f548735baf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25"
  },
  "type": "User",
  "user_level": "admin",
  "admin": true,
  "hide_hourly_rate": false,
  "deleted": false,
  "default_hour_rate": 0.0,
  "role_id": 26946,
  "role": {
    "id": 26946,
    "name": "admin"
  },
  "weekly_capacity": 40.0
}

Update a user

Note:

Please use the parameters mentioned in “Create/Invite a user”.

Only admins can edit “user_level” and “projects” fields for other users.

Admins can update other users’ profiles. Limited users can only update their own profile.

Request

curl "https://api.timelyapp.com/1.1/9045/users/25112" -d '{"user":{"name":"Robin","user_level":"normal","admin":false,"projects":[{"project_id":42400,"hour_rate":10}]},"admin":{"id":2380,"email":"notifications@timelyapp.com","created_at":"2020-09-04T12:02:26.000+02:00","updated_at":"2020-09-04T12:02:26.000+02:00","name":"Timely","notifier":false}}' -X PUT \
    -H "Host: api.timelyapp.com" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer qHoaJJYHl5G9v4AFj4eY4qwHlj_Dmc5Bllv674D_AsU" \
    -H "Cookie: "

Endpoint

PUT /1.1/:account_id/users/:id

PUT /1.1/9045/users/25112
Accept: application/json
Content-Type: application/json
Authorization: Bearer qHoaJJYHl5G9v4AFj4eY4qwHlj_Dmc5Bllv674D_AsU

Parameters

{"user":{"name":"Robin","user_level":"normal","admin":false,"projects":[{"project_id":42400,"hour_rate":10}]},"admin":{"id":2380,"email":"notifications@timelyapp.com","created_at":"2020-09-04T12:02:26.000+02:00","updated_at":"2020-09-04T12:02:26.000+02:00","name":"Timely","notifier":false}}
Name Description
id required the numerical ID of the user
user required Label attributes
projects Specifies the projects that the user will be part of. For example: "projects": [ {"project_id": 11 , "hour_rate": 10 }, {"project_id": 12 , "hour_rate": 20 }]
role_id required Specifies the user's role in the account
user_level (Deprecated) Specifies the user level; either “normal” or “limited”. The default is "normal". For example: "user_level": "normal"
admin (Deprecated) Specifies the user is an admin. In this case user_level should be “normal”. For example: "admin": "true"
weekly_capacity Specifies the user's weekly hour capacity. The default is the account's weekly capacity. To avoid rounding issues, values are allowed upto 1 decimal place and divisible by 5.
add_to_all_projects Specifies whether the user should be added to all projects in the account. For example: "add_to_all_projects":true

Response

Content-Type: application/json; charset=utf-8
200 OK
{
  "id": 25112,
  "email": "marijamgmocvpz@timelyapp.com",
  "name": "Marija Petrovic",
  "active": false,
  "day_view_onboarded": true,
  "memory_onboarded": true,
  "created_at": 1599213745,
  "updated_at": 1599213745,
  "last_received_memories_date": null,
  "sign_in_count": null,
  "external_id": null,
  "time_zone": "Europe/Paris",
  "avatar": {
    "large_retina": "https://www.gravatar.com/avatar/81c66fc1b799fc6726795d32a8df9711?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
    "large": "https://www.gravatar.com/avatar/81c66fc1b799fc6726795d32a8df9711?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-d4612e316dfb7aecf35477055a2987158899c94e147efe7e5960d605dc37b674.jpg&s=200",
    "medium_retina": "https://www.gravatar.com/avatar/81c66fc1b799fc6726795d32a8df9711?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
    "medium": "https://www.gravatar.com/avatar/81c66fc1b799fc6726795d32a8df9711?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=50",
    "small_retina": "https://www.gravatar.com/avatar/81c66fc1b799fc6726795d32a8df9711?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25",
    "small": "https://www.gravatar.com/avatar/81c66fc1b799fc6726795d32a8df9711?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-4715ba0edcfabca71404b6c34fa565f9edcd98f3dcea355e3695445ee5a3238b.jpg&s=25"
  },
  "type": "User",
  "user_level": "manager",
  "admin": false,
  "hide_hourly_rate": false,
  "deleted": false,
  "default_hour_rate": 0.0,
  "role_id": 26953,
  "role": {
    "id": 26953,
    "name": "manager"
  },
  "weekly_capacity": 40.0
}

Errors

Example responses:

422 Unprocessable Entity
{
  "errors":{
    "name":[
      "can't be blank"
    ],
    "project_users":[
      "is invalid"
    ]
  }
}
422 Unprocessable Entity
403 Forbidden
{
  "errors":{
    "message":"error message"
  }
}
404 Not Found
{
  "errors":{
    "message":"Not Found"
  }
}
401 Unauthorized
{
  "errors":{
    "message":"Unauthorized"
  }
}

Timely uses conventional HTTP response codes to indicate the success or failure of an API request. Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed due to the information provided. Codes in the 5xx range indicate an error with Timely's servers.

Unauthorized access o projects and accounts, or trying to create or delete objects that are not under our control, will result in errors.

The Timely API uses the following error codes:

Error Code Meaning
400 - Bad Request Your request is invalid
401 - Unauthorized Wrong authentication token was used
403 - Forbidden The entity requested is hidden from unauthorized access
404 - Not Found The specified entity could not be found
422 - Unprocessable Entity The server understands the content type, but was unable to process the request
500 - Internal Server Error We’re experiencing a problem with our server. Try again later.