This is a REST-style API that uses serialized JSON and OAuth2 authentication. We are very interested in making our API, and this documentation, as good as it possibly can be so please send any feedback to happytohelp@resourceguruapp.com. Any thoughts or suggestions will be gratefully received.
The API expects all data to be UTF-8 encoded.
All requests start with the https://api.resourceguruapp.com/
base URL.
With the exception of Accounts all requests must be prefixed with the Account URL ID
.
To make a request for all the Resources on the Example Corp account, the request URL will look
something like this https://api.resourceguruapp.com/v1/example-corp/resources
.
Each registered application is allowed up to 200 requests per minute. If this limit is exceeded, the server will respond with a 429 Rate Limit Exceeded
error for any extra requests made within that minute.
When you make a request, the server response will include three important headers related to rate limiting:
Retry-After
: This header indicates how many seconds you should wait before sending another request if the rate limit has been exceeded.
X-RateLimit-Remaining
: This header tells you how many more requests you can make within the current minute without exceeding the rate limit.
X-RateLimit-Limit
: This header shows the maximum number of requests that can be made per minute. Normally, this is set to 200.
Resource Guru provides headers to allow CORS requests to the API. You will need to authenticate using a valid OAuth2 token.
200
OK201
Created204
No Content400
Bad Request401
Unauthorized403
Forbidden404
Not Found422
Unprocessable Entity5xx
Resource Guru is having troubleIn order to make authenticated calls to Resource Guru's API, your application must first obtain an OAuth2 access token. To register your app go to https://app.resourceguruapp.com/developers.
Resource Guru implements OAuth2 with the authentication code flow.
Once you have authenticated, you can get information about the authenticated user by calling GET https://api.resourceguruapp.com/v1/me
. More details about the request and response are available below.
Getting access to a user's Resource Guru account requires going through a step of authentication. We offer OAuth2 as the standard way to authenticate with our API as this offers a simple flow for users to allow app access without you having to store their credentials.
For convenience, Resource Guru's API will accept credentials provided through the HTTP Basic Authorization header. This is intended for exploration of the API only. We apply a global rate limit to HTTP Basic authorizations based on compute resources available at the given time, and provide no SLA. HTTP Basic authentication may be disabled without warning.
If your account is configured to require SSO for logins, API access through OAuth2 is only available when authenticating as the account owner. This restriction ensures that users who have been removed from your identity provider (IdP) aren't able to continue accessing your Resource Guru account with unexpired API tokens.
We recommend using an OAuth2 library for the platform you're working with, rather than working from scratch. A fairly comprehensive list of libraries can be found here.
Register an app at developers.resourceguruapp.com.
Your app will be assigned a client_id
and client_secret
that will be used to identify your app
when users authenticate with the API. You'll need to provide a redirect_uri
where we'll send the
verification code for authentication. Just use a fake URL like http://localhost/oauth
if you haven't
got one yet. Any Redirect URI given must be secure (HTTPS) unless it redirects to localhost.
Configure your OAuth2 library to use the client_id
, client_secret
and redirect_uri
for your app.
You'll need to configure these URLs as well:
https://api.resourceguruapp.com/oauth/authorize
to request authorization (must be requested with an HTTP GET request).https://api.resourceguruapp.com/oauth/token
to retrieve tokens (must be requested with an HTTP POST request).Authenticate with the API. We'll provide code samples using the intridea/oauth2 library in Ruby.
This method is only recommended for private apps, such as data imports and exports or internal business reporting. It's useful to get started quickly without all of the overhead of OAuth2 though, which makes it great for exploration. This should not be used for integrating 3rd party apps with Resource Guru as it requires knowing the user's private credentials.
We support the OAuth2 password
grant type. To authenticate, make an HTTP POST
to /oauth/token
with the following:
{
"grant_type" : "password",
"username" : "user@example.com",
"password" : "secret",
"client_id" : "the_client_id",
"client_secret" : "the_client_secret"
}
You'll receive the access token back in the response:
{
"access_token": "the_oauth_access_token",
"refresh_token": "the_oauth_refresh_token",
"token_type": "bearer",
"expires_in": 604800
}
To use this with the OAuth2 Ruby library is easy:
client = OAuth2::Client.new(client_id, client_secret, site: "https://api.resourceguruapp.com")
token = client.password.get_token("user@example.com", "secret")
token.get("/v1/example-corp/resources")
The password grant method shown above is great for getting started quickly, but is impractical for apps that require users to authenticate with Resource Guru as you would have to store the user's Resource Guru login credentials.
We support the standard auth code flow as well. Here is a code sample in Ruby of how to authenticate this way.
require 'oauth2'
client_id = ENV["CLIENT_ID"]
client_secret = ENV["CLIENT_SECRET"]
redirect_uri = ENV["REDIRECT_URI"]
client = OAuth2::Client.new(client_id, client_secret, site: 'https://api.resourceguruapp.com')
puts client.auth_code.authorize_url(redirect_uri: redirect_uri)
Go to the URL provided to authorize with the API. This is the URL you'll direct users to to allow
your app to access the API. When you've authorized with the API, the browser will be redirected to the
redirect_uri
you provided and the authorization code will be sent as a parameter in the URL. For example
if your redirect_uri
was https://localhost/oauth/callback
, the user will be redirected to
https://localhost/oauth/callback?code=<the code>
Use this code to retrieve an access token and refresh token:
code = "code sent to the redirect_uri in the previous step"
access_token = client.auth_code.get_token(code, redirect_uri: redirect_uri)
access_token.get("/v1/example-corp/resources")
Save the values returned as access_token.token
, access_token.refresh_token
and access_token.expires_at
for later usage.
To connect to the API with a known token:
client_id = ENV["CLIENT_ID"]
client_secret = ENV["CLIENT_SECRET"]
redirect_uri = ENV["REDIRECT_URI"]
oauth_token = ENV["OAUTH_TOKEN"]
refresh_token = ENV["REFRESH_TOKEN"]
expires_at = ENV["EXPIRY"]
client = OAuth2::Client.new(client_id, client_secret, site: 'https://api.resourceguruapp.com')
access_token = OAuth2::AccessToken.new(client, oauth_token, refresh_token: refresh_token, expires_at: expires_at)
access_token.get("/v1/example-corp/resources")
In the above example using the token expiry time stamp is optional, but the OAuth2 library will automatically handle refreshing tokens if it is provided.
Tokens expire after 7 days and need to be refreshed. When authenticating, a refresh token and expiration timestamp is provided. Use the refresh token to retrieve a new access token. Most OAuth2 client libraries will handle this automatically.
client_id = ENV["CLIENT_ID"]
client_secret = ENV["CLIENT_SECRET"]
redirect_uri = ENV["REDIRECT_URI"]
oauth_token = ENV["OAUTH_TOKEN"]
refresh_token = ENV["REFRESH_TOKEN"]
expires_at = ENV["EXPIRY"]
client = OAuth2::Client.new(client_id, client_secret, site: 'https://api.resourceguruapp.com')
access_token = OAuth2::AccessToken.new(client, oauth_token, refresh_token: refresh_token, expires_at: expires_at)
new_access_token = access_token.refresh
new_access_token.get("/v1/example-corp/bookings")
The old access token will be expired immediately and the new access token will have to be used from that point on. Make sure you save the new access token, refresh token and expiration timestamps when doing this.
from urllib.parse import urlencode
import json
import requests
client_id = 'APPLICATION_CLIENT_ID'
client_secret = 'APPLICATION_SECRET'
redirect_uri = 'REDIRECT_URI'
authorize_url = "https://api.resourceguruapp.com/oauth/authorize?client_id=%(client_id)s&redirect_uri=%(redirect_uri)s&response_type=code" % locals()
# Visit the Auth URL -> authorize_url defined above
# Get code token after authorizing
returned_code = input("Enter the code from the authorization step: ")
parameters = {
'client_id': client_id,
'client_secret': client_secret,
'code': returned_code,
'grant_type': "authorization_code",
'redirect_uri': redirect_uri
}
token_url = 'https://api.resourceguruapp.com/oauth/token'
token = requests.post(token_url, urlencode(parameters)).json()
headers = { "Authorization": "Bearer " + token['access_token'] }
resources = requests.get("https://api.resourceguruapp.com/v1/example-account-id/resources", headers=headers).json()
# Now let's play in an interactive console
import code;code.interact(local=dict(globals(),**locals()))
#!/bin/bash
client_id='APPLICATION_CLIENT_ID'
client_secret='APPLICATION_SECRET'
redirect_uri='REDIRECT_URI'
authorize_url="https://api.resourceguruapp.com/oauth/authorize?client_id=$client_id&redirect_uri=$redirect_uri&response_type=code"
token_url='https://api.resourceguruapp.com/oauth/token'
echo "Please follow the given link: $authorize_url"
echo "Please provide the given code, followed by [ENTER]:"
read code
token_data=`curl --data "grant_type=authorization_code" --data-urlencode "client_id=$client_id" --data-urlencode "client_secret=$client_secret" --data-urlencode "code=$code" --data-urlencode "redirect_uri=$redirect_uri" $token_url`
token=`echo $token_data | jsawk 'return this.access_token'`
resources_url="https://api.resourceguruapp.com/v1/example-account-id/resources"
echo `curl -H "Authorization: Bearer $token" $resources_url`
require "oauth2"
client_id = "APPLICATION_CLIENT_ID"
client_secret = "APPLICATION_SECRET"
redirect_uri = "REDIRECT_URI"
client = OAuth2::Client.new(client_id, client_secret, { site: { url: 'https://api.resourceguruapp.com'}})
authorize_url = client.auth_code.authorize_url(redirect_uri: redirect_uri)
# Visit the Auth URL -> authorize_url defined above to get the code
puts "Enter the code from the authorization step"
code = gets.strip
access_token = client.auth_code.get_token(code, redirect_uri: redirect_uri)
access_token.get("/v1/example-account-id/resources")
# Now let's play in an interactive console
require "IRB"
IRB.start
The ISO8601 format is used for dates and times throughout the Resource Guru API.
An ISO8601 date string is formatted as YYYY-MM-DD
. For example: 2020-01-31
.
An ISO8601 date time string is formatted as YYYY-MM-DDTHH:mm:ssZ
. For example: 2020-01-31T12:34:56Z
Days of the week are represented as integers from 0-6
.
API | Day |
---|---|
0 | Sunday |
1 | Monday |
2 | Tuesday |
3 | Wednesday |
4 | Thursday |
5 | Friday |
6 | Saturday |
Timezone references in the Resource Guru API use the names of Rails ActiveSupport timezones.
Offset | Name |
---|---|
(GMT-11:00) | American Samoa |
(GMT-11:00) | International Date Line West |
(GMT-11:00) | Midway Island |
(GMT-10:00) | Hawaii |
(GMT-09:00) | Alaska |
(GMT-08:00) | Pacific Time (US & Canada) |
(GMT-08:00) | Tijuana |
(GMT-07:00) | Arizona |
(GMT-07:00) | Chihuahua |
(GMT-07:00) | Mazatlan |
(GMT-07:00) | Mountain Time (US & Canada) |
(GMT-06:00) | Central America |
(GMT-06:00) | Central Time (US & Canada) |
(GMT-06:00) | Guadalajara |
(GMT-06:00) | Mexico City |
(GMT-06:00) | Monterrey |
(GMT-06:00) | Saskatchewan |
(GMT-05:00) | Bogota |
(GMT-05:00) | Eastern Time (US & Canada) |
(GMT-05:00) | Indiana (East) |
(GMT-05:00) | Lima |
(GMT-05:00) | Quito |
(GMT-04:30) | Caracas |
(GMT-04:00) | Atlantic Time (Canada) |
(GMT-04:00) | Georgetown |
(GMT-04:00) | La Paz |
(GMT-04:00) | Santiago |
(GMT-03:30) | Newfoundland |
(GMT-03:00) | Brasilia |
(GMT-03:00) | Buenos Aires |
(GMT-03:00) | Greenland |
(GMT-02:00) | Mid-Atlantic |
(GMT-01:00) | Azores |
(GMT-01:00) | Cape Verde Is. |
(GMT+00:00) | Casablanca |
(GMT+00:00) | Dublin |
(GMT+00:00) | Edinburgh |
(GMT+00:00) | Lisbon |
(GMT+00:00) | London |
(GMT+00:00) | Monrovia |
(GMT+00:00) | UTC |
(GMT+01:00) | Amsterdam |
(GMT+01:00) | Belgrade |
(GMT+01:00) | Berlin |
(GMT+01:00) | Bern |
(GMT+01:00) | Bratislava |
(GMT+01:00) | Brussels |
(GMT+01:00) | Budapest |
(GMT+01:00) | Copenhagen |
(GMT+01:00) | Ljubljana |
(GMT+01:00) | Madrid |
(GMT+01:00) | Paris |
(GMT+01:00) | Prague |
(GMT+01:00) | Rome |
(GMT+01:00) | Sarajevo |
(GMT+01:00) | Skopje |
(GMT+01:00) | Stockholm |
(GMT+01:00) | Vienna |
(GMT+01:00) | Warsaw |
(GMT+01:00) | West Central Africa |
(GMT+01:00) | Zagreb |
(GMT+02:00) | Athens |
(GMT+02:00) | Bucharest |
(GMT+02:00) | Cairo |
(GMT+02:00) | Harare |
(GMT+02:00) | Helsinki |
(GMT+02:00) | Istanbul |
(GMT+02:00) | Jerusalem |
(GMT+02:00) | Kyiv |
(GMT+02:00) | Pretoria |
(GMT+02:00) | Riga |
(GMT+02:00) | Sofia |
(GMT+02:00) | Tallinn |
(GMT+02:00) | Vilnius |
(GMT+03:00) | Baghdad |
(GMT+03:00) | Kuwait |
(GMT+03:00) | Minsk |
(GMT+03:00) | Nairobi |
(GMT+03:00) | Riyadh |
(GMT+03:30) | Tehran |
(GMT+04:00) | Abu Dhabi |
(GMT+04:00) | Baku |
(GMT+04:00) | Moscow |
(GMT+04:00) | Muscat |
(GMT+04:00) | St. Petersburg |
(GMT+04:00) | Tbilisi |
(GMT+04:00) | Volgograd |
(GMT+04:00) | Yerevan |
(GMT+04:30) | Kabul |
(GMT+05:00) | Islamabad |
(GMT+05:00) | Karachi |
(GMT+05:00) | Tashkent |
(GMT+05:30) | Chennai |
(GMT+05:30) | Kolkata |
(GMT+05:30) | Mumbai |
(GMT+05:30) | New Delhi |
(GMT+05:30) | Sri Jayawardenepura |
(GMT+05:45) | Kathmandu |
(GMT+06:00) | Almaty |
(GMT+06:00) | Astana |
(GMT+06:00) | Dhaka |
(GMT+06:00) | Ekaterinburg |
(GMT+06:30) | Rangoon |
(GMT+07:00) | Bangkok |
(GMT+07:00) | Hanoi |
(GMT+07:00) | Jakarta |
(GMT+07:00) | Novosibirsk |
(GMT+08:00) | Beijing |
(GMT+08:00) | Chongqing |
(GMT+08:00) | Hong Kong |
(GMT+08:00) | Krasnoyarsk |
(GMT+08:00) | Kuala Lumpur |
(GMT+08:00) | Perth |
(GMT+08:00) | Singapore |
(GMT+08:00) | Taipei |
(GMT+08:00) | Ulaan Bataar |
(GMT+08:00) | Urumqi |
(GMT+09:00) | Irkutsk |
(GMT+09:00) | Osaka |
(GMT+09:00) | Sapporo |
(GMT+09:00) | Seoul |
(GMT+09:00) | Tokyo |
(GMT+09:30) | Adelaide |
(GMT+09:30) | Darwin |
(GMT+10:00) | Brisbane |
(GMT+10:00) | Canberra |
(GMT+10:00) | Guam |
(GMT+10:00) | Hobart |
(GMT+10:00) | Melbourne |
(GMT+10:00) | Port Moresby |
(GMT+10:00) | Sydney |
(GMT+10:00) | Yakutsk |
(GMT+11:00) | New Caledonia |
(GMT+11:00) | Vladivostok |
(GMT+12:00) | Auckland |
(GMT+12:00) | Fiji |
(GMT+12:00) | Kamchatka |
(GMT+12:00) | Magadan |
(GMT+12:00) | Marshall Is. |
(GMT+12:00) | Solomon Is. |
(GMT+12:00) | Wellington |
(GMT+13:00) | Nuku'alofa |
(GMT+13:00) | Samoa |
(GMT+13:00) | Tokelau Is. |
Returns details for the specific account by its unique identifier.
id required | integer >= 1 Example: 1 The unique identifier of the account. |
{- "id": 1,
- "name": "Example Corp",
- "subdomain": "example-corp",
- "plan": "grasshopper_annual",
- "on_trial": true,
- "trial_expires_on": "2020-12-31",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "owner": {
- "id": 1,
- "name": "John Doe",
- "email": "email@resourceguruapp.com",
- "timezone": "UTC"
}, - "default_booking_approver_ids": [
- 1
]
}
Returns updated account.
id required | integer >= 1 Example: 1 The unique identifier of the account. |
Update account with given data.
booking_approvals required | boolean Enable/Disable Approval Workflow |
default_booking_approver_ids required | Array of integers[ items >= 1 ] Array of user ids for the default booking approvers. |
apply_to_all_resources required | boolean Set default approvers on all resources. |
{- "booking_approvals": true,
- "default_booking_approver_ids": [
- 1
], - "apply_to_all_resources": true
}
{- "id": 1,
- "name": "Example Corp",
- "subdomain": "example-corp",
- "plan": "grasshopper_annual",
- "on_trial": true,
- "trial_expires_on": "2020-12-31",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "owner": {
- "id": 1,
- "name": "John Doe",
- "email": "email@resourceguruapp.com",
- "timezone": "UTC"
}, - "default_booking_approver_ids": [
- 1
]
}
[- {
- "id": 1,
- "name": "Example Corp",
- "subdomain": "example-corp",
- "rootdomain": "string",
- "plan": "grasshopper_annual",
- "dashboard_path": "/hi/example-corp",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "owner": {
- "id": 1,
- "name": "John Doe",
- "email": "email@resourceguruapp.com",
- "timezone": "UTC"
}, - "default_booking_approver_ids": [
- 1
]
}
]
Search activities for a specific booking.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the booking. |
[- {
- "id": 1,
- "action": "create",
- "user_id": 1,
- "previous_state": {
- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}, - "next_state": {
- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}, - "created_at": "2020-12-31T14:29:29.000Z"
}
]
Operations for creating, retrieving or modifying the activity types and associated entities for an account.
Returns an array of active activity types.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
[- {
- "id": 1,
- "name": "string",
- "notes": "string",
- "color": "#c0ffee",
- "archived": true,
- "default": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "archived_at": "2020-12-31",
- "project_ids": [
- 1
]
}
]
Create a new activity_type.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the new activity type.
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name required | string <= 255 characters The name of the activity type (must be unique) |
notes | string <= 65535 characters Notes on the activity type. |
default | boolean If |
project_ids | Array of integers[ items >= 1 ] A unique list of project ids this activity type has been assigned to. |
{- "color": "c0ffee",
- "name": "string",
- "notes": "string",
- "default": true,
- "project_ids": [
- 1
]
}
{- "id": 1,
- "name": "string",
- "notes": "string",
- "color": "#c0ffee",
- "archived": true,
- "default": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "archived_at": "2020-12-31",
- "project_ids": [
- 1
]
}
Returns an array of archived activity types.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
[- {
- "id": 1,
- "name": "string",
- "notes": "string",
- "color": "#c0ffee",
- "archived": true,
- "default": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "archived_at": "2020-12-31",
- "project_ids": [
- 1
]
}
]
Returns a specific activity type.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the activity type. |
{- "id": 1,
- "name": "string",
- "notes": "string",
- "color": "#c0ffee",
- "archived": true,
- "default": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "archived_at": "2020-12-31",
- "project_ids": [
- 1
]
}
Update an activity type.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the activity type. |
The information to update in the existing activity type
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name | string <= 255 characters The name of the activity type (must be unique) |
notes | string <= 65535 characters Notes on the activity type. |
default | boolean If |
project_ids | Array of integers[ items >= 1 ] A unique list of project ids this activity type has been assigned to. |
archived | boolean Omit to make no change. If |
{- "color": "c0ffee",
- "name": "string",
- "notes": "string",
- "default": true,
- "project_ids": [
- 1
], - "archived": true
}
{- "id": 1,
- "name": "string",
- "notes": "string",
- "color": "#c0ffee",
- "archived": true,
- "default": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "archived_at": "2020-12-31",
- "project_ids": [
- 1
]
}
Update an activity type.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the activity type. |
The information to update in the existing activity type
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name | string <= 255 characters The name of the activity type (must be unique) |
notes | string <= 65535 characters Notes on the activity type. |
default | boolean If |
project_ids | Array of integers[ items >= 1 ] A unique list of project ids this activity type has been assigned to. |
archived | boolean Omit to make no change. If |
{- "color": "c0ffee",
- "name": "string",
- "notes": "string",
- "default": true,
- "project_ids": [
- 1
], - "archived": true
}
{- "id": 1,
- "name": "string",
- "notes": "string",
- "color": "#c0ffee",
- "archived": true,
- "default": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "archived_at": "2020-12-31",
- "project_ids": [
- 1
]
}
Delete an activity type.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the activity type. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Returns number of entities associated with the specific activity type.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the activity type. |
{- "bookings": 0,
- "projects": 0,
- "timesheet_entries": 0
}
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date | string <iso-date-string> Example: start_date=2020-01-01 Include only bookings starting on or after this date. |
end_date | string <iso-date-string> Example: end_date=2021-12-31 Include only bookings ending on or before this date. |
approval_states | Array of strings Items Enum: "pending" "approved" "declined" Example: approval_states=approved&approval_states=declined Include only bookings having one of these states. |
calendar | string Enum: "0" "1" Example: calendar=1 Include all related days for the booking that match our query. |
resource_ids | Array of strings Example: resource_ids=42&resource_ids=50 Include bookings only for these specified resources. Set this parameter multiple times to include bookings for more than one resource. |
string or QueryEntityId (string) Example: booker_id=me Only return bookings that were booked by the given User ID. Return only my bookings when using the special value | |
waiting | string Default: "0" Enum: "0" "1" Example: waiting=1 If set to |
include_archived_resources | string Default: "1" Enum: "0" "1" Example: include_archived_resources=1 If set to |
include_deleted_resources | string Default: "1" Enum: "0" "1" Example: include_deleted_resources=1 If set to |
include_non_bookable_resources | string Default: "1" Enum: "0" "1" Example: include_non_bookable_resources=1 If set to |
group_id | string^\d+$ Example: group_id=1 Include only bookings that belong to the specified group_id |
limit | string^\d+$ Default: null Example: limit=50 The maximum number of results to return. |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}
]
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the new booking.
resource_id | integer >= 1 The unique identifier of the booked resource. Must supply either this or |
resource_ids | Array of integers non-empty [ items >= 1 ] The unique identifier of all booked resources. Must supply either this or |
start_date required | string <iso-date-string> First date of the booking. |
end_date required | string <iso-date-string> Last date of the booking. |
duration required | integer [ 1 .. 1440 ] The length of each booking in minutes |
start_time | integer or null [ 0 .. 1440 ] A time represented by the number of minutes elapsed since midnight |
details | string <= 65535 characters Default: "" Extra details for the booking. |
booker_id | integer >= 1 The unique identifier of the user that this event is booked by, defaults to the authenticated User. |
billable | boolean Default: false Indicates whether this booking is billable or non-billable. If |
project_id | integer or null >= 1 Default: null Unique identifier of the Project this Booking is for. (Can be |
client_id | integer or null >= 1 Default: null Unique identifier of the Client this Booking is for. (Can be |
activity_type_id | integer or null >= 1 Default: null Unique identifier of the Activity Type this Booking is for. (Can be |
allow_waiting | boolean Deprecated Default: false If set to |
allow_overtime | boolean Deprecated Default: false If set to |
(Weekly Recurrence (object or null)) or (Monthly Recurrence (object or null)) or (Yearly Recurrence (object or null)) A recurrence rule defines a rule or repeating pattern for recurring events | |
(string or null) or (string or null) Default: null Specified timezone for the booking, or null/empty string for the local resource's timezones | |
tentative | boolean When |
object A list of custom field values for this booking; keys should be strings, while values can be either a single string (for text or single-select fields) or an array of strings (for multi-select fields). | |
clash_resolution | string Enum: "add_to_waiting_list" "book_with_overtime" "increase_availability" How to resolve the booking clash if present. The option |
{- "resource_id": 1,
- "resource_ids": [
- 1
], - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "details": "",
- "booker_id": 1,
- "billable": false,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "allow_waiting": false,
- "allow_overtime": false,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "timezone": null,
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "clash_resolution": "add_to_waiting_list"
}
{- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}
Returns a specific booking by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the booking. |
{- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}
Update a specific booking by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the booking. |
affects | string Enum: "all" "following" "single" Specify how the operation affects other occurrences of a repeat booking. |
The information to update in the existing booking.
resource_id | integer >= 1 The unique identifier of the booked resource. |
resource_ids | Array of integers non-empty [ items >= 1 ] |
start_date | string <iso-date-string> First date of the booking. |
end_date | string <iso-date-string> Last date of the booking. |
duration | integer [ 1 .. 1440 ] The length of each booking in minutes |
start_time | integer or null [ 0 .. 1440 ] A time represented by the number of minutes elapsed since midnight |
details | string <= 65535 characters Extra details for the booking. |
booker_id | integer >= 1 The unique identifier of the user who booked the resource. |
billable | boolean If |
project_id | integer or null >= 1 Unique identifier of the Project this Booking is for. (Can be |
client_id | integer or null >= 1 Unique identifier of the Client this Booking is for. (Can be |
activity_type_id | integer or null >= 1 Unique identifier of the Activity Type this Booking is for. (Can be |
allow_waiting | boolean Deprecated Default: false If set to |
allow_overtime | boolean Deprecated Default: false If set to |
(Weekly Recurrence (object or null)) or (Monthly Recurrence (object or null)) or (Yearly Recurrence (object or null)) A recurrence rule defines a rule or repeating pattern for recurring events | |
(string or null) or (string or null) Default: null Specified timezone for the booking, or null/empty string for the local resource's timezones | |
tentative | boolean When |
object A list of custom field values for this booking; keys should be strings, while values can be either a single string (for text or single-select fields) or an array of strings (for multi-select fields). | |
clash_resolution | string Enum: "add_to_waiting_list" "book_with_overtime" "increase_availability" How to resolve the booking clash if present. The option |
{- "resource_id": 1,
- "resource_ids": [
- 1
], - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "details": "string",
- "booker_id": 1,
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "allow_waiting": false,
- "allow_overtime": false,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "timezone": null,
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "clash_resolution": "add_to_waiting_list"
}
{- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}
Delete a specific booking by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the booking. |
affects | string Enum: "all" "following" "single" Specify how the operation affects other occurrences of a repeat booking. |
The information to update in the existing booking
date | string <iso-date-string> The date to delete |
remove_for_all | boolean Delete the date for all resources on the booking |
{- "date": "2020-12-31",
- "remove_for_all": true
}
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Split a specific booking on a given date.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the booking. |
The information for splitting a booking
date required | string <iso-date-string> The date to split the booking on. The second half of the split will begin on this date. |
{- "date": "2020-12-31"
}
[- {
- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}
]
Search bookings for a specific client.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the client. |
start_date | string <iso-date-string> Example: start_date=2020-01-01 Include only bookings starting on or after this date. |
end_date | string <iso-date-string> Example: end_date=2021-12-31 Include only bookings ending on or before this date. |
limit | string^\d+$ Default: null Example: limit=50 The maximum number of results to return. |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}
]
Search bookings for a specific project.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the project. |
start_date | string <iso-date-string> Example: start_date=2020-01-01 Include only bookings starting on or after this date. |
end_date | string <iso-date-string> Example: end_date=2021-12-31 Include only bookings ending on or before this date. |
limit | string^\d+$ Default: null Example: limit=50 The maximum number of results to return. |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}
]
Search bookings for a specific resource.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the resource. |
approval_states | Array of strings Items Enum: "pending" "approved" "declined" Example: approval_states=approved&approval_states=declined Include only bookings having one of these states. |
start_date | string <iso-date-string> Example: start_date=2020-01-01 Include only bookings starting on or after this date. |
end_date | string <iso-date-string> Example: end_date=2021-12-31 Include only bookings ending on or before this date. |
limit | string^\d+$ Default: null Example: limit=50 The maximum number of results to return. |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "resource_id": 1,
- "resource_ids": [
- 1
], - "booker": {
- "id": 1,
- "email": "email@resourceguruapp.com",
- "name": "Joe Bloggs",
- "color": "#c0ffee"
}, - "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "durations": [
- {
- "date": "2020-12-31",
- "duration": 60,
- "start_time": 540,
- "end_time": 540,
- "waiting": true,
- "elastic_overtime": [
- {
- "start_time": 540,
- "end_time": 540
}
]
}
], - "details": "string",
- "notes": "string",
- "billable": true,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "refreshable": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "rrule": {
- "weekly": {
- "interval": 1,
- "weekday": 6,
- "ends": {
- "type": "count",
- "count": 1
}
}
}, - "group_id": 1,
- "sequence_no": 0,
- "timezone": "UTC",
- "tentative": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "approval_state": {
- "status": "pending",
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}, - "aggregated_approval_state": {
- "declined": [
- {
- "resource_id": 1,
- "booking_id": 1,
- "resolved_by": 1,
- "resolved_at": "2020-12-31T14:29:29.000Z",
- "message": "string"
}
], - "approved": [
- {
- "resource_id": 1,
- "resolved_by": 1,
- "booking_id": 1
}
], - "pending": [
- {
- "resource_id": 1,
- "booking_id": 1
}
], - "without_approval": [
- {
- "resource_id": 1,
- "booking_id": 1
}
]
}
}
]
Approve or decline a booking for the given resources.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the booking. |
The resolution information to update for given resources
resolution required | string Enum: "approved" "declined" Chosen resolution. |
resource_ids required | Array of integers non-empty [ items >= 1 ] Entity ids for which to apply given resolution. |
reason | string or null <= 65535 characters Decline reason. |
{- "resolution": "approved",
- "resource_ids": [
- 1
], - "reason": "string"
}
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Remind approvers that booking is in pending approval
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the booking. |
Resources ids for which to remind their approvers
Remind approvers that booking is in pending status.
{ }
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Lists all calendar subscriptions linked to your Resource Guru account
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
[- {
- "id": 1,
- "calendar_account_name": "string",
- "connection_status": "success",
- "api": "google",
- "incoming_calendars": [
- {
- "id": 1,
- "name": "string",
- "state": "paused",
- "is_primary": true,
- "sync": true
}
], - "outgoing_calendar_state": "paused"
}
]
Lists external events that have been synchronised from calendar subscriptions
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date | string <iso-date-string> Example: start_date=2020-01-01 Include only external events starting on or after this date. |
end_date | string <iso-date-string> Example: end_date=2021-12-31 Include only external events ending on or before this date. |
[- {
- "id": "string",
- "api": "google",
- "incoming_calendar_sync_id": 1,
- "start": {
- "date": "2020-12-31"
}, - "end": {
- "date": "2020-12-31"
}, - "summary": "string",
- "recurrence": [
- null
], - "location": "string",
- "busy": true,
- "description": "string",
- "calendar": "string",
- "organizer": {
- "self": true,
- "name": "string",
- "email": "email@resourceguruapp.com"
}, - "attendees": [
- {
- "name": "string",
- "email": "email@resourceguruapp.com",
- "response_status": "confirmed",
- "self": true
}
], - "conference": {
- "video": {
- "label": "string",
- "access_code": "string"
}, - "phone": [
- {
- "region_code": "string",
- "label": "string",
- "pin": "string"
}
], - "sip": {
- "region_code": "string",
- "label": "string",
- "pin": "string"
}, - "notes": "string"
}, - "recurring_event_id": "string",
- "user_ids": [
- 1
], - "is_private": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "event_type": "default",
- "external_id": "string"
}
]
Returns a specific calendar by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the calendar. |
{- "id": 1,
- "calendar_account_name": "string",
- "connection_status": "success",
- "api": "google",
- "incoming_calendars": [
- {
- "id": 1,
- "name": "string",
- "state": "paused",
- "is_primary": true,
- "sync": true
}
], - "outgoing_calendar_state": "paused"
}
Update a specific calendar by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the calendar. |
The information to update in the existing calendar.
required | Array of objects | ||||
Array
|
{- "incoming_calendar_subscriptions": [
- {
- "calendar_id": 1,
- "sync": true
}
]
}
{- "id": 1,
- "calendar_account_name": "string",
- "connection_status": "success",
- "api": "google",
- "incoming_calendars": [
- {
- "id": 1,
- "name": "string",
- "state": "paused",
- "is_primary": true,
- "sync": true
}
], - "outgoing_calendar_state": "paused"
}
Disconnects and deletes a specific calendar by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the calendar. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Operations for creating, retrieving or modifying the clients and associated entities for an account.
Returns an array of active clients.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
limit | string^\d+$ Default: "50" Example: limit=50 The maximum number of results to return. Use |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
includeArchived | string Default: "0" Enum: "0" "1" Whether to include archived clients. Limit and offset parameters are ignored when includeArchived is set. |
includeDeleted | string Default: "0" Enum: "0" "1" Whether to include deleted clients. Limit and offset parameters are ignored when includeDeleted is set. |
[- {
- "id": 1,
- "archived": true,
- "color": "#c0ffee",
- "name": "string",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31"
}
]
Create a new client
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the new client
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name required | string <= 255 characters The client name. |
notes | string or null <= 65535 characters Notes on the client. |
archived | boolean Default: false If |
object A list of custom field values for this booking; keys should be strings, while values can be either a single string (for text or single-select fields) or an array of strings (for multi-select fields). |
{- "color": "c0ffee",
- "name": "string",
- "notes": "string",
- "archived": false,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}
}
{- "id": 1,
- "archived": true,
- "color": "#c0ffee",
- "name": "string",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31"
}
Returns an array of archived clients
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
limit | string^\d+$ Default: "50" Example: limit=50 The maximum number of results to return. Use |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "archived": true,
- "color": "#c0ffee",
- "name": "string",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31"
}
]
Returns a specific client
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the client. |
{- "id": 1,
- "archived": true,
- "color": "#c0ffee",
- "name": "string",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31"
}
Update a client
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the client. |
The information to update in the existing client
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name | string <= 255 characters The client name. |
notes | string or null <= 65535 characters Notes on the client. |
archived | boolean Omit to make no change. If |
object A list of custom field values for this booking; keys should be strings, while values can be either a single string (for text or single-select fields) or an array of strings (for multi-select fields). |
{- "color": "c0ffee",
- "name": "string",
- "notes": "string",
- "archived": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}
}
{- "id": 1,
- "archived": true,
- "color": "#c0ffee",
- "name": "string",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31"
}
Delete a client
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the client. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Get custom availability for all resources or a subset of resources.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
resource_ids[] | Array of strings Example: resource_ids[]=42&resource_ids[]=50 Include custom availability only for these specified resources. Set this parameter multiple times to include custom availability for more than one resource. |
start_date | string <iso-date-string> Example: start_date=2020-12-31 The start of the date range we want to grab custom availability for. If not set it defaults to 1 year in the past. |
end_date | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range we want to grab custom availability for. If not set it defaults to 1 year in the future. |
[- {
- "resource_id": 1,
- "custom_available_periods": [
- {
- "date": "2020-12-31",
- "start_time": 540,
- "end_time": 540
}
]
}
]
Set custom availability for a resource
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
An object containing the information needed to create the custom availability.
required | object |
allow_waiting | boolean Default: false Whether we should move any bookings that no longer fit the resource due to the change to availability to the waiting list |
delete_invalid_bookings | boolean Default: false Whether we should delete any bookings that no longer fit the resource due to the change to availability |
{- "custom_available_periods": {
- "resource_instance_id": 1,
- "start_date": "2020-12-31",
- "end_date": "2020-12-31",
- "days": {
- "1": {
- "time_blocks": [
- {
- "start_time": 540,
- "end_time": 780
}, - {
- "start_time": 840,
- "end_time": 1020
}
]
}
}
}, - "allow_waiting": false,
- "delete_invalid_bookings": false
}
{- "errors": { },
- "custom_available_periods": [
- {
- "date": "2020-12-31",
- "start_time": 540,
- "end_time": 540
}
]
}
Resets the custom availability for a resource on the specified date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The resource and date range that we want to reset to normal availability, along with the update strategy to use for any bookings that are no longer valid due to the change of availability.
resource_instance_id required | integer >= 1 The unique identifier of the resource this custom availability period is for |
dates required | Array of strings <iso-date-string> The dates that we want to remove custom availability for |
allow_waiting | boolean Default: false Whether we should move any bookings that no longer fit the resource due to the change to availability to the waiting list |
delete_invalid_bookings | boolean Default: false Whether we should delete any bookings that no longer fit the resource due to the change to availability |
{- "resource_instance_id": 1,
- "dates": [
- "2020-12-31"
], - "allow_waiting": false,
- "delete_invalid_bookings": false
}
{- "clashes": [
- {
- "id": 1,
- "repeat_booking_id": 1,
- "date": "2020-12-31"
}
], - "allowClashResolution": true
}
Operations for creating, retrieving or modifying the custom fields and associated entities for an account.
Returns an array of custom fields.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
[- {
- "id": 1,
- "label": "string",
- "required": true,
- "type": "single_select",
- "entity_types": [
- "resource"
], - "resource_type_ids": [
- 1
], - "default": true,
- "icon": "percent",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
]
Creates a new custom field.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the new custom field.
label required | string [ 1 .. 255 ] characters The label shown in the UI. This must be unique. |
required | boolean If |
type | string Default: "multi_select" Enum: "single_select" "multi_select" "text" The type of the custom field. Text fields can not be created when this field applies to resources. |
entity_types | Array of strings[ items non-empty ] Items Enum: "resource" "booking" "project" "client" The type of entities which the custom field can be applied to. |
resource_type_ids | Array of integers[ items >= 1 ] An array of resource types associated with the custom field if applicable to resources. Set this to an empty array to remove the custom field from all resource types. If not set, this will default to the human resource type. |
icon | string Enum: "percent" "clipboard" "id" The name of the icon to display next to the custom field. |
custom_field_options | Array of strings non-empty [ items [ 1 .. 255 ] characters ] A list of custom field options. This can be provided when the custom field type is |
{- "label": "string",
- "required": true,
- "type": "single_select",
- "entity_types": [
- "resource"
], - "resource_type_ids": [
- 1
], - "icon": "percent",
- "custom_field_options": [
- "string"
]
}
{- "id": 1,
- "label": "string",
- "required": true,
- "type": "single_select",
- "entity_types": [
- "resource"
], - "resource_type_ids": [
- 1
], - "default": true,
- "icon": "percent",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
Returns a specific custom field.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the custom field. |
{- "id": 1,
- "label": "string",
- "required": true,
- "type": "single_select",
- "entity_types": [
- "resource"
], - "resource_type_ids": [
- 1
], - "default": true,
- "icon": "percent",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
Updates a specific custom field.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the custom field. |
The information to update on the custom field.
label | string [ 1 .. 255 ] characters The label shown in the UI. This must be unique. |
required | boolean If |
entity_types | Array of strings[ items non-empty ] Items Enum: "resource" "booking" "project" "client" The type of entities which the custom field can be applied to. |
resource_type_ids | Array of integers[ items >= 1 ] An array of resource types associated with the custom field if applicable to resources. Set this to an empty array to remove the custom field from all resource types. |
icon | string Enum: "percent" "clipboard" "id" The name of the icon to display next to the custom field. |
{- "label": "string",
- "required": true,
- "entity_types": [
- "resource"
], - "resource_type_ids": [
- 1
], - "icon": "percent"
}
{- "id": 1,
- "label": "string",
- "required": true,
- "type": "single_select",
- "entity_types": [
- "resource"
], - "resource_type_ids": [
- 1
], - "default": true,
- "icon": "percent",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
Delete a custom field.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the custom field. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Returns an array of custom field options.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
custom_field_id | string^[1-9]\d*$ Example: custom_field_id=42 Only return Custom Field Options that are for the Custom Field with this ID. |
[- {
- "id": 1,
- "custom_field_id": 1,
- "value": "string",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
]
Creates a new custom field option.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the new custom field option.
custom_field_id required | integer >= 1 The unique identifier of the custom field that this option is for. |
value required | string [ 1 .. 255 ] characters The value for this option. |
{- "custom_field_id": 1,
- "value": "string"
}
{- "id": 1,
- "custom_field_id": 1,
- "value": "string",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
Returns a specific custom field option.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the custom field option. |
{- "id": 1,
- "custom_field_id": 1,
- "value": "string",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
Updates a specific custom field option.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the custom field option. |
The information to update on the custom field option.
value | string [ 1 .. 255 ] characters The value for this option. |
{- "value": "string"
}
{- "id": 1,
- "custom_field_id": 1,
- "value": "string",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
Delete a custom field option.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the custom field option. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Search for downtime events.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
resource_ids | Array of strings Example: resource_ids=42 Include downtime events only for the specified resources. |
booker_id | string^[1-9]\d*$ Example: booker_id=42 Include only downtime events having the specified booker id. |
from | string <iso-date-string> Example: from=2020-01-01 Include only downtime events starting on or after this date. |
to | string <iso-date-string> Example: to=2020-01-01 Include only downtime events ending on or before this date. |
include_archived_resources | string Default: "1" Enum: "0" "1" Example: include_archived_resources=0 If set to |
include_deleted_resources | string Default: "1" Enum: "0" "1" Example: include_deleted_resources=0 If set to |
limit | string^\d+$ Default: null Example: limit=50 The maximum number of results to return. |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "details": "string",
- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "timezone": "UTC",
- "downtime_type_id": 1,
- "booker_id": 1,
- "creator_id": 1,
- "resource_ids": [
- 1
], - "account_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "leave": "string",
- "state": "string",
- "deleted": false
}
]
Create a new downtime event.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the new downtime event.
delete_invalid_bookings | boolean Deprecated Default: false If |
block_by_clashes | boolean Default: false If |
from required | string <iso-date-string> The start date for the downtime event. |
to required | string <iso-date-string> End date for the downtime event. |
start_time required | integer [ 0 .. 1440 ] The start time of the downtime event represented by the number of minutes since midnight. |
end_time required | integer [ 0 .. 1440 ] The end time of the downtime event represented by the number of minutes since midnight. |
timezone | string or null Specified timezone for the downtime event, or null for the assigned resources' local timezone. |
downtime_type_id | integer or null >= 1 The unique identifier of the downtime type of this downtime event. |
details | string <= 65535 characters Default: null Extra details about this downtime event. |
booker_id | integer >= 1 The unique identifier of the user that this downtime event is booked by, defaults to the authenticated User. |
creator_id | integer >= 1 Deprecated Deprecated: use |
resource_ids required | Array of integers non-empty [ items >= 1 ] Unique identifiers of the resources this downtime event is booked for. |
allow_waiting | boolean Deprecated Default: true If |
clash_resolution | string Enum: "add_to_waiting_list" "delete" How to resolve the booking clash if present. The option |
{- "delete_invalid_bookings": false,
- "block_by_clashes": false,
- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "timezone": "UTC",
- "downtime_type_id": 1,
- "details": null,
- "booker_id": 1,
- "creator_id": 1,
- "resource_ids": [
- 1
], - "allow_waiting": true,
- "clash_resolution": "add_to_waiting_list"
}
{- "id": 1,
- "details": "string",
- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "timezone": "UTC",
- "downtime_type_id": 1,
- "booker_id": 1,
- "creator_id": 1,
- "resource_ids": [
- 1
], - "account_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "leave": "string",
- "state": "string",
- "deleted": false
}
Gets a list of clashing booking durations for resources in a time range. This can be used to determine whether creating a downtime will result in changes to schedule bookings.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The search criteria.
from required | string <iso-date-string> The start date for the downtime event. |
to required | string <iso-date-string> End date for the downtime event. |
start_time required | integer [ 0 .. 1440 ] The start time of the downtime event represented by the number of minutes since midnight. |
end_time required | integer [ 0 .. 1440 ] The end time of the downtime event represented by the number of minutes since midnight. |
resource_ids required | Array of integers non-empty [ items >= 1 ] Unique identifiers of the resources this downtime event is booked for. |
timezone | string or null Default: null Specified timezone for the downtime event, or null for the assigned resources' local timezone. |
{- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "resource_ids": [
- 1
], - "timezone": "UTC"
}
[- {
- "id": 1,
- "repeat_booking_id": 1,
- "date": "2020-12-31",
- "resource_id": 1
}
]
Get a downtime event by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the downtime. |
{- "id": 1,
- "details": "string",
- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "timezone": "UTC",
- "downtime_type_id": 1,
- "booker_id": 1,
- "creator_id": 1,
- "resource_ids": [
- 1
], - "account_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "leave": "string",
- "state": "string",
- "deleted": false
}
Update a downtime event.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the downtime. |
The information to update in the existing downtime.
delete_invalid_bookings | boolean Deprecated Default: false If |
block_by_clashes | boolean Default: false If |
from | string <iso-date-string> The start date for the downtime event. |
to | string <iso-date-string> End date for the downtime event. |
start_time | integer [ 0 .. 1440 ] The start time of the downtime event represented by the number of minutes since midnight. |
end_time | integer [ 0 .. 1440 ] The end time of the downtime event represented by the number of minutes since midnight. |
timezone | string or null Specified timezone for the downtime event, or null for the assigned resources' local timezone. |
downtime_type_id | integer or null >= 1 The unique identifier of the downtime type of this downtime event. |
details | string <= 65535 characters Extra details about this downtime event. |
booker_id | integer >= 1 The unique identifier of the user that this downtime event is booked by. |
resource_ids | Array of integers non-empty [ items >= 1 ] Unique identifiers of the resources this downtime event is booked for. |
allow_waiting | boolean Deprecated Default: true If |
clash_resolution | string Enum: "add_to_waiting_list" "delete" How to resolve the booking clash if present. The option |
{- "delete_invalid_bookings": false,
- "block_by_clashes": false,
- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "timezone": "UTC",
- "downtime_type_id": 1,
- "details": "string",
- "booker_id": 1,
- "resource_ids": [
- 1
], - "allow_waiting": true,
- "clash_resolution": "add_to_waiting_list"
}
{- "id": 1,
- "details": "string",
- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "timezone": "UTC",
- "downtime_type_id": 1,
- "booker_id": 1,
- "creator_id": 1,
- "resource_ids": [
- 1
], - "account_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "leave": "string",
- "state": "string",
- "deleted": false
}
Delete a downtime event.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the downtime. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Splits a downtime event (not a valid operation for Holiday/Vacation).
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the downtime. |
The date to split the downtime event
date required | string <iso-date-string> The date to split the downtime on. The split will occur at midnight at the start of this date. |
resource_id | integer >= 1 An optional resource id to determine the date boundary to split on when timezones are involved |
{- "date": "2020-12-31",
- "resource_id": 1
}
[- {
- "id": 1,
- "details": "string",
- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "timezone": "UTC",
- "downtime_type_id": 1,
- "booker_id": 1,
- "creator_id": 1,
- "resource_ids": [
- 1
], - "account_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "leave": "string",
- "state": "string",
- "deleted": false
}, - {
- "id": 1,
- "details": "string",
- "from": "2020-12-31",
- "to": "2020-12-31",
- "start_time": 540,
- "end_time": 600,
- "timezone": "UTC",
- "downtime_type_id": 1,
- "booker_id": 1,
- "creator_id": 1,
- "resource_ids": [
- 1
], - "account_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "leave": "string",
- "state": "string",
- "deleted": false
}
]
Retrieve the list of downtime event types.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
[- {
- "id": 1,
- "account_id": 1,
- "name": "Public holiday",
- "default": true,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z"
}
]
Set the overtime for a resource on a specified date
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the overtime
resource_id required | integer >= 1 The unique identifier of the resource this overtime record is for |
date required | string <iso-date-string> The date that this overtime is recorded for |
duration required | integer [ 1 .. 1440 ] The duration of overtime |
{- "resource_id": 1,
- "date": "2020-12-31",
- "duration": 60
}
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Operations for creating, retrieving or modifying the projects and associated entities for an account.
Returns an array of active projects.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
limit | string^\d+$ Default: "50" Example: limit=50 The maximum number of results to return. Use |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
includeArchived | string Default: "0" Enum: "0" "1" Send |
includeDeleted | string Default: "0" Enum: "0" "1" Send |
[- {
- "id": 1,
- "account_id": 1,
- "client_id": 1,
- "archived": true,
- "default_billable": true,
- "color": "#c0ffee",
- "name": "string",
- "project_code": "WX13",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31T14:29:29.000Z",
- "activity_type_ids": [
- 1
]
}
]
Create a new project.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the new project.
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name required | string <= 255 characters The project name. |
project_code | string <= 255 characters The project code. |
client_id | integer or null >= 1 comment: Returned by create but not by get The unique identifier of the client. |
notes | string <= 65535 characters Notes on the project. |
default_billable | boolean If |
object A list of custom field values for this booking; keys should be strings, while values can be either a single string (for text or single-select fields) or an array of strings (for multi-select fields). | |
start_date | string <date> The start date of the project, in YYYY-MM-DD format. |
end_date | string <date> The end date of the project, in YYYY-MM-DD format. |
archived | boolean Default: false If |
activity_type_ids | Array of integers[ items >= 1 ] A unique list of activity types ids this project has been assigned to. |
{- "color": "c0ffee",
- "name": "string",
- "project_code": "WX13",
- "client_id": 1,
- "notes": "string",
- "default_billable": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "archived": false,
- "activity_type_ids": [
- 1
]
}
{- "id": 1,
- "account_id": 1,
- "account": {
- "id": 1,
- "name": "Example Corp",
}, - "client_id": 1,
- "client": {
- "id": 1,
- "name": "string",
- "notes": "string",
}, - "archived": true,
- "default_billable": true,
- "color": "#c0ffee",
- "name": "string",
- "project_code": "WX13",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31",
- "activity_type_ids": [
- 1
]
}
Returns an array of archived projects.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
limit | string^\d+$ Default: "50" Example: limit=50 The maximum number of results to return. Use |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "account_id": 1,
- "client_id": 1,
- "archived": true,
- "default_billable": true,
- "color": "#c0ffee",
- "name": "string",
- "project_code": "WX13",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31T14:29:29.000Z",
- "activity_type_ids": [
- 1
]
}
]
Returns a specific project.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the project. |
{- "id": 1,
- "account_id": 1,
- "account": {
- "id": 1,
- "name": "Example Corp",
}, - "client_id": 1,
- "client": {
- "id": 1,
- "name": "string",
- "notes": "string",
}, - "archived": true,
- "default_billable": true,
- "color": "#c0ffee",
- "name": "string",
- "project_code": "WX13",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31",
- "activity_type_ids": [
- 1
]
}
Update a project.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the project. |
The information to update in the existing project
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name | string <= 255 characters The project name. |
project_code | string <= 255 characters The project code. |
client_id | integer or null >= 1 comment: Returned by create but not by get The unique identifier of the client. |
notes | string <= 65535 characters Notes on the project. |
default_billable | boolean If |
object A list of custom field values for this booking; keys should be strings, while values can be either a single string (for text or single-select fields) or an array of strings (for multi-select fields). | |
start_date | string <date> The start date of the project, in YYYY-MM-DD format. |
end_date | string <date> The end date of the project, in YYYY-MM-DD format. |
archived | boolean Omit to make no change. If |
activity_type_ids | Array of integers[ items >= 1 ] A unique list of activity types ids this project has been assigned to. |
{- "color": "c0ffee",
- "name": "string",
- "project_code": "WX13",
- "client_id": 1,
- "notes": "string",
- "default_billable": true,
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "archived": true,
- "activity_type_ids": [
- 1
]
}
{- "id": 1,
- "account_id": 1,
- "account": {
- "id": 1,
- "name": "Example Corp",
}, - "client_id": 1,
- "client": {
- "id": 1,
- "name": "string",
- "notes": "string",
}, - "archived": true,
- "default_billable": true,
- "color": "#c0ffee",
- "name": "string",
- "project_code": "WX13",
- "notes": "string",
- "custom_field_values": {
- "property1": "string",
- "property2": "string"
}, - "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "creator_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_updated_by": 1,
- "deleted": true,
- "deleted_at": "2020-12-31",
- "activity_type_ids": [
- 1
]
}
Delete a project.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the project. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Gets a report for all projects in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "booked": 120,
- "max_usage": 480,
- "projects": [
- {
- "id": 1,
- "name": "string",
- "project_code": "string",
- "booked": 120,
- "color": "#c0ffee",
- "waiting_list": 0,
- "client_id": 1,
- "client_name": "string"
}
], - "waiting_list": 30
}
Gets a report for the specified project in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
required | EntityId (integer) or integer The unique identifier of the entity we would like to report on, or 0 for a report on all bookings not associated to an entity. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "id": 1,
- "booked": 120,
- "client_name": "string",
- "color": "#c0ffee",
- "name": "string",
- "resources": [
- {
- "id": 1,
- "name": 1,
- "project_code": "string",
- "resource_type": "string",
- "job_title": "General Manager",
- "booked": 480,
- "waiting_list": 120,
- "utilization": 0.8,
- "earliest_available_period": "string"
}
], - "waiting_list": 0
}
Gets a report for all clients in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "booked": 120,
- "max_usage": 480,
- "clients": [
- {
- "id": 0,
- "name": "string",
- "booked": 120,
- "color": "#c0ffee",
- "notes": "string",
- "waiting_list": 0,
}
], - "waiting_list": 30
}
Gets a report for the specified client in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
required | EntityId (integer) or integer The unique identifier of the entity we would like to report on, or 0 for a report on all bookings not associated to an entity. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "id": 1,
- "booked": 120,
- "color": "#c0ffee",
- "name": "string",
- "notes": "string",
- "resources": [
- {
- "id": 1,
- "name": "John Doe",
- "resource_type": "string",
- "job_title": "General Manager",
- "booked": 480,
- "waiting_list": 120,
- "utilization": 0.8,
- "earliest_available_period": "string"
}
], - "waiting_list": 0
}
Gets a report for all resources in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "availability": 24000,
- "booked": 19200,
- "resources": [
- {
- "availability": 2400,
- "booked": 120,
- "custom_fields": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "id": 1,
- "job_title": "General Manager",
- "name": "John Doe",
- "other_downtime": 0,
- "other_downtime_days": 0,
- "personal_vacation_downtime": 0,
- "personal_vacation_downtime_days": 0,
- "public_holiday_downtime": 0,
- "public_holiday_downtime_days": 0,
- "resource_type": "string",
- "sick_downtime": 0,
- "sick_downtime_days": 0,
- "total_vacation_downtime": 0,
- "total_vacation_downtime_days": 0,
- "unbooked": 0,
- "utilization": 0.8,
- "waiting_list": 0
}
], - "unbooked": 30,
- "utilization": 0.8,
- "waiting_list": 30
}
Gets a report for a specific resource in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the resource. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "availability": 24000,
- "booked": 19200,
- "clients": [
- {
- "booked": 120,
- "color": "#c0ffee",
- "id": 0,
- "max_usage": 0,
- "name": "string",
- "waiting_list": 0
}
], - "custom_fields": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "downtime_types": [
- {
- "downtime_type": "Public holiday",
- "minutes": 0,
- "minutes_without_overlap": 0,
- "days": 0,
- "days_without_overlap": 0
}
], - "earliest_available_period": "string",
- "id": 1,
- "job_title": "General Manager",
- "name": "John Doe",
- "other_downtime": 0,
- "other_downtime_days": 0,
- "personal_vacation_downtime": 0,
- "personal_vacation_downtime_days": 0,
- "projects": [
- {
- "booked": 120,
- "client_name": "string",
- "color": "#c0ffee",
- "id": 0,
- "max_usage": 0,
- "name": "string",
- "waiting_list": 0
}
], - "public_holiday_downtime": 0,
- "public_holiday_downtime_days": 0,
- "resource_type": "string",
- "sick_downtime": 0,
- "sick_downtime_days": 0,
- "total_vacation_downtime": 0,
- "total_vacation_downtime_days": 0,
- "unbooked": 0,
- "utilization": 0.8,
- "waiting_list": 0
}
Gets a report for all resources in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}
}
}, - "availability": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "downtime": {
- "other": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "personal_vacation": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "public_holiday": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "sick": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total_vacation": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "overtime": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "resources": [
- {
- "id": 1,
- "name": "John Doe",
- "color": "#c0ffee",
- "job_title": "General Manager",
- "reported_date_range": {
- "start": "2020-12-31",
- "end": "2020-12-31"
}, - "resource_type": {
- "id": 1,
- "name": "Project"
}, - "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "availability": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "custom_fields": [
- {
- "id": 1,
- "label": "string",
- "selected_options": [
- {
- "id": 1,
- "value": "string"
}
]
}
], - "downtime": {
- "other": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "personal_vacation": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "public_holiday": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "sick": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total_vacation": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "overtime": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "unscheduled": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}
}
], - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "unscheduled": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
Gets a report for a single resource in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the resource. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "id": 1,
- "name": "John Doe",
- "color": "#c0ffee",
- "job_title": "General Manager",
- "reported_date_range": {
- "start": "2020-12-31",
- "end": "2020-12-31"
}, - "resource_type": {
- "id": 1,
- "name": "Project"
}, - "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "availability": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "custom_fields": [
- {
- "id": 1,
- "label": "string",
- "selected_options": [
- {
- "id": 1,
- "value": "string"
}
]
}
], - "downtime": {
- "other": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "personal_vacation": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "public_holiday": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "sick": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total_vacation": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "overtime": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "unscheduled": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "utilization": {
- "billable": 0.5,
- "non_billable": 0.25,
- "total": 0.75
}, - "clients": [
- {
- "color": "#c0ffee",
- "id": 1,
- "name": "string",
- "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
], - "clients_unassigned": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "downtime_types": [
- {
- "downtime_type": "Public holiday",
- "scheduled": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "scheduled_without_overlap": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
], - "projects": [
- {
- "client": {
- "id": 1,
- "name": "string",
- "color": "#c0ffee"
}, - "color": "#c0ffee",
- "id": 1,
- "name": "string",
- "project_code": "WX13",
- "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
], - "projects_unassigned": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}
Gets a report for all clients in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "clients": [
- {
- "color": "#c0ffee",
- "id": 1,
- "name": "string",
- "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
], - "unassigned": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
Gets a report for a single client in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the client. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "color": "#c0ffee",
- "id": 1,
- "name": "string",
- "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "resources": [
- {
- "id": 1,
- "name": "John Doe",
- "color": "#c0ffee",
- "job_title": "General Manager",
- "reported_date_range": {
- "start": "2020-12-31",
- "end": "2020-12-31"
}, - "resource_type": {
- "id": 1,
- "name": "Project"
}, - "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
]
}
Gets a report on bookings not assigned to a client in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "resources": [
- {
- "id": 1,
- "name": "John Doe",
- "color": "#c0ffee",
- "job_title": "General Manager",
- "reported_date_range": {
- "start": "2020-12-31",
- "end": "2020-12-31"
}, - "resource_type": {
- "id": 1,
- "name": "Project"
}, - "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
], - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
Gets a report for all projects in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "projects": [
- {
- "client": {
- "id": 1,
- "name": "string",
- "color": "#c0ffee"
}, - "color": "#c0ffee",
- "id": 1,
- "name": "string",
- "project_code": "WX13",
- "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
], - "unassigned": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
Gets a report for a single project in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the project. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "client": {
- "id": 1,
- "name": "string",
- "color": "#c0ffee"
}, - "color": "#c0ffee",
- "id": 1,
- "name": "string",
- "project_code": "WX13",
- "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "resources": [
- {
- "id": 1,
- "name": "John Doe",
- "color": "#c0ffee",
- "job_title": "General Manager",
- "reported_date_range": {
- "start": "2020-12-31",
- "end": "2020-12-31"
}, - "resource_type": {
- "id": 1,
- "name": "Project"
}, - "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
]
}
Gets a report on bookings not assigned to a project in the date range.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date required | string <iso-date-string> Example: start_date=2020-12-31 The beginning of the date range to report on. |
end_date required | string <iso-date-string> Example: end_date=2020-12-31 The end of the date range to report on. |
{- "resources": [
- {
- "id": 1,
- "name": "John Doe",
- "color": "#c0ffee",
- "job_title": "General Manager",
- "reported_date_range": {
- "start": "2020-12-31",
- "end": "2020-12-31"
}, - "resource_type": {
- "id": 1,
- "name": "Project"
}, - "approvals": {
- "approved": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}, - "pending": {
- "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
}, - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
], - "scheduled": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "waiting_list": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}, - "tentative": {
- "billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "non_billable": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}, - "total": {
- "days": 1.5625,
- "hours": 12.5,
- "minutes": 750
}
}
}
Operations for creating, retrieving or modifying the resources and associated entities for an account
Returns an array of active resources
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
limit | string^\d+$ Default: "50" Example: limit=50 The maximum number of results to return. Use |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
detail | string Enum: "0" "1" Whether to include extra information about the resource. |
ids | Array of integers[ items >= 1 ] Example: ids=1 Return only the resources specified in this array |
show_availability | string Default: "1" Enum: "0" "1" Whether to include custom available periods. |
[ ]
Create a new resource. The availability will be created with the default availability settings set within the app
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the new resource
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name | string <= 255 characters The name of this resource. For humans, use first and last name instead. Required for other types of resources |
timezone | string A timezone (based off of Ruby on Rails's ActiveSupport::TimeZone key mappings). See Timezones for a list of valid timezones. |
job_title | string or null <= 255 characters Job title of this Resource. Only applicable to Resources linked to User Accounts. |
phone | string or null <= 255 characters The phone number of this resource (human resources only). |
bookable | boolean Indicates whether this resource is bookable. |
notes | string <= 65535 characters Notes on the resource. |
first_name | string <= 255 characters The first name of a human resource |
last_name | string <= 255 characters The last name of a human resource |
capacity | string or null^\d*$ The capacity of a 'Meeting room' resource. |
registration_number | string or null <= 255 characters The registration number of a 'Vehicle' resource. |
custom_field_option_ids | Array of integers[ items >= 1 ] The custom fields selected for the resource |
invite | string or null Enum: "true" "false" If true and if the resource email is valid, send an invitation email to this resource |
string <= 255 characters | |
resource_type_id required | integer >= 1 The unique identifier of the resource type. |
booking_approver_ids | Array of integers[ items >= 1 ] List of user ids that can approve this resource bookings. |
{- "color": "c0ffee",
- "name": "John Doe",
- "timezone": "UTC",
- "job_title": "General Manager",
- "phone": "string",
- "bookable": true,
- "notes": "string",
- "first_name": "string",
- "last_name": "string",
- "capacity": "42",
- "registration_number": "string",
- "custom_field_option_ids": [
- 1
], - "invite": "true",
- "email": "email@resourceguruapp.com",
- "resource_type_id": 1,
- "booking_approver_ids": [
- 1
]
}
{- "archived": true,
- "available_periods": [
- {
- "start_time": 540,
- "end_time": 540,
- "valid_from": "2020-12-31",
- "valid_until": "2020-12-31",
- "week_day": 6
}
], - "bookable": true,
- "booked_client_ids": [
- 1
], - "booked_project_ids": [
- 1
], - "color": "#c0ffee",
- "created_at": "2020-12-31T14:29:29.000Z",
- "custom_attributes": {
- "phone": "string",
- "capacity": "42",
- "registration_number": "string"
}, - "creator_id": 1,
- "custom_available_periods": [
- {
- "date": "2020-12-31",
- "start_time": 540,
- "end_time": 540
}
], - "email": "email@resourceguruapp.com",
- "human": true,
- "id": 1,
- "images": {
}, - "job_title": "General Manager",
- "last_updated_by": 1,
- "minutes_per_day": 60,
- "name": "John Doe",
- "first_name": "John",
- "last_name": "Doe",
- "notes": "string",
- "overtimes": [
- {
- "created_at": "2020-12-31T14:29:29.000Z",
- "creator_id": 1,
- "date": "2020-12-31",
- "duration": 60,
- "id": 1,
- "resource_id": 1,
- "updated_at": "2020-12-31T14:29:29.000Z"
}
], - "phone": "string",
- "resource_type": {
- "id": 1,
- "name": "Project",
}, - "selected_custom_field_options": [
- {
- "id": 1,
- "name": "string",
- "value": "string"
}
], - "timezone": {
- "name": "UTC",
- "offset": -480
}, - "updated_at": "2020-12-31T14:29:29.000Z",
- "user_id": 1,
- "vacation_allowance": 20,
- "booking_approver_ids": [
- 1
]
}
Returns an array of archived resources
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
limit | string^\d+$ Default: "50" Example: limit=50 The maximum number of results to return. Use |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
detail | string Enum: "0" "1" Whether to include extra information about the resource. |
ids | Array of integers[ items >= 1 ] Example: ids=1 Return only the resources specified in this array |
show_availability | string Default: "1" Enum: "0" "1" Whether to include custom available periods. |
[ ]
Returns details of a specific resource
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the resource. |
{- "archived": true,
- "available_periods": [
- {
- "start_time": 540,
- "end_time": 540,
- "valid_from": "2020-12-31",
- "valid_until": "2020-12-31",
- "week_day": 6
}
], - "bookable": true,
- "booked_client_ids": [
- 1
], - "booked_project_ids": [
- 1
], - "color": "#c0ffee",
- "created_at": "2020-12-31T14:29:29.000Z",
- "custom_attributes": {
- "phone": "string",
- "capacity": "42",
- "registration_number": "string"
}, - "creator_id": 1,
- "custom_available_periods": [
- {
- "date": "2020-12-31",
- "start_time": 540,
- "end_time": 540
}
], - "email": "email@resourceguruapp.com",
- "human": true,
- "id": 1,
- "images": {
}, - "job_title": "General Manager",
- "last_updated_by": 1,
- "minutes_per_day": 60,
- "name": "John Doe",
- "first_name": "John",
- "last_name": "Doe",
- "notes": "string",
- "overtimes": [
- {
- "created_at": "2020-12-31T14:29:29.000Z",
- "creator_id": 1,
- "date": "2020-12-31",
- "duration": 60,
- "id": 1,
- "resource_id": 1,
- "updated_at": "2020-12-31T14:29:29.000Z"
}
], - "phone": "string",
- "resource_type": {
- "id": 1,
- "name": "Project",
}, - "selected_custom_field_options": [
- {
- "id": 1,
- "name": "string",
- "value": "string"
}
], - "timezone": {
- "name": "UTC",
- "offset": -480
}, - "updated_at": "2020-12-31T14:29:29.000Z",
- "user_id": 1,
- "vacation_allowance": 20,
- "booking_approver_ids": [
- 1
]
}
Update a resource
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the resource. |
The information to update in the existing resource
archived | boolean If |
color | string or null^#?[a-fA-F0-9]{6}$ A color encoded in a hex triplet (6 hexadecimal numbers) |
name | string <= 255 characters The name of this resource. For humans, use first and last name instead. Required for other types of resources |
timezone | string A timezone (based off of Ruby on Rails's ActiveSupport::TimeZone key mappings). See Timezones for a list of valid timezones. |
job_title | string or null <= 255 characters Job title of this Resource. Only applicable to Resources linked to User Accounts. |
phone | string or null <= 255 characters The phone number of this resource (human resources only). |
bookable | boolean Indicates whether this resource is bookable. |
notes | string <= 65535 characters Notes on the resource. |
first_name | string <= 255 characters The first name of a human resource |
last_name | string <= 255 characters The last name of a human resource |
capacity | string or null^\d*$ The capacity of a 'Meeting room' resource. |
registration_number | string or null <= 255 characters The registration number of a 'Vehicle' resource. |
custom_field_option_ids | Array of integers[ items >= 1 ] The custom fields selected for the resource |
booking_approver_ids | Array of integers[ items >= 1 ] List of user ids that can approve this resource bookings. |
replacement_approver_user_id | integer >= 1 ID of an active user that will be used for replacement. Mandatory if one of the affected entities is the sole approver of at least one resource |
replacement_reviewer_user_id | integer >= 1 ID of an active user that will be used for replacement. Mandatory if one of the affected entities is the sole reviewer of at least one person |
{- "archived": true,
- "color": "c0ffee",
- "name": "John Doe",
- "timezone": "UTC",
- "job_title": "General Manager",
- "phone": "string",
- "bookable": true,
- "notes": "string",
- "first_name": "string",
- "last_name": "string",
- "capacity": "42",
- "registration_number": "string",
- "custom_field_option_ids": [
- 1
], - "booking_approver_ids": [
- 1
], - "replacement_approver_user_id": 1,
- "replacement_reviewer_user_id": 1
}
{- "archived": true,
- "available_periods": [
- {
- "start_time": 540,
- "end_time": 540,
- "valid_from": "2020-12-31",
- "valid_until": "2020-12-31",
- "week_day": 6
}
], - "bookable": true,
- "booked_client_ids": [
- 1
], - "booked_project_ids": [
- 1
], - "color": "#c0ffee",
- "created_at": "2020-12-31T14:29:29.000Z",
- "custom_attributes": {
- "phone": "string",
- "capacity": "42",
- "registration_number": "string"
}, - "creator_id": 1,
- "custom_available_periods": [
- {
- "date": "2020-12-31",
- "start_time": 540,
- "end_time": 540
}
], - "email": "email@resourceguruapp.com",
- "human": true,
- "id": 1,
- "images": {
}, - "job_title": "General Manager",
- "last_updated_by": 1,
- "minutes_per_day": 60,
- "name": "John Doe",
- "first_name": "John",
- "last_name": "Doe",
- "notes": "string",
- "overtimes": [
- {
- "created_at": "2020-12-31T14:29:29.000Z",
- "creator_id": 1,
- "date": "2020-12-31",
- "duration": 60,
- "id": 1,
- "resource_id": 1,
- "updated_at": "2020-12-31T14:29:29.000Z"
}
], - "phone": "string",
- "resource_type": {
- "id": 1,
- "name": "Project",
}, - "selected_custom_field_options": [
- {
- "id": 1,
- "name": "string",
- "value": "string"
}
], - "timezone": {
- "name": "UTC",
- "offset": -480
}, - "updated_at": "2020-12-31T14:29:29.000Z",
- "user_id": 1,
- "vacation_allowance": 20,
- "booking_approver_ids": [
- 1
]
}
Delete a resource. Any future bookings where the resource is the booker will be transferred to the authenticated user. And any future bookings where the resource has been booked as the resource will be deleted.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the resource. |
Optional request body
replacement_approver_user_id | integer >= 1 ID of an active user that will be used for replacement. Mandatory if one of the affected entities is the sole approver of at least one resource |
replacement_reviewer_user_id | integer >= 1 ID of an active user that will be used for replacement. Mandatory if one of the affected entities is the sole reviewer of at least one person |
{- "replacement_approver_user_id": 1,
- "replacement_reviewer_user_id": 1
}
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Update availability or timezone
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the resource. |
The new availability information
date required | string <iso-date-string> The start date for the downtime event. |
timezone | string Default: null A timezone (based off of Ruby on Rails's ActiveSupport::TimeZone key mappings). See Timezones for a list of valid timezones. |
delete_invalid_bookings | boolean Default: false If |
allow_waiting | boolean Deprecated Default: true If |
Array of objects Represents the periods at which the resource is available |
{- "date": "2020-12-31",
- "timezone": "UTC",
- "delete_invalid_bookings": false,
- "allow_waiting": true,
- "available_periods": [
- {
- "start_time": 540,
- "end_time": 540,
- "week_day": 6
}
]
}
{- "clashes": [
- {
- "id": 1,
- "repeat_booking_id": 1,
- "date": "2020-12-31",
- "resource_id": 1
}
], - "allowClashResolution": true
}
Returns an array of resource types
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
[- {
- "id": 1,
- "human": true,
- "name": "string",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "custom_attributes": [
- "phone"
], - "custom_fields": [
- {
- "id": 1,
- "name": "string",
- "label": "string",
- "required": true,
- "type": "single_select",
- "single_select": true,
- "resource_type_ids": [
- 1
], - "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "custom_field_options": {
- "id": 1,
- "value": "string"
}
}
]
}
]
Returns a specific resource type
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the resource type. |
{- "id": 1,
- "human": true,
- "name": "string",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "custom_attributes": [
- "phone"
], - "custom_fields": [
- {
- "id": 1,
- "name": "string",
- "label": "string",
- "required": true,
- "type": "single_select",
- "single_select": true,
- "resource_type_ids": [
- 1
], - "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "custom_field_options": {
- "id": 1,
- "value": "string"
}
}
]
}
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date | string <iso-date-string> Example: start_date=2020-01-01 Include only timesheet entries starting on or after this date. |
end_date | string <iso-date-string> Example: end_date=2021-12-31 Include only timesheet entries ending on or after this date. |
resource_ids | Array of strings Example: resource_ids=42&resource_ids=50 Include timesheets entries only for these specified resources. Set this parameter multiple times to include timesheets entries for more than one resource. |
limit | string^\d+$ Default: null Example: limit=50 The maximum number of results to return. |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "resource_id": 1,
- "date": "2020-12-31",
- "duration": 60,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "notes": "",
- "billable": false,
- "event_type": "booking",
- "event_id": null,
- "dismissed": false
}
]
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
action | string Example: action=bulk_create Add multiple timesheet entries |
The information for the new timesheet entry.
resource_id required | integer >= 1 Resource identifier that this timesheet entry is logged for. |
date required | string <iso-date-string> Date of this timesheet entry. |
duration required | integer [ 1 .. 1440 ] The length of this timesheet entry in minutes. |
notes | string <= 65535 characters Default: "" Extra details for this timesheet entry. |
billable | boolean Default: false Indicates whether this timesheet entry is billable or not. If |
project_id | integer or null >= 1 Project identifier. (Can be |
client_id | integer or null >= 1 Client identifier. (Can be |
activity_type_id | integer or null >= 1 Activity Type identifier. (Can be |
{- "resource_id": 1,
- "date": "2020-12-31",
- "duration": 60,
- "notes": "",
- "billable": false,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1
}
{- "id": 1,
- "resource_id": 1,
- "date": "2020-12-31",
- "duration": 60,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "notes": "",
- "billable": false,
- "event_type": "booking",
- "event_id": null,
- "dismissed": false
}
Update a specific timesheet entry by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the timesheet. |
The information to update in the existing timesheet entry.
resource_id | integer >= 1 Resource identifier that this timesheet entry is logged for. |
date | string <iso-date-string> Date of this timesheet entry. |
duration | integer [ 1 .. 1440 ] The length of this timesheet entry in minutes. |
notes | string <= 65535 characters Default: "" Extra details for this timesheet entry. |
billable | boolean Default: false Indicates whether this timesheet entry is billable or not. If |
project_id | integer or null >= 1 Project identifier. (Can be |
client_id | integer or null >= 1 Client identifier. (Can be |
activity_type_id | integer or null >= 1 Activity Type identifier. (Can be |
dismissed | boolean Default: false When true, indicates that is a booking or external event suggestion that is is dismissed or a deleted timesheet entry. |
{- "resource_id": 1,
- "date": "2020-12-31",
- "duration": 60,
- "notes": "",
- "billable": false,
- "project_id": 1,
- "client_id": 1,
- "activity_type_id": 1,
- "dismissed": false
}
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Dismiss a specific timesheet entry by its unique identifier.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the timesheet. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date | string <iso-date-string> Example: start_date=2020-01-01 Include only timesheet entries starting on or after this date. |
end_date | string <iso-date-string> Example: end_date=2021-12-31 Include only timesheet entries ending on or after this date. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
start_date | string <iso-date-string> Example: start_date=2020-01-01 Include only timesheet entries starting on or after this date. |
end_date | string <iso-date-string> Example: end_date=2021-12-31 Include only timesheet entries ending on or after this date. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Returns all active users for this account.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
limit | string^\d+$ Default: "50" Example: limit=50 The maximum number of results to return. Use |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
[- {
- "id": 1,
- "first_name": "Joe",
- "last_name": "Bloggs",
- "email": "email@resourceguruapp.com",
- "images": {
}, - "timezone": "UTC",
- "last_login_at": "2020-12-31",
- "last_logout_at": "2020-12-31",
- "last_activity_at": "2020-12-31",
- "activation_state": "active",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_product_update_read_at": "2020-12-31",
- "permissions": "administrator",
- "downtime_rights": "manage_all",
- "client_rights": "manage_all",
- "project_rights": "manage_all",
- "resource_rights": "manage_all",
- "report_rights": "manage_all",
- "owner": true,
- "deleted": true,
- "notices": { }
}
]
Returns information about all active and deleted users for the account.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
[- {
- "id": 1,
- "first_name": "Joe",
- "last_name": "Bloggs",
- "email": "email@resourceguruapp.com",
- "images": {
}, - "timezone": "UTC",
- "last_login_at": "2020-12-31",
- "last_logout_at": "2020-12-31",
- "last_activity_at": "2020-12-31",
- "activation_state": "active",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_product_update_read_at": "2020-12-31",
- "permissions": "administrator",
- "downtime_rights": "manage_all",
- "client_rights": "manage_all",
- "project_rights": "manage_all",
- "resource_rights": "manage_all",
- "report_rights": "manage_all",
- "owner": true,
- "deleted": true,
- "notices": { }
}
]
{- "id": 1,
- "first_name": "Joe",
- "last_name": "Bloggs",
- "email": "email@resourceguruapp.com",
- "images": {
}, - "timezone": "UTC",
- "last_login_at": "2020-12-31",
- "last_logout_at": "2020-12-31",
- "last_activity_at": "2020-12-31",
- "activation_state": "active",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_product_update_read_at": "2020-12-31",
- "permissions": "administrator",
- "downtime_rights": "manage_all",
- "client_rights": "manage_all",
- "project_rights": "manage_all",
- "resource_rights": "manage_all",
- "report_rights": "manage_all",
- "owner": true,
- "deleted": true,
- "notices": { }
}
Returns information about the currently authenticated user in the context of an account.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
{- "id": 1,
- "first_name": "Joe",
- "last_name": "Bloggs",
- "email": "email@resourceguruapp.com",
- "images": {
}, - "timezone": "UTC",
- "last_login_at": "2020-12-31",
- "last_logout_at": "2020-12-31",
- "last_activity_at": "2020-12-31",
- "activation_state": "active",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_product_update_read_at": "2020-12-31",
- "permissions": "administrator",
- "downtime_rights": "manage_all",
- "client_rights": "manage_all",
- "project_rights": "manage_all",
- "resource_rights": "manage_all",
- "report_rights": "manage_all",
- "owner": true,
- "deleted": true,
- "notices": { }
}
Returns information about the specified user.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the user. |
{- "id": 1,
- "first_name": "Joe",
- "last_name": "Bloggs",
- "email": "email@resourceguruapp.com",
- "images": {
}, - "timezone": "UTC",
- "last_login_at": "2020-12-31",
- "last_logout_at": "2020-12-31",
- "last_activity_at": "2020-12-31",
- "activation_state": "active",
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
- "last_product_update_read_at": "2020-12-31",
- "permissions": "administrator",
- "downtime_rights": "manage_all",
- "client_rights": "manage_all",
- "project_rights": "manage_all",
- "resource_rights": "manage_all",
- "report_rights": "manage_all",
- "owner": true,
- "deleted": true,
- "notices": { }
}
Resource Guru supports integration with other services using outgoing webhooks. In a nutshell, webhooks provide a way for Resource Guru to send real-time information to other apps. For example, when a booking is made in Resource Guru, webhooks can be used to post information (payloads) about that booking to a payload (receiving) URL. Getting this information was always possible via our basic API, but webhooks proactively post the changes instead. This means that apps no longer need to keep polling the API to check what's changed - resulting in much greater efficiency.
Account owners and users with administrative privileges can create new webhooks either via the API endpoint or via settings in their Resource Guru account. Simply specify the name of the webhook, the payload URL which receives the payloads, and the types of events which should be sent to the payload URL. For added security, you can provide a secret string which will be combined with the payload's request body to create a HMAC SHA256 digest and added as a request header.
The supported event types are:
As soon as changes are made within a relevant Resource Guru account, payloads are sent immediately for any of the events that have been subscribed to in the webhook. We will automatically try to deliver a payload 100 times before marking it as failed. More detail on payload statuses can be found in the payloads endpoint documentation. Payloads are dropped from Resource Guru's history after 30 days. Unsuccessful payloads will be lost after failing for 30 days.
Payloads are sent as JSON with the following headers:
Header | Description |
---|---|
User-Agent | The string ResourceGuru/Webhooks identifies Resource Guru as the sender. |
Content-Type | The string application/json identifies the content type of the payload. |
X-ResourceGuru-Key | The secret provided when creating the webhook. This is only sent if a webhook secret is set. |
X-ResourceGuru-Signature | A HMAC SHA256 digest of the request body, signed by the webhook secret. This is only sent if a webhook secret is set. |
The signature is generated on our side using the OpenSSL library using the following code:
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), webhook_secret, request_body)
Payloads are sent as JSON.
Key | Type | Description |
---|---|---|
id | integer | Each payload has a unique incrementing ID |
timestamp | integer | A UNIX epoch timestamp when the event occurred. |
payload | object | Format varies based on the type of event. We use a stripped down version of whatever type the payload is representing, any additional information can be fetched via the API. The keys action and type are added. |
The payload action
will be one of:
The payload type
will be one of:
An example payload when a new client is created:
{
"id": 1,
"timestamp": 1423472753,
"payload": {
"id": 1234,
"archived": false,
"color": null,
"name": "A client",
"notes": "Some notes",
"created_at": "2015-02-04T16:40:23.000Z",
"updated_at":"2015-02-09T09:05:53.581Z",
"action": "create",
"type": "client"
}
}
Returns a list of webhooks configured for this account
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
[- {
- "id": 1,
- "account_id": 1,
- "name": "string",
- "events": [
- "bookings"
], - "secret": "string",
- "send_secret_header": true,
- "status": "ready",
- "paused": true,
- "user_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
}
]
Create a new webhook
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The information for the webhook
name required | string [ 1 .. 255 ] characters The name of this webhook for display purposes |
payload_url required | string [ 1 .. 255 ] characters The url that we will send relevant events to |
events required | Array of strings Items Enum: "bookings" "downtimes" "resources" "projects" "clients" "accounts" "resource_types" The events that will be sent to this webhook |
secret required | string <= 255 characters An optional secret used to create a SH256 HMAC which will be sent along with all webhook payloads for verification |
send_secret_header required | boolean Whether we send the secret in a header to the payload URL along with our events |
paused required | boolean Whether this webhook is paused, preventing delivery of events |
{- "name": "string",
- "events": [
- "bookings"
], - "secret": "string",
- "send_secret_header": true,
- "paused": true
}
{- "id": 1,
- "account_id": 1,
- "name": "string",
- "events": [
- "bookings"
], - "secret": "string",
- "send_secret_header": true,
- "status": "ready",
- "paused": true,
- "user_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
}
Sends a test payload to the specified URL and responds with the status code of the request
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
The URL we want to test
payload_url required | string <uri> |
{
}
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Retrieves a single webhook
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the webhook. |
{- "id": 1,
- "account_id": 1,
- "name": "string",
- "events": [
- "bookings"
], - "secret": "string",
- "send_secret_header": true,
- "status": "ready",
- "paused": true,
- "user_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
}
Updates a webhook
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the webhook. |
The parameters we want to update
name | string [ 1 .. 255 ] characters The name of this webhook for display purposes |
payload_url | string [ 1 .. 255 ] characters The url that we will send relevant events to |
events | Array of strings Items Enum: "bookings" "downtimes" "resources" "projects" "clients" "accounts" "resource_types" The events that will be sent to this webhook |
secret | string <= 255 characters An optional secret used to create a SH256 HMAC which will be sent along with all webhook payloads for verification |
send_secret_header | boolean Whether we send the secret in a header to the payload URL along with our events |
paused | boolean Whether this webhook is paused, preventing delivery of events |
retry_last | boolean Default: false Whether to attempt resending the last payload after updating |
{- "name": "string",
- "events": [
- "bookings"
], - "secret": "string",
- "send_secret_header": true,
- "paused": true,
- "retry_last": false
}
{- "id": 1,
- "account_id": 1,
- "name": "string",
- "events": [
- "bookings"
], - "secret": "string",
- "send_secret_header": true,
- "status": "ready",
- "paused": true,
- "user_id": 1,
- "created_at": "2020-12-31T14:29:29.000Z",
- "updated_at": "2020-12-31T14:29:29.000Z",
}
Deletes a webhook
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the webhook. |
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}
Tests a webhook and returns the status, or a 500 if there are problems connecting to the URL
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the webhook. |
"status: 200"
Payloads are created for webhooks once any interaction with the application takes place. All payloads are created immediately once an action is performed for webhooks that are subscribed to that action.
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the webhook. |
offset | string^\d+$ Default: "0" Example: offset=10 The number of results to skip over. Useful for pagination. |
limit | string^\d+$ Default: null Example: limit=50 The maximum number of results to return. |
[- {
- "id": 1,
- "account_id": 1,
- "webhook_id": 1,
- "model": {
- "id": 1,
- "timestamp": 1423469363,
- "payload": {
- "id": 1234,
- "archived": false,
- "color": null,
- "name": "A client",
- "notes": "",
- "created_at": "2015-02-05T18:44:36.000Z",
- "updated_at": "2015-02-09T08:09:22.547Z",
- "action": "delete",
- "type": "client"
}
}, - "user": {
- "id": 1,
- "name": "Shaun Prestor",
- "email": "shaun@example.com"
}, - "action": "delete",
- "attempts": 1,
- "status": "delivered",
- "last_sent_on": "2015-02-09T08:09:24.292Z",
- "created_at": "2015-02-09T08:09:23.047Z",
- "request_headers": {
- "User-Agent": "ResourceGuru/Webhooks",
- "Content-Type": "application/json",
- "X-ResourceGuru-Key": "secret",
- "X-ResourceGuru-Signature": "41812cd012a1abd5a594d8633ebb5501a5cb0d3ee56bb4a4069b9f9e3bf962d6"
}, - "response_from_http_client": 201,
- "next_try": null
}, - {
- "id": 2,
- "account_id": 1,
- "webhook_id": 1,
- "model": {
- "id": 1,
- "timestamp": 1423472753,
- "payload": {
- "id": 1234,
- "archived": false,
- "color": null,
- "name": "A client",
- "notes": "",
- "created_at": "2015-02-04T16:40:23.000Z",
- "updated_at": "2015-02-09T09:05:53.581Z",
- "action": "delete",
- "type": "client"
}
}, - "user": {
- "id": 1,
- "name": "Shaun Prestor",
- "email": "shaun@example.com"
}, - "action": "delete",
- "attempts": 1,
- "status": "delivered",
- "last_sent_on": "2015-02-09T09:05:55.185Z",
- "created_at": "2015-02-09T09:05:53.684Z",
- "request_headers": {
- "User-Agent": "ResourceGuru/Webhooks",
- "Content-Type": "application/json",
- "X-ResourceGuru-Key": "secret",
- "X-ResourceGuru-Signature": "d0537e5b65fdd97c3722f53569ba2e89335889fa25f235c5d864f1d9422ec400"
}, - "response_from_http_client": 201,
- "next_try": null
}
]
Will attempt to resend a previously sent payload to a webhook
account required | string non-empty Example: example-corp The Account URL ID for your account - can be seen in the URL bar when using the application in a browser. |
id required | integer >= 1 Example: 1 The unique identifier of the webhook. |
Contains the unique identifier of the payload that we want to re-send
id required | integer >= 1 A unique identifier for an entity. |
{- "id": 1
}
{- "errors": [
- {
- "name": "string",
- "date": "2020-12-31T14:29:29.000Z",
- "code": 0,
- "message": "string"
}
]
}