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 TGmeSj1pQ4vo5Wn578c7gSVmDHj2v0Ir5HTp_73yFcw" \
-H "Cookie: "
Endpoint
GET /1.1/accounts
GET /1.1/accounts
Accept: application/json
Content-Type: application/json
Authorization: Bearer TGmeSj1pQ4vo5Wn578c7gSVmDHj2v0Ir5HTp_73yFcw
Parameters
None known.
Response
Content-Type: application/json; charset=utf-8
200 OK
[
{
"id": 10861,
"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-8bc212c450af14b3a0ea49098cdddbe4f90d5eb5fc57adfeade6ac1ad8fb1d4a.png",
"medium_retina": "/assets/account_thumbs/account_medium_retina-10dfbcc6733ccba1d485971f63c5eb7f9b7ed1a942a0ebd140e292bcb1e4dbea.png",
"small_retina": "/assets/account_thumbs/account_small_retina-ea5df153b4cd96fc801e2361afc7d1b06d7b95ce5c358250b81149e1a20689df.png",
"brand_logo": false
},
"from": "Web",
"max_users": 0,
"seats": 1,
"max_projects": 0,
"plan_id": 11016,
"plan_name": "Essential",
"next_charge": "2021-01-24",
"start_of_week": 0,
"created_at": 1608793375,
"payment_mode": "web",
"paid": true,
"company_size": "10-49",
"plan_code": "essential",
"plan_custom": false,
"appstore_transaction_id": null,
"owner_id": 28461,
"weekly_user_capacity": 40.0,
"default_hour_rate": 0.0,
"support_email": "support@timelyapp.com",
"estimated_company_size": null,
"industry": null,
"num_users": 1,
"num_projects": 0,
"active_projects_count": 0,
"total_projects_count": 0,
"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": "premium_integrations",
"days": -1
},
{
"name": "individual_capacity",
"days": -1
},
{
"name": "audits",
"days": -1
},
{
"name": "project_dashboard",
"days": -1
},
{
"name": "high_level_reports",
"days": -1
},
{
"name": "live_reports",
"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/10859/activities" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Iq0yenJnmYIXMrLK68o12QdXAMsv6uhAZMdHm6o3a9c" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/activities
GET /1.1/10859/activities
Accept: application/json
Content-Type: application/json
Authorization: Bearer Iq0yenJnmYIXMrLK68o12QdXAMsv6uhAZMdHm6o3a9c
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": 5402,
"user": {
"id": 28456,
"email": "marijanowjgbry@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:02:54+01:00"
},
"message": "archived",
"activity_type": "archive_project",
"url": "http://app.timelyapp.local:3002/10859/projects/12923",
"updated_at": "2020-12-17T08:02:54+01:00",
"detail": null,
"associated_ids": [
],
"entity_type": "Project",
"entity_deleted": false,
"parent_entity_name": "",
"entity": {
"id": 12923,
"active": true,
"name": "Timely",
"color": "67a3bc",
"client": {
"id": 8377,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:02:54+01:00"
},
"updated_at": "2020-12-24T08:02:54+01:00"
},
"anomaly": false
},
{
"id": 5401,
"user": {
"id": 28456,
"email": "marijanowjgbry@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/db058c65c5f37ce3d8f91c12f6db4956?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:02:54+01:00"
},
"message": "50% of budget used",
"activity_type": "project_budget_progress_fifty",
"url": "http://app.timelyapp.local:3002/10859/projects/12923",
"updated_at": "2020-12-24T08:02:54+01:00",
"detail": null,
"associated_ids": [
],
"entity_type": "Project",
"entity_deleted": false,
"parent_entity_name": "",
"entity": {
"id": 12923,
"active": true,
"name": "Timely",
"color": "67a3bc",
"client": {
"id": 8377,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:02:54+01:00"
},
"updated_at": "2020-12-24T08:02:54+01: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/10860" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer yZDRFIcNneZWyEHEjpr1f5vrpDWsYdCoTnAgzUwGL1Y" \
-H "Cookie: "
Endpoint
GET /1.1/accounts/:id
GET /1.1/accounts/10860
Accept: application/json
Content-Type: application/json
Authorization: Bearer yZDRFIcNneZWyEHEjpr1f5vrpDWsYdCoTnAgzUwGL1Y
Parameters
Name | Description |
---|---|
id | The id of the account to be retrieved |
Response
Content-Type: application/json; charset=utf-8
200 OK
{
"id": 10860,
"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-8bc212c450af14b3a0ea49098cdddbe4f90d5eb5fc57adfeade6ac1ad8fb1d4a.png",
"medium_retina": "/assets/account_thumbs/account_medium_retina-10dfbcc6733ccba1d485971f63c5eb7f9b7ed1a942a0ebd140e292bcb1e4dbea.png",
"small_retina": "/assets/account_thumbs/account_small_retina-ea5df153b4cd96fc801e2361afc7d1b06d7b95ce5c358250b81149e1a20689df.png",
"brand_logo": false
},
"from": "Web",
"max_users": 0,
"seats": 1,
"max_projects": 0,
"plan_id": 11015,
"plan_name": "Essential",
"next_charge": "2021-01-24",
"start_of_week": 0,
"created_at": 1608793374,
"payment_mode": "web",
"paid": true,
"company_size": "10-49",
"plan_code": "essential",
"plan_custom": false,
"appstore_transaction_id": null,
"owner_id": 28459,
"weekly_user_capacity": 40.0,
"default_hour_rate": 0.0,
"support_email": "support@timelyapp.com",
"estimated_company_size": null,
"industry": null,
"num_users": 1,
"num_projects": 0,
"active_projects_count": 0,
"total_projects_count": 0,
"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": "premium_integrations",
"days": -1
},
{
"name": "individual_capacity",
"days": -1
},
{
"name": "audits",
"days": -1
},
{
"name": "project_dashboard",
"days": -1
},
{
"name": "high_level_reports",
"days": -1
},
{
"name": "live_reports",
"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/10883/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 NQMhxdzT3JqSyn1lFMkFRa4sNold06GWiuyku62HmMY" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/clients
POST /1.1/10883/clients
Accept: application/json
Content-Type: application/json
Authorization: Bearer NQMhxdzT3JqSyn1lFMkFRa4sNold06GWiuyku62HmMY
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": 8393,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:06+01: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/10884/clients" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer AepB3RKRggO8uTZ0EnwNjWYVixMNEmUBa7X6gXBSuOA" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/clients
GET /1.1/10884/clients
Accept: application/json
Content-Type: application/json
Authorization: Bearer AepB3RKRggO8uTZ0EnwNjWYVixMNEmUBa7X6gXBSuOA
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": 8394,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:07+01:00"
}
]
Update a client
Update client details just by using a client’s ID.
Request
curl "https://api.timelyapp.com/1.1/10885/clients/8395" -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 aCONHjNAd46WZcKaUMSpuHDjAlB8FtrcqSONGq98cKE" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/clients/:id
PUT /1.1/10885/clients/8395
Accept: application/json
Content-Type: application/json
Authorization: Bearer aCONHjNAd46WZcKaUMSpuHDjAlB8FtrcqSONGq98cKE
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": 8395,
"name": "Updated name",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:07+01: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/10903/events" -d '{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-12-24T08:03:14.740+01:00","to":"2020-12-24T11:33:14.740+01:00","day":"2020-12-24","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":12946}}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer v-MJ07Dt6BCWML1va3eQcbiPYQcHI07EwBb2DOT1swM" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/events
POST /1.1/10903/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer v-MJ07Dt6BCWML1va3eQcbiPYQcHI07EwBb2DOT1swM
Parameters
{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-12-24T08:03:14.740+01:00","to":"2020-12-24T11:33:14.740+01:00","day":"2020-12-24","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":12946}}
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": 19909,
"uid": "ff8d98d68afd8c8ce87d338b8b44c84c",
"user": {
"id": 28550,
"email": "marijafrahkvhb@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/ffdb5c76ad52539c23c344747902ec82?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/ffdb5c76ad52539c23c344747902ec82?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/ffdb5c76ad52539c23c344747902ec82?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/ffdb5c76ad52539c23c344747902ec82?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/ffdb5c76ad52539c23c344747902ec82?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:14+01:00"
},
"project": {
"id": 12946,
"active": true,
"account_id": 10903,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793394,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8401,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:14+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793394,
"created_at": 1608793394,
"created_from": "Timely",
"updated_from": "Timely",
"billed": false,
"to": "2020-12-24T11:33:14+01:00",
"from": "2020-12-24T08:03:14+01:00",
"deleted": false,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"creator_id": 28550,
"updater_id": 28550,
"external_id": null,
"entry_ids": [
],
"suggestion_id": null,
"draft": false,
"manage": true,
"timestamps": [
]
}
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/10902/projects/12945/events" -d '{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-12-24T08:03:13.897+01:00","to":"2020-12-24T11:33:13.897+01:00","day":"2020-12-24","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":12945}}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ZZi5L7g6PzC9DrwYPA3lFUU04hXuH0WdIZGvhdiNnio" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/projects/:project_id/events
POST /1.1/10902/projects/12945/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer ZZi5L7g6PzC9DrwYPA3lFUU04hXuH0WdIZGvhdiNnio
Parameters
{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-12-24T08:03:13.897+01:00","to":"2020-12-24T11:33:13.897+01:00","day":"2020-12-24","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":12945}}
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": 19908,
"uid": "3e0cb4a1171e1be5a03dbd5d46c09ac1",
"user": {
"id": 28548,
"email": "marijatjfsgpwn@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/bbf6af742162d42c798d9c430e09afdf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/bbf6af742162d42c798d9c430e09afdf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/bbf6af742162d42c798d9c430e09afdf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/bbf6af742162d42c798d9c430e09afdf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/bbf6af742162d42c798d9c430e09afdf?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:13+01:00"
},
"project": {
"id": 12945,
"active": true,
"account_id": 10902,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793393,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8400,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:13+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793393,
"created_at": 1608793393,
"created_from": "Timely",
"updated_from": "Timely",
"billed": false,
"to": "2020-12-24T11:33:13+01:00",
"from": "2020-12-24T08:03:13+01:00",
"deleted": false,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"creator_id": 28548,
"updater_id": 28548,
"external_id": null,
"entry_ids": [
],
"suggestion_id": null,
"draft": false,
"manage": true,
"timestamps": [
]
}
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/10901/users/28546/events" -d '{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-12-24T08:03:13.265+01:00","to":"2020-12-24T11:33:13.265+01:00","day":"2020-12-24","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":28546}}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer _JHQzTYqx8_Uxa-xnv-mmbQz9-NOb9HV7W098pu8_LI" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/users/:user_id/events
POST /1.1/10901/users/28546/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer _JHQzTYqx8_Uxa-xnv-mmbQz9-NOb9HV7W098pu8_LI
Parameters
{"event":{"hours":3,"minutes":30,"seconds":0,"estimated_hours":4,"estimated_minutes":0,"from":"2020-12-24T08:03:13.265+01:00","to":"2020-12-24T11:33:13.265+01:00","day":"2020-12-24","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":28546}}
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": 19907,
"uid": "baa905e9af0bf1f9ad514661288b8da7",
"user": {
"id": 28546,
"email": "marijakmgwcnum@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/75c3c31008edd9a3af588e2bed0c6c88?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/75c3c31008edd9a3af588e2bed0c6c88?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/75c3c31008edd9a3af588e2bed0c6c88?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/75c3c31008edd9a3af588e2bed0c6c88?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/75c3c31008edd9a3af588e2bed0c6c88?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:12+01:00"
},
"project": {
"id": 12944,
"active": true,
"account_id": 10901,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793393,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8399,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:13+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793393,
"created_at": 1608793393,
"created_from": "Timely",
"updated_from": "Timely",
"billed": false,
"to": "2020-12-24T11:33:13+01:00",
"from": "2020-12-24T08:03:13+01:00",
"deleted": false,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"creator_id": 28546,
"updater_id": 28546,
"external_id": null,
"entry_ids": [
],
"suggestion_id": null,
"draft": false,
"manage": true,
"timestamps": [
]
}
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/10904/events/19910" -d '' -X DELETE \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Ibn2M0zikpdGitPUlwWgca9MIiZqsWDITdYttzF9_uQ" \
-H "Cookie: "
Endpoint
DELETE /1.1/:account_id/events/:id
DELETE /1.1/10904/events/19910
Accept: application/json
Content-Type: application/json
Authorization: Bearer Ibn2M0zikpdGitPUlwWgca9MIiZqsWDITdYttzF9_uQ
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/10908/events" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YrQDHcccbDnWXQzbsgyss4Ixe2RMLWrfkTybm1XmNf0" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/events
GET /1.1/10908/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer YrQDHcccbDnWXQzbsgyss4Ixe2RMLWrfkTybm1XmNf0
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": 19914,
"uid": "8671e7b4d35f3d498f22e225dbe70bd9",
"user": {
"id": 28560,
"email": "marijallerqkie@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/c19f241107d783783e11b249564895a9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/c19f241107d783783e11b249564895a9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/c19f241107d783783e11b249564895a9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/c19f241107d783783e11b249564895a9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/c19f241107d783783e11b249564895a9?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:16+01:00"
},
"project": {
"id": 12951,
"active": true,
"account_id": 10908,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793397,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8406,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:17+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793397,
"created_at": 1608793397,
"created_from": "Web",
"updated_from": "Web",
"billed": false,
"to": "2020-12-24T11:33:17+01:00",
"from": "2020-12-24T08:03:17+01: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,
"timestamps": [
]
}
]
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/10910/projects/12953/events" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xWCzsJ-dF1o9NUgUKiRMorFw4hakoimHZuQ4m1rYXaM" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/projects/:project_id/events
GET /1.1/10910/projects/12953/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer xWCzsJ-dF1o9NUgUKiRMorFw4hakoimHZuQ4m1rYXaM
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": 19916,
"uid": "fae75a8425c0af8e14d2487ef9984b7d",
"user": {
"id": 28564,
"email": "marijaqxmrovat@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/8fbc54f49cc93cfa86c4ee316b3a059e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/8fbc54f49cc93cfa86c4ee316b3a059e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/8fbc54f49cc93cfa86c4ee316b3a059e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/8fbc54f49cc93cfa86c4ee316b3a059e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/8fbc54f49cc93cfa86c4ee316b3a059e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:17+01:00"
},
"project": {
"id": 12953,
"active": true,
"account_id": 10910,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793398,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8408,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:18+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793398,
"created_at": 1608793398,
"created_from": "Web",
"updated_from": "Web",
"billed": false,
"to": "2020-12-24T11:33:18+01:00",
"from": "2020-12-24T08:03:18+01: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,
"timestamps": [
]
}
]
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/10909/users/28562/events" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Qfs6ss4w-Qg3dHS4rlladtmG2erS0mBtZYhBnf1NDiA" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/users/:user_id/events
GET /1.1/10909/users/28562/events
Accept: application/json
Content-Type: application/json
Authorization: Bearer Qfs6ss4w-Qg3dHS4rlladtmG2erS0mBtZYhBnf1NDiA
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": 19915,
"uid": "dbc52e4cacdf6537676c04fbcfca8941",
"user": {
"id": 28562,
"email": "marijagrkhqvts@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/815d54fd3d9e89f2a3c97e2b255de194?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/815d54fd3d9e89f2a3c97e2b255de194?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/815d54fd3d9e89f2a3c97e2b255de194?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/815d54fd3d9e89f2a3c97e2b255de194?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/815d54fd3d9e89f2a3c97e2b255de194?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:17+01:00"
},
"project": {
"id": 12952,
"active": true,
"account_id": 10909,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793397,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8407,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:17+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793397,
"created_at": 1608793397,
"created_from": "Web",
"updated_from": "Web",
"billed": false,
"to": "2020-12-24T11:33:17+01:00",
"from": "2020-12-24T08:03:17+01: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,
"timestamps": [
]
}
]
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/10915/users/28574/events/19921" -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 TI5Omqa5p3DGFDV-29jUonsPy6WCXmpsm23lDtNqTlY" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/users/:user_id/events/:id
PUT /1.1/10915/users/28574/events/19921
Accept: application/json
Content-Type: application/json
Authorization: Bearer TI5Omqa5p3DGFDV-29jUonsPy6WCXmpsm23lDtNqTlY
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": 19921,
"uid": "70b04185b1e0a17f468a13593457510b",
"user": {
"id": 28574,
"email": "marijawfgckkop@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/d6f4fa75526d50bc69303b97921d001e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/d6f4fa75526d50bc69303b97921d001e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/d6f4fa75526d50bc69303b97921d001e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/d6f4fa75526d50bc69303b97921d001e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/d6f4fa75526d50bc69303b97921d001e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:20+01:00"
},
"project": {
"id": 12958,
"active": true,
"account_id": 10915,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793401,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8413,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:21+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793401,
"created_at": 1608793401,
"created_from": "Web",
"updated_from": "Timely",
"billed": false,
"to": "2020-12-24T11:33:21+01:00",
"from": "2020-12-24T08:03:21+01:00",
"deleted": false,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"creator_id": null,
"updater_id": 28574,
"external_id": null,
"entry_ids": [
],
"suggestion_id": null,
"draft": false,
"manage": true,
"timestamps": [
]
}
Loggedin user updating details and project of their event
Request
curl "https://api.timelyapp.com/1.1/10914/projects/12957/events/19920" -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 yjw5m7ijal8pJituI2JQlZvOPRmI-HIBHL8W8NGPi1E" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/projects/:project_id/events/:id
PUT /1.1/10914/projects/12957/events/19920
Accept: application/json
Content-Type: application/json
Authorization: Bearer yjw5m7ijal8pJituI2JQlZvOPRmI-HIBHL8W8NGPi1E
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": 19920,
"uid": "628347fbb4918e2e37cf2fcee4dd0844",
"user": {
"id": 28572,
"email": "marijafictkcvn@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/136545e223e2ca95ecabae91181c6518?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/136545e223e2ca95ecabae91181c6518?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/136545e223e2ca95ecabae91181c6518?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/136545e223e2ca95ecabae91181c6518?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/136545e223e2ca95ecabae91181c6518?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:20+01:00"
},
"project": {
"id": 12957,
"active": true,
"account_id": 10914,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793400,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8412,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:20+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793400,
"created_at": 1608793400,
"created_from": "Web",
"updated_from": "Timely",
"billed": false,
"to": "2020-12-24T11:33:20+01:00",
"from": "2020-12-24T08:03:20+01:00",
"deleted": false,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"creator_id": null,
"updater_id": 28572,
"external_id": null,
"entry_ids": [
],
"suggestion_id": null,
"draft": false,
"manage": true,
"timestamps": [
]
}
Retrieve an event
Request
curl -g "https://api.timelyapp.com/1.1/10907/events/19913" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer lx_Z9hYtjmkFqr52FytO1NJNjl7GidEjULfAxFEnoPU" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/events/:id
GET /1.1/10907/events/19913
Accept: application/json
Content-Type: application/json
Authorization: Bearer lx_Z9hYtjmkFqr52FytO1NJNjl7GidEjULfAxFEnoPU
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": 19913,
"uid": "4f4c7d3dd85ea84eb208d7cd031dbfe7",
"user": {
"id": 28558,
"email": "marijadxnawrdf@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/a10ed222b995575356b69037302e603f?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/a10ed222b995575356b69037302e603f?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/a10ed222b995575356b69037302e603f?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/a10ed222b995575356b69037302e603f?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/a10ed222b995575356b69037302e603f?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:16+01:00"
},
"project": {
"id": 12950,
"active": true,
"account_id": 10907,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793396,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8405,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:16+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"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": 1608793396,
"created_at": 1608793396,
"created_from": "Web",
"updated_from": "Web",
"billed": false,
"to": "2020-12-24T11:33:16+01:00",
"from": "2020-12-24T08:03:16+01: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,
"timestamps": [
]
}
Start timer on an event
Request
curl "https://api.timelyapp.com/1.1/10911/events/19917/start" -d '' -X PUT \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer MtOjUXBYUYn1p5VZ79tYIpLBAuTLNwPtcDHV1TjW4ZY" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/events/:id/start
PUT /1.1/10911/events/19917/start
Accept: application/json
Content-Type: application/json
Authorization: Bearer MtOjUXBYUYn1p5VZ79tYIpLBAuTLNwPtcDHV1TjW4ZY
Parameters
Name | Description |
---|---|
id required | Event ID |
Response
Content-Type: application/json; charset=utf-8
200 OK
{
"id": 19917,
"uid": "3c11b06a39962827e21ddff5932f5262",
"user": {
"id": 28566,
"email": "marijakrnwdzvb@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/2a2e3ab4292e6a5dae87f6158eeef74e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/2a2e3ab4292e6a5dae87f6158eeef74e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/2a2e3ab4292e6a5dae87f6158eeef74e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/2a2e3ab4292e6a5dae87f6158eeef74e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/2a2e3ab4292e6a5dae87f6158eeef74e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:18+01:00"
},
"project": {
"id": 12954,
"active": true,
"account_id": 10911,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793399,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8409,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:18+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"note": "Notes for testing with some random #hash in it.",
"sequence": 1,
"estimated": false,
"timer_state": "start",
"timer_started_on": 1608793399,
"timer_stopped_on": 0,
"label_ids": [
],
"user_ids": [
],
"updated_at": 1608793399,
"created_at": 1608793398,
"created_from": "Web",
"updated_from": "Timely",
"billed": false,
"to": "2020-12-24T11:33:18+01:00",
"from": "2020-12-24T08:03:18+01:00",
"deleted": false,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"creator_id": null,
"updater_id": 28566,
"external_id": null,
"entry_ids": [
],
"suggestion_id": null,
"draft": false,
"manage": true,
"timestamps": [
]
}
Stop timer on an event
Request
curl "https://api.timelyapp.com/1.1/10912/events/19918/stop" -d '' -X PUT \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer iN41tvzDVWo5yvGZXwjC1b7mF_zgB-MnCGGtk8tYyQA" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/events/:id/stop
PUT /1.1/10912/events/19918/stop
Accept: application/json
Content-Type: application/json
Authorization: Bearer iN41tvzDVWo5yvGZXwjC1b7mF_zgB-MnCGGtk8tYyQA
Parameters
Name | Description |
---|---|
id required | Event ID |
Response
Content-Type: application/json; charset=utf-8
200 OK
{
"id": 19918,
"uid": "3f3689f1568b9f2a2fa8ed2e81f6b2fd",
"user": {
"id": 28568,
"email": "marijapmnrrmam@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/e148a325c1324ab742c710f8fc6c784e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/e148a325c1324ab742c710f8fc6c784e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/e148a325c1324ab742c710f8fc6c784e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/e148a325c1324ab742c710f8fc6c784e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/e148a325c1324ab742c710f8fc6c784e?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:19+01:00"
},
"project": {
"id": 12955,
"active": true,
"account_id": 10912,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793399,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8410,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:19+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"note": "Notes for testing with some random #hash in it.",
"sequence": 1,
"estimated": false,
"timer_state": "stop",
"timer_started_on": 0,
"timer_stopped_on": 1608793399,
"label_ids": [
],
"user_ids": [
],
"updated_at": 1608793399,
"created_at": 1608793399,
"created_from": "Web",
"updated_from": "Timely",
"billed": false,
"to": "2020-12-24T11:33:19+01:00",
"from": "2020-12-24T08:03:19+01:00",
"deleted": false,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"creator_id": null,
"updater_id": 28568,
"external_id": null,
"entry_ids": [
],
"suggestion_id": null,
"draft": false,
"manage": true,
"timestamps": [
]
}
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/10913/events/19919" -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 6Eh2RaPVOBtWZ7bseIcRihLdlczXkexCR5OoV7vdtms" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/events/:id
PUT /1.1/10913/events/19919
Accept: application/json
Content-Type: application/json
Authorization: Bearer 6Eh2RaPVOBtWZ7bseIcRihLdlczXkexCR5OoV7vdtms
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": 19919,
"uid": "4c5c98fd09266448b84dcb5545240b36",
"user": {
"id": 28570,
"email": "marijacuhutkhh@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/b397a8d0ef0e43c0e2d94f8ba022f7fe?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/b397a8d0ef0e43c0e2d94f8ba022f7fe?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/b397a8d0ef0e43c0e2d94f8ba022f7fe?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/b397a8d0ef0e43c0e2d94f8ba022f7fe?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/b397a8d0ef0e43c0e2d94f8ba022f7fe?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:19+01:00"
},
"project": {
"id": 12956,
"active": true,
"account_id": 10913,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793400,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8411,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:20+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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-12-24",
"note": "Updated notes",
"sequence": 1,
"estimated": true,
"timer_state": "default",
"timer_started_on": 0,
"timer_stopped_on": 0,
"label_ids": [
],
"user_ids": [
],
"updated_at": 1608793400,
"created_at": 1608793400,
"created_from": "Web",
"updated_from": "Timely",
"billed": false,
"to": "2020-12-24T11:33:20+01:00",
"from": "2020-12-24T08:03:20+01:00",
"deleted": false,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"creator_id": null,
"updater_id": 28570,
"external_id": null,
"entry_ids": [
],
"suggestion_id": null,
"draft": false,
"manage": true,
"timestamps": [
]
}
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/10920/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":28584,"project_id":12963}}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Vhzz128bSpN49sfVZ8V8lC9JcN5RdBfGSiUaqZmktsU" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/forecasts
POST /1.1/10920/forecasts
Accept: application/json
Content-Type: application/json
Authorization: Bearer Vhzz128bSpN49sfVZ8V8lC9JcN5RdBfGSiUaqZmktsU
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":28584,"project_id":12963}}
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": 470,
"note": "Note",
"from": "2019-05-10",
"to": "2019-05-16",
"user": {
"id": 28584,
"email": "marijaknmtrljp@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/0fba43a58f269ad002d0f51b2d6e60f7?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/0fba43a58f269ad002d0f51b2d6e60f7?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/0fba43a58f269ad002d0f51b2d6e60f7?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/0fba43a58f269ad002d0f51b2d6e60f7?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/0fba43a58f269ad002d0f51b2d6e60f7?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:22+01:00"
},
"project": {
"id": 12963,
"active": true,
"name": "Timely",
"color": "67a3bc",
"client": {
"id": 8418,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:23+01:00"
},
"updated_at": "2020-12-24T08:03:23+01: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-12-24T08:03:23+01:00",
"created_at": "2020-12-24T08:03:23+01:00",
"label_ids": [
]
}
Delete a forecast
Request
curl "https://api.timelyapp.com/1.1/10921/forecasts/471" -d '' -X DELETE \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YeGOXHoz9uneiDoiicLVI_ET7-w9kNvVrIbpiXJLSdM" \
-H "Cookie: "
Endpoint
DELETE /1.1/:account_id/forecasts/:id
DELETE /1.1/10921/forecasts/471
Accept: application/json
Content-Type: application/json
Authorization: Bearer YeGOXHoz9uneiDoiicLVI_ET7-w9kNvVrIbpiXJLSdM
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/10922/forecasts" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer VgZy_oVvYOXHDpOBgKsvph0u8xzOEqlJ0B_mY3irfwQ" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/forecasts
GET /1.1/10922/forecasts
Accept: application/json
Content-Type: application/json
Authorization: Bearer VgZy_oVvYOXHDpOBgKsvph0u8xzOEqlJ0B_mY3irfwQ
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": 472,
"note": "note",
"from": "2020-12-21",
"to": "2020-12-27",
"user": {
"id": 28588,
"email": "marijajwxreksi@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/94930901898f2611dfc8c9370b826a65?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/94930901898f2611dfc8c9370b826a65?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/94930901898f2611dfc8c9370b826a65?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/94930901898f2611dfc8c9370b826a65?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/94930901898f2611dfc8c9370b826a65?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:23+01:00"
},
"project": {
"id": 12965,
"active": true,
"name": "Timely",
"color": "67a3bc",
"client": {
"id": 8420,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:24+01:00"
},
"updated_at": "2020-12-24T08:03:24+01: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-12-24T08:03:24+01:00",
"created_at": "2020-12-24T08:03:24+01:00",
"label_ids": [
]
}
]
Update a forecast
Request
curl "https://api.timelyapp.com/1.1/10923/forecasts/473" -d '{"forecasts":{"note":"new note","from":"2019-05-10","to":"2019-05-16","hours":2,"minutes":0,"user_id":28590,"project_id":12966}}' -X PUT \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 1h3toRrV2zZQ3P7MEnafBmmP33i_SfRkOEv3jqVEv0E" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/forecasts/:id
PUT /1.1/10923/forecasts/473
Accept: application/json
Content-Type: application/json
Authorization: Bearer 1h3toRrV2zZQ3P7MEnafBmmP33i_SfRkOEv3jqVEv0E
Parameters
{"forecasts":{"note":"new note","from":"2019-05-10","to":"2019-05-16","hours":2,"minutes":0,"user_id":28590,"project_id":12966}}
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": 473,
"note": "new note",
"from": "2019-05-10",
"to": "2019-05-16",
"user": {
"id": 28590,
"email": "marijafytrygzd@timelyapp.com",
"name": "Marija Petrovic",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/46cab2cdad8b82769b0f5dd89ec68215?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/46cab2cdad8b82769b0f5dd89ec68215?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/46cab2cdad8b82769b0f5dd89ec68215?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/46cab2cdad8b82769b0f5dd89ec68215?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/46cab2cdad8b82769b0f5dd89ec68215?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.jpg&s="
},
"updated_at": "2020-12-24T08:03:24+01:00"
},
"project": {
"id": 12966,
"active": true,
"name": "Timely",
"color": "67a3bc",
"client": {
"id": 8421,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:24+01:00"
},
"updated_at": "2020-12-24T08:03:24+01: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-12-24T08:03:25+01:00",
"created_at": "2020-12-24T08:03:24+01: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/10936/labels" -d '{"label":{"name":"Web Programming","active":true}}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer XGkBHzEbRAN8IrCAU_I-1jzj5T7JwIcmDToXPCWv9zs" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/labels
POST /1.1/10936/labels
Accept: application/json
Content-Type: application/json
Authorization: Bearer XGkBHzEbRAN8IrCAU_I-1jzj5T7JwIcmDToXPCWv9zs
Parameters
{"label":{"name":"Web Programming","active":true}}
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 |
active | Example values: "true" or "false". Using "false" changes the label state to "archived" |
Response
Content-Type: application/json; charset=utf-8
201 Created
{
"id": 2802,
"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",
"active": true,
"children": [
]
}
Delete a label
Request
curl "https://api.timelyapp.com/1.1/10937/labels/2803" -d '' -X DELETE \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer WvpD8PNbCYcqgIKdM-gKSCuQQezPUO_MF0gKLX30dX4" \
-H "Cookie: "
Endpoint
DELETE /1.1/:account_id/labels/:id
DELETE /1.1/10937/labels/2803
Accept: application/json
Content-Type: application/json
Authorization: Bearer WvpD8PNbCYcqgIKdM-gKSCuQQezPUO_MF0gKLX30dX4
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/10940/labels?parent_id=2805" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eGvroXH--KXDp65qLHz2IWGd4uYi_9VXyDoOFgczM2U" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/labels
GET /1.1/10940/labels?parent_id=2805
Accept: application/json
Content-Type: application/json
Authorization: Bearer eGvroXH--KXDp65qLHz2IWGd4uYi_9VXyDoOFgczM2U
Parameters
parent_id: 2805
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": 2805,
"name": "Web Programming",
"sequence": 1,
"parent_id": null,
"emoji": null,
"active": true,
"children": [
]
}
List all labels
Get all the tags present in user’s account.
Request
curl -g "https://api.timelyapp.com/1.1/10939/labels" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer cFix1bJM6S5TM6o0Mt5SA0rAI2I-ccSWWMvqUcQ8uPk" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/labels
GET /1.1/10939/labels
Accept: application/json
Content-Type: application/json
Authorization: Bearer cFix1bJM6S5TM6o0Mt5SA0rAI2I-ccSWWMvqUcQ8uPk
Parameters
Name | Description |
---|---|
account_id | The account ID containing the label you want to. retrieve |
offset | Retrieve labels from offset |
limit | Retrieve number of labels |
filter | Specifies which records to retrieve. The default shows a current workspace’s all labels (filter=all). Example: "filter=all" or "filter=active" or "filter=archived" |
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/10938/labels/2804" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 9gtNw4J_bqiAbpCEC2y7wFLXi0zM825TSHDjAHPJ-9A" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/labels/:id
GET /1.1/10938/labels/2804
Accept: application/json
Content-Type: application/json
Authorization: Bearer 9gtNw4J_bqiAbpCEC2y7wFLXi0zM825TSHDjAHPJ-9A
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": 2804,
"name": "Web Programming",
"sequence": 1,
"parent_id": null,
"emoji": null,
"active": true,
"children": [
]
}
Update a label
Request
curl "https://api.timelyapp.com/1.1/10941/labels/2806" -d '{"label":{"name":"updated name"}}' -X PUT \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 9fEEcPJJm4oRYl0PHDgt-8yukoGtzUVf9A56LZEz_zE" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/labels/:id
PUT /1.1/10941/labels/2806
Accept: application/json
Content-Type: application/json
Authorization: Bearer 9fEEcPJJm4oRYl0PHDgt-8yukoGtzUVf9A56LZEz_zE
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 |
active | Example values: "true" or "false". Using "false" changes the label state to "archived" |
Response
Content-Type: application/json; charset=utf-8
200 OK
{
"id": 2806,
"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",
"active": true,
"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/10952/users/current/permissions" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xlPzufw0n0flkzrU8cxx65YQUhCEHgTiZDOC1Jds2YA" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/users/current/permissions
GET /1.1/10952/users/current/permissions
Accept: application/json
Content-Type: application/json
Authorization: Bearer xlPzufw0n0flkzrU8cxx65YQUhCEHgTiZDOC1Jds2YA
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/10953/users/28647/permissions" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Q_OBfePkG7i8WKq1cWj--1q65VcZzf22iOs6Yw7vt9c" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/users/:user_id/permissions
GET /1.1/10953/users/28647/permissions
Accept: application/json
Content-Type: application/json
Authorization: Bearer Q_OBfePkG7i8WKq1cWj--1q65VcZzf22iOs6Yw7vt9c
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/10959/projects" -d '{"project":{"name":"New Project","rate_type":"project","hour_rate":50.0,"active":true,"deleted":false,"currency_code":"usd","color":"67a3bc","enable_labels":"all","client_id":8446,"budget_type":"M","budget":300,"users":[{"user_id":28659}],"budget_recurrence":{"recur":"week","start_date":"2018-09-21","end_date":"2019-09-21","recur_until":"end_date"},"labels":[{"label_id":2807,"required":true},{"label_id":2808,"required":true},{"label_id":2809,"required":false},{"label_id":2810,"required":false}]}}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer yXSC5sNTyraPyDTc8I6FPvNEi-faPVpv3Zi-basgFVY" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/projects
POST /1.1/10959/projects
Accept: application/json
Content-Type: application/json
Authorization: Bearer yXSC5sNTyraPyDTc8I6FPvNEi-faPVpv3Zi-basgFVY
Parameters
{"project":{"name":"New Project","rate_type":"project","hour_rate":50.0,"active":true,"deleted":false,"currency_code":"usd","color":"67a3bc","enable_labels":"all","client_id":8446,"budget_type":"M","budget":300,"users":[{"user_id":28659}],"budget_recurrence":{"recur":"week","start_date":"2018-09-21","end_date":"2019-09-21","recur_until":"end_date"},"labels":[{"label_id":2807,"required":true},{"label_id":2808,"required":true},{"label_id":2809,"required":false},{"label_id":2810,"required":false}]}}
Name | Description |
---|---|
project required | Project attributes |
name required | Specifies the project name |
color required | Specifies the project color. Example values: 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 }] |
enable_labels | Specifies the way labels will be allowed for logging for the project. It should be “all”, “none” or “custom” |
Response
Content-Type: application/json; charset=utf-8
201 Created
{
"id": 12992,
"active": true,
"account_id": 10959,
"name": "New Project",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793419,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8446,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:39+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": true,
"enable_labels": "all",
"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": 28659,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"updated_at": "2020-12-24T08:03:39+01:00",
"created_at": "2020-12-24T08:03:39+01: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,
"budget_recurrence": {
"recur": "week",
"start_date": "2018-09-21",
"end_date": "2019-09-21",
"recur_until": "end_date",
"days_count": 365,
"updated_at": "2020-12-24T08:03:39+01:00"
}
}
Delete a project
Request
curl "https://api.timelyapp.com/1.1/10960/projects/12993" -d '' -X DELETE \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer wTCBdqZay1RRTPI56KJKD_DdkU4N_eilndB-625CGPw" \
-H "Cookie: "
Endpoint
DELETE /1.1/:account_id/projects/:id
DELETE /1.1/10960/projects/12993
Accept: application/json
Content-Type: application/json
Authorization: Bearer wTCBdqZay1RRTPI56KJKD_DdkU4N_eilndB-625CGPw
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/10962/projects" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Ff5r-3gO_lrcT6Q2bUZffmMsNzg3gbDw5ci1KkMkgtE" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/projects
GET /1.1/10962/projects
Accept: application/json
Content-Type: application/json
Authorization: Bearer Ff5r-3gO_lrcT6Q2bUZffmMsNzg3gbDw5ci1KkMkgtE
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": 12995,
"active": true,
"account_id": 10962,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793421,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8449,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:41+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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": 28665,
"hour_rate": 100.0,
"hour_rate_in_cents": 10000.0,
"updated_at": "2020-12-24T08:03:41+01:00",
"created_at": "2020-12-24T08:03:41+01: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/10961/projects/12994" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 8zqRjHNXsazVMrDQbFXyL8jRPjGy7GtZBMBrNirqSyQ" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/projects/:id
GET /1.1/10961/projects/12994
Accept: application/json
Content-Type: application/json
Authorization: Bearer 8zqRjHNXsazVMrDQbFXyL8jRPjGy7GtZBMBrNirqSyQ
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": 12994,
"active": true,
"account_id": 10961,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793421,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8448,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:41+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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": 28663,
"hour_rate": 100.0,
"hour_rate_in_cents": 10000.0,
"updated_at": "2020-12-24T08:03:41+01:00",
"created_at": "2020-12-24T08:03:41+01: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/10964/projects/12997" -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 hCKo0J7a4PjSmiWUKyJ3OEzJ6uK40Iq62ebgBjZXiIw" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/projects/:id
PUT /1.1/10964/projects/12997
Accept: application/json
Content-Type: application/json
Authorization: Bearer hCKo0J7a4PjSmiWUKyJ3OEzJ6uK40Iq62ebgBjZXiIw
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 |
enable_labels | Specifies the way labels will be allowed for logging the project. It should be “all”, “none” or “custom” |
Response
Content-Type: application/json; charset=utf-8
200 OK
{
"id": 12997,
"active": true,
"account_id": 10964,
"name": "updated project name",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793422,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8451,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:03:42+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "none",
"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": 28669,
"hour_rate": 50.0,
"hour_rate_in_cents": 5000.0,
"updated_at": "2020-12-24T08:03:42+01:00",
"created_at": "2020-12-24T08:03:42+01: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
Report on activity across your business, including individual and team performance. Export report data from JSON to a format of your choice. Note: .XLS, .CSV and .PDF report formats can only be downloaded from the web UI, not the API.
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/10996/reports" -d '{"user_ids":"28764","since":"2018-01-01","until":"2019-01-01","project_ids":"13066"}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ekegZcRvvHLi1sONPIsDK61jTeZnKQvgSe7s73ntz90" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/reports
POST /1.1/10996/reports
Accept: application/json
Content-Type: application/json
Authorization: Bearer ekegZcRvvHLi1sONPIsDK61jTeZnKQvgSe7s73ntz90
Parameters
{"user_ids":"28764","since":"2018-01-01","until":"2019-01-01","project_ids":"13066"}
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": 8483,
"name": "Timely",
"projects": [
{
"id": 13066,
"active": true,
"account_id": 10996,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793440,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8483,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:04:00+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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/10997/reports/filter" -d '{"user_ids":"28766","since":"2018-01-01","until":"2019-01-01","project_ids":"13067"}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer tWMAlwTLgO8uIEj_FIzlyok3h35SEBJk7zn8OqcxUI4" \
-H "Cookie: "
Endpoint
POST 1.1/:account_id/reports/filter
POST 1.1/10997/reports/filter
Accept: application/json
Content-Type: application/json
Authorization: Bearer tWMAlwTLgO8uIEj_FIzlyok3h35SEBJk7zn8OqcxUI4
Parameters
{"user_ids":"28766","since":"2018-01-01","until":"2019-01-01","project_ids":"13067"}
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": 8484,
"name": "Timely",
"projects": [
{
"id": 13067,
"active": true,
"account_id": 10997,
"name": "Timely",
"color": "67a3bc",
"rate_type": "project",
"billable": true,
"updated_at": 1608793441,
"external_id": null,
"budget_scope": null,
"client": {
"id": 8484,
"name": "Timely",
"active": true,
"external_id": null,
"updated_at": "2020-12-24T08:04:01+01:00"
},
"required_notes": false,
"budget_expired_on": null,
"has_recurrence": false,
"enable_labels": "all",
"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": 28766,
"email": "marijagoeedsdt@timelyapp.com",
"name": "Marija Petrovic",
"time_zone": "Europe/Paris",
"updated_at": 1608793440,
"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/87bb51b7fda0de1e0d5ec76357b6ca61?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/87bb51b7fda0de1e0d5ec76357b6ca61?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=",
"medium_retina": "https://www.gravatar.com/avatar/87bb51b7fda0de1e0d5ec76357b6ca61?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/87bb51b7fda0de1e0d5ec76357b6ca61?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=",
"timeline": "https://www.gravatar.com/avatar/87bb51b7fda0de1e0d5ec76357b6ca61?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_timeline-e61ac46443487bd24fbaecab08cfacf5d0835b371cbe97a33b9e738744ef8334.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",
"active": true,
"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/10998/roles" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer G4pl_-ebbtzRzYXi7iO2BoZzT_-dvhn8b8-rkquYKSI" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/roles
GET /1.1/10998/roles
Accept: application/json
Content-Type: application/json
Authorization: Bearer G4pl_-ebbtzRzYXi7iO2BoZzT_-dvhn8b8-rkquYKSI
Parameters
Name | Description |
---|---|
account_id | Account id for which roles are required |
Response
Content-Type: application/json; charset=utf-8
200 OK
[
{
"id": 32992,
"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": 32994,
"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
},
{
"id": 32993,
"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
}
]
Teams
The team object shows all teams available on an account.
Create a team
Request
curl "https://api.timelyapp.com/1.1/11020/teams" -d '{"team":{"name":"Timely","color":"67a3bc","emoji":"http://path.to/emoji.png","external_id":null,"users":[{"user_id":28812,"lead":true},{"user_id":28814,"lead":false}]}}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer CR4Dk7TuVY5Riy4sgGQGYk1gNGS9rbBAAAbiYxjUJJQ" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/teams
POST /1.1/11020/teams
Accept: application/json
Content-Type: application/json
Authorization: Bearer CR4Dk7TuVY5Riy4sgGQGYk1gNGS9rbBAAAbiYxjUJJQ
Parameters
{"team":{"name":"Timely","color":"67a3bc","emoji":"http://path.to/emoji.png","external_id":null,"users":[{"user_id":28812,"lead":true},{"user_id":28814,"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": 399,
"name": "Timely",
"color": "67a3bc",
"emoji": "http://path.to/emoji.png",
"external_id": null,
"user_ids": [
28812,
28814
],
"users": [
{
"id": 965,
"user_id": 28812,
"team_id": 399,
"lead": true
},
{
"id": 966,
"user_id": 28814,
"team_id": 399,
"lead": false
}
]
}
Delete a team
Request
curl "https://api.timelyapp.com/1.1/11021/teams/400" -d '' -X DELETE \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 9kj7daS9LP58dKdlUKdMMEEr0GqfpGRVrozsVmGQIFE" \
-H "Cookie: "
Endpoint
DELETE /1.1/:account_id/teams/:id
DELETE /1.1/11021/teams/400
Accept: application/json
Content-Type: application/json
Authorization: Bearer 9kj7daS9LP58dKdlUKdMMEEr0GqfpGRVrozsVmGQIFE
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/11023/teams" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 3JJmRrA8buu5sUG1y_fNjBpRsNYOLarmAooA67Vifa4" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/teams
GET /1.1/11023/teams
Accept: application/json
Content-Type: application/json
Authorization: Bearer 3JJmRrA8buu5sUG1y_fNjBpRsNYOLarmAooA67Vifa4
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": 402,
"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/11022/teams/401" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 2fNF4l4K-ixm7qUYGgzjMtWkc35f4MJufe-FPTN2QVc" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/teams/:id
GET /1.1/11022/teams/401
Accept: application/json
Content-Type: application/json
Authorization: Bearer 2fNF4l4K-ixm7qUYGgzjMtWkc35f4MJufe-FPTN2QVc
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": 401,
"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/11024/teams/403" -d '{"team":{"name":"Backend","color":"67a3bc","emoji":"http://path.to/emoji.png","external_id":null,"users":[{"user_id":28821,"lead":true}]}}' -X PUT \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer T6DgOk0XDCwK235TBKHZBgZUq1NAKIp9VQ6wW5p4xt8" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/teams/:id
PUT /1.1/11024/teams/403
Accept: application/json
Content-Type: application/json
Authorization: Bearer T6DgOk0XDCwK235TBKHZBgZUq1NAKIp9VQ6wW5p4xt8
Parameters
{"team":{"name":"Backend","color":"67a3bc","emoji":"http://path.to/emoji.png","external_id":null,"users":[{"user_id":28821,"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": 403,
"name": "Backend",
"color": "67a3bc",
"emoji": "http://path.to/emoji.png",
"external_id": null,
"user_ids": [
28821
],
"users": [
{
"id": 967,
"user_id": 28821,
"team_id": 403,
"lead": true
}
]
}
UserCapacities
Retrieve capacities
See capacities of multiple users in the account
Request
curl -g "https://api.timelyapp.com/1.1/11029/users/capacities" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 4eUiC1EylH5vKZqoT0jzhiPJe_8zAF_pnDV3SX3I72c" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/users/capacities
GET /1.1/11029/users/capacities
Accept: application/json
Content-Type: application/json
Authorization: Bearer 4eUiC1EylH5vKZqoT0jzhiPJe_8zAF_pnDV3SX3I72c
Parameters
Name | Description |
---|---|
account_id required | Account for which users' capacities are required |
user_ids | Users whose capacities are required |
since | Fetch capacities after selected date |
until | Fetch capacities before selected date |
Response
Content-Type: application/json; charset=utf-8
200 OK
[
{
"user_id": 28831,
"capacities": [
{
"id": null,
"weekly_capacity": 40.0,
"daily_capacity": 8.0,
"weekdays": "MO,TU,WE,TH,FR",
"total_working_days": null,
"weekly_working_days": 5,
"current": true,
"start_date": "1970-01-01",
"end_date": null
}
]
}
]
Retrieve user's capacities
Using the user id one can see the user's capacities
Request
curl -g "https://api.timelyapp.com/1.1/11028/users/28829/capacities" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 7JicC5HPeBMt1UxT6S6j5b5Ta95LVqof01x0KFtrBNQ" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/users/:user_id/capacities
GET /1.1/11028/users/28829/capacities
Accept: application/json
Content-Type: application/json
Authorization: Bearer 7JicC5HPeBMt1UxT6S6j5b5Ta95LVqof01x0KFtrBNQ
Parameters
Name | Description |
---|---|
account_id required | Account for which user's capacities are required |
user_id required | User whose capacities are required |
Response
Content-Type: application/json; charset=utf-8
200 OK
[
{
"id": null,
"weekly_capacity": 40.0,
"daily_capacity": 8.0,
"weekdays": "MO,TU,WE,TH,FR",
"total_working_days": null,
"weekly_working_days": 5,
"current": true,
"start_date": "1970-01-01",
"end_date": null
}
]
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/11031/users" -d '{"user":{"name":"Marija Petrovic","email":"marija@timely.com","user_level":"normal","admin":false,"projects":[{"project_id":13100,"hour_rate":10}]},"admin":{"id":9636,"email":"notifications@timelyapp.com","created_at":"2020-12-24T08:04:19.000+01:00","updated_at":"2020-12-24T08:04:19.000+01:00","name":"Timely","notifier":false}}' -X POST \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer s7I7QItY7bZxacZ3OwJGcVsBUR3rnqksrU9ZSzSQtE0" \
-H "Cookie: "
Endpoint
POST /1.1/:account_id/users
POST /1.1/11031/users
Accept: application/json
Content-Type: application/json
Authorization: Bearer s7I7QItY7bZxacZ3OwJGcVsBUR3rnqksrU9ZSzSQtE0
Parameters
{"user":{"name":"Marija Petrovic","email":"marija@timely.com","user_level":"normal","admin":false,"projects":[{"project_id":13100,"hour_rate":10}]},"admin":{"id":9636,"email":"notifications@timelyapp.com","created_at":"2020-12-24T08:04:19.000+01:00","updated_at":"2020-12-24T08:04:19.000+01: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": 28837,
"email": "marija@timely.com",
"name": "Marija Petrovic",
"active": false,
"day_view_onboarded": false,
"memory_onboarded": false,
"created_at": 1608793459,
"updated_at": 1608793459,
"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-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"medium_retina": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"small_retina": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25",
"small": "https://www.gravatar.com/avatar/0a8763ca707efea0026580f1712c3fe0?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25"
},
"type": "User",
"weekly_capacity": 40.0,
"user_level": "manager",
"admin": false,
"hide_hourly_rate": false,
"deleted": false,
"default_hour_rate": 0.0,
"role_id": 33092,
"role": {
"id": 33092,
"name": "manager"
}
}
Delete a user
Request
curl "https://api.timelyapp.com/1.1/11032/users/28838" -d '' -X DELETE \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer MKUfx1vSmIlTZ9zbAHBWR9HaRwdYEci9Pn4L8Ist2UE" \
-H "Cookie: "
Endpoint
DELETE /1.1/:account_id/users/:id
DELETE /1.1/11032/users/28838
Accept: application/json
Content-Type: application/json
Authorization: Bearer MKUfx1vSmIlTZ9zbAHBWR9HaRwdYEci9Pn4L8Ist2UE
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/11035/users" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer EmXzvjsyTtsQgT5u7ePKbRbdulTLvlI4vlrHQx0hEKw" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/users
GET /1.1/11035/users
Accept: application/json
Content-Type: application/json
Authorization: Bearer EmXzvjsyTtsQgT5u7ePKbRbdulTLvlI4vlrHQx0hEKw
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": 28844,
"email": "marijatmazdzfj@timelyapp.com",
"name": "Marija Petrovic",
"active": false,
"day_view_onboarded": true,
"memory_onboarded": true,
"created_at": 1608793461,
"updated_at": 1608793461,
"last_received_memories_date": null,
"sign_in_count": null,
"external_id": null,
"time_zone": "Europe/Paris",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/f076b30f35bf6be6d1df07ff01ed5829?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/f076b30f35bf6be6d1df07ff01ed5829?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"medium_retina": "https://www.gravatar.com/avatar/f076b30f35bf6be6d1df07ff01ed5829?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/f076b30f35bf6be6d1df07ff01ed5829?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"small_retina": "https://www.gravatar.com/avatar/f076b30f35bf6be6d1df07ff01ed5829?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25",
"small": "https://www.gravatar.com/avatar/f076b30f35bf6be6d1df07ff01ed5829?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25"
},
"type": "User",
"weekly_capacity": 40.0,
"user_level": "admin",
"admin": true,
"hide_hourly_rate": false,
"deleted": false,
"default_hour_rate": 0.0,
"role_id": 33103,
"role": {
"id": 33103,
"name": "admin"
}
}
]
Retrieve a user
Request
curl -g "https://api.timelyapp.com/1.1/11033/users/28840" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ZlxZtO9tcGy2EzKLqpM8XUKE5TCZOwOil9OGCfGsfoI" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/users/:id
GET /1.1/11033/users/28840
Accept: application/json
Content-Type: application/json
Authorization: Bearer ZlxZtO9tcGy2EzKLqpM8XUKE5TCZOwOil9OGCfGsfoI
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": 28840,
"email": "marijavxnrudfk@timelyapp.com",
"name": "Marija Petrovic",
"active": false,
"day_view_onboarded": true,
"memory_onboarded": true,
"created_at": 1608793460,
"updated_at": 1608793460,
"last_received_memories_date": null,
"sign_in_count": null,
"external_id": null,
"time_zone": "Europe/Paris",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/687f2f95218493307c2a3ff040ee76de?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/687f2f95218493307c2a3ff040ee76de?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"medium_retina": "https://www.gravatar.com/avatar/687f2f95218493307c2a3ff040ee76de?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/687f2f95218493307c2a3ff040ee76de?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"small_retina": "https://www.gravatar.com/avatar/687f2f95218493307c2a3ff040ee76de?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25",
"small": "https://www.gravatar.com/avatar/687f2f95218493307c2a3ff040ee76de?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25"
},
"type": "User",
"weekly_capacity": 40.0,
"user_level": "admin",
"admin": true,
"hide_hourly_rate": false,
"deleted": false,
"default_hour_rate": 0.0,
"role_id": 33097,
"role": {
"id": 33097,
"name": "admin"
}
}
Retrieve current user
Request
curl -g "https://api.timelyapp.com/1.1/11034/users/current" -X GET \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 9hxpElI_5X5pRskSPuGwWhQ9PVFTVROKQP1a-mcPgGE" \
-H "Cookie: "
Endpoint
GET /1.1/:account_id/users/current
GET /1.1/11034/users/current
Accept: application/json
Content-Type: application/json
Authorization: Bearer 9hxpElI_5X5pRskSPuGwWhQ9PVFTVROKQP1a-mcPgGE
Parameters
Name | Description |
---|---|
account_id | The account ID containing the current user |
Response
Content-Type: application/json; charset=utf-8
200 OK
{
"id": 28842,
"email": "marijaekghzjtq@timelyapp.com",
"name": "Marija Petrovic",
"active": false,
"day_view_onboarded": true,
"memory_onboarded": true,
"created_at": 1608793460,
"updated_at": 1608793460,
"last_received_memories_date": null,
"sign_in_count": null,
"external_id": null,
"time_zone": "Europe/Paris",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/59e04f2782d7ec8d4d613a00b9d01c18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/59e04f2782d7ec8d4d613a00b9d01c18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"medium_retina": "https://www.gravatar.com/avatar/59e04f2782d7ec8d4d613a00b9d01c18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/59e04f2782d7ec8d4d613a00b9d01c18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"small_retina": "https://www.gravatar.com/avatar/59e04f2782d7ec8d4d613a00b9d01c18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25",
"small": "https://www.gravatar.com/avatar/59e04f2782d7ec8d4d613a00b9d01c18?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25"
},
"type": "User",
"weekly_capacity": 40.0,
"user_level": "admin",
"admin": true,
"hide_hourly_rate": false,
"deleted": false,
"default_hour_rate": 0.0,
"role_id": 33100,
"role": {
"id": 33100,
"name": "admin"
}
}
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/11036/users/28846" -d '{"user":{"name":"Robin","user_level":"normal","admin":false,"projects":[{"project_id":13105,"hour_rate":10}]},"admin":{"id":9641,"email":"notifications@timelyapp.com","created_at":"2020-12-24T08:04:22.000+01:00","updated_at":"2020-12-24T08:04:22.000+01:00","name":"Timely","notifier":false}}' -X PUT \
-H "Host: api.timelyapp.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xwuXy4uHicV5bBiqEYBW5__05obtBN65vZ70vy5g6oM" \
-H "Cookie: "
Endpoint
PUT /1.1/:account_id/users/:id
PUT /1.1/11036/users/28846
Accept: application/json
Content-Type: application/json
Authorization: Bearer xwuXy4uHicV5bBiqEYBW5__05obtBN65vZ70vy5g6oM
Parameters
{"user":{"name":"Robin","user_level":"normal","admin":false,"projects":[{"project_id":13105,"hour_rate":10}]},"admin":{"id":9641,"email":"notifications@timelyapp.com","created_at":"2020-12-24T08:04:22.000+01:00","updated_at":"2020-12-24T08:04:22.000+01: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": 28846,
"email": "marijajlgnttbw@timelyapp.com",
"name": "Marija Petrovic",
"active": false,
"day_view_onboarded": true,
"memory_onboarded": true,
"created_at": 1608793461,
"updated_at": 1608793461,
"last_received_memories_date": null,
"sign_in_count": null,
"external_id": null,
"time_zone": "Europe/Paris",
"avatar": {
"large_retina": "https://www.gravatar.com/avatar/353ccacae9504724ee0e2b1a111ae4a2?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"large": "https://www.gravatar.com/avatar/353ccacae9504724ee0e2b1a111ae4a2?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_large_retina-c403e04ad44c7d8b8c7904dc7e7c1893101f3672565370034edbe3dee9985509.jpg&s=200",
"medium_retina": "https://www.gravatar.com/avatar/353ccacae9504724ee0e2b1a111ae4a2?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"medium": "https://www.gravatar.com/avatar/353ccacae9504724ee0e2b1a111ae4a2?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_medium_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=50",
"small_retina": "https://www.gravatar.com/avatar/353ccacae9504724ee0e2b1a111ae4a2?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25",
"small": "https://www.gravatar.com/avatar/353ccacae9504724ee0e2b1a111ae4a2?d=http%3A%2F%2Fapp.timelyapp.local%2Fassets%2Fthumbs%2Fuser_small_retina-459a8b7582a7417f4b47a0064f692ffcd161fb11eda9dcc359f1b5e63fe51235.jpg&s=25"
},
"type": "User",
"weekly_capacity": 40.0,
"user_level": "manager",
"admin": false,
"hide_hourly_rate": false,
"deleted": false,
"default_hour_rate": 0.0,
"role_id": 33107,
"role": {
"id": 33107,
"name": "manager"
}
}
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. |