Jibble API

Join our community of developers and companies that have empowered their employees to use Jibble as a main tool to track time & attendance. Get in-depth information about the Jibble API by visiting our documentation, and see what you can build!

Getting started

  1. Setup Your Developer Account

Thanks for choosing the Jibble API to build tracking experiences into your app or website. We know that getting started with a new API can be challenging, so we’ve created a step-by-step guide that walks you through how to create a Jibble Developer account, make your first API call and more.


  1. Register as a Developer

First, you will have to create your own account to register. If you are an existing Jibble user, you also need a new developer account.


  1. Create A New Jibble App

On the next page, choose a name for your app and enter the URL where it will be hosted.

New Jibble App
  1. Obtain Your Client ID and Secret Key

Once you’ve created your app, make note of your app ID, client ID and secret key, as we will need this in the next step. Please note the key below has been generated for this guide and will not be usable in an application.

New Jibble App
  1. Make Your First API Call

Using the app ID, client ID and secret obtained previously, lets make our first API call!. The examples below show you how to get the access token required to perform all other operations using Jibble API.

const Jibble = require('jibble-sdk');

const client = new Jibble({
  bearer_token: ''
});

const params = {};
client.get('activities', params)
  .then(function(activities) {
    console.log(activities);
  })
  .catch(function (error) {
    throw error;
  })

or directly from the console:

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/activities

  1. Next Steps

Now that you’re all set to make API calls, be sure to check out these additional sections about our Rate Limits, Authentication and Terms of Use. Also, feel free to explore all the endpoints we have!

Endpoints Overview

View a complete list of Jibble API endpoints below. Returned data differs from the scope level you assigned to the application instance.

Some endpoints may only be called using access token only. Click here to learn more about authentication.

+ Clients

Description

Gives the full details about a venue including location, tips, and categories.

If the venue ID given is one that has been merged into another “master” venue, the response will show data about the “master” instead of giving you an error.

Get details about a Client

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/clients/<:client_id>

Parameters

NameExampleDescription
<:client_id>XXX123YYYrequired ID of the client to retrieve

Response

{
  "id": "1yb1sF8DpDesonys",
  "name": "Client 1",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "updated_at": "2018-06-23T05:53:11.214Z"
}

List Clients

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/clients

Parameters

NameExampleDescription
filter[include]teamattach full information about team in the response

Response

[
  {
    "id": "1dkzv9nQTjLvK8OD",
    "name": "Client 1",
    "team": {
        "id": "FC6xFnSAYx"
    },
    "updated_at": "2018-06-23T05:31:21.989Z"
  }
]

Create a new Client

curl -i -X POST -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"name": "GoodCar", "team": "XXX123YYY"}' https://connect.jibble.io/api/v1/clients

Parameters

NameExampleDescription
nameGoodCarrequired a client name
teamXXX123YYYrequired a team id

Response

{
  "id": "1dkzv9nQTjLvK8OD",
  "name": "Client 1",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "updated_at": "2018-06-23T05:31:21.989Z"
}

Update a Client

curl -i -X PUT -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"name": "GoodCar"}' https://connect.jibble.io/api/v1/clients/<:client_id>

Parameters

NameExampleDescription
<:client_id>XXX123YYYrequired ID of the client to update
nameGoodCarrequired a client name

Response

{
  "id": "1dkzv9nQTjLvK8OD",
  "name": "Client 1",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "updated_at": "2018-06-23T05:31:21.989Z"
}

Delete a Client

curl -i -X DELETE -H "Authorization: Bearer <ACCESS_TOKEN>" https://connect.jibble.io/api/v1/clients/<:client_id>

Parameters

NameExampleDescription
<:client_id>XXX123YYYrequired ID of the client to delete

Response

{
  "status": "success"
}

+ Activities

Get details about a Activity

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/activites/<:activity_id>

Parameters

NameExampleDescription
<:activity_id>XXX123YYYrequired ID of the activity to retrieve

Response

{
  "id": "1hHkD0gDd2",
  "name": "Research and Development",
  "description": "",
  "color": "#55C9BD",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "updated_at": "2018-06-21T13:12:24.401Z",
  "created_at": "2016-05-10T16:32:25.375Z"
}

List Activities

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/activites

Response

[
  {
    "id": "1hHkD0gDd2",
    "name": "Research and Development",
    "description": "",
    "color": "#55C9BD",
    "team": {
        "id": "FC6xFnSAYx"
    },
    "updated_at": "2018-06-21T13:12:24.401Z",
    "created_at": "2016-05-10T16:32:25.375Z"
  }
]

Create a new Activity

curl -i -X POST -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"name": "Development", "description": "Software services", "color": "#a8a8a8", "team": "XXX123YYY"}'  https://connect.jibble.io/api/v1/activites

Parameters

NameExampleDescription
nameDevelopmentrequired a activity name
descriptionSoftware servicesa description name
color#a8a8a8required a unique color for activity
teamXXX123YYYrequired a team id

Response

{
  "id": "1hHkD0gDd2",
  "name": "Research and Development",
  "description": "",
  "color": "#55C9BD",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "updated_at": "2018-06-21T13:12:24.401Z",
  "created_at": "2016-05-10T16:32:25.375Z"
}

Update a Activity

curl -i -X PUT -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"name": "Development"}' https://connect.jibble.io/api/v1/activites/<:activity_id>

Parameters

NameExampleDescription
<:activity_id>XXX123YYYrequired ID of the activity to update
nameDevelopmentrequired a activity name
descriptionSoftware servicesa description name
color#a8a8a8required a unique color for activity

Response

{
  "id": "1hHkD0gDd2",
  "name": "Research and Development",
  "description": "",
  "color": "#55C9BD",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "updated_at": "2018-06-21T13:12:24.401Z",
  "created_at": "2016-05-10T16:32:25.375Z"
}

Delete a Activity

curl -i -X DELETE -H "Authorization: Bearer <ACCESS_TOKEN>" https://connect.jibble.io/api/v1/activites/<:activity_id>

Parameters

NameExampleDescription
<:activity_id>XXX123YYYrequired ID of the activity to delete

Response

{
  "status": "success"
}

+ Teams

Get details about a Team

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/teams/<:team_id>

Parameters

NameExampleDescription
<:team_id>XXX123YYYrequired ID of the team to retrieve

Response

{
  "id": "1C6xFnSAYx",
  "name": "Teeyoot 1",
  "workingHours": 8,
  "firstWeekday": 1,
  "subscriptionPlanType": "power",
  "firstMonth": 0,
  "memberSortOrder": "firstName",
  "owner": {
      "id": "tcHNNMhfyK"
  },
  "subscriptionPlan": {
      "id": "4r46JqzFIZ"
  },
  "updated_at": "2018-06-23T06:21:33.315Z"
}

List Teams

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/teams

Response

[
  {
    "id": "1C6xFnSAYx",
    "name": "Teeyoot 1",
    "workingHours": 8,
    "firstWeekday": 1,
    "subscriptionPlanType": "power",
    "firstMonth": 0,
    "memberSortOrder": "firstName",
    "owner": {
        "id": "tcHNNMhfyK"
    },
    "subscriptionPlan": {
        "id": "4r46JqzFIZ"
    },
    "updated_at": "2018-06-23T06:21:33.315Z"
  }
]

Create a new Team

curl -i -X POST -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"name": "GoodCar"}' https://connect.jibble.io/api/v1/teams

Parameters

NameExampleDescription
nameProgrammersrequired a team name
workingHours8a number of working hours (number)

Response

{
  "id": "1C6xFnSAYx",
  "name": "Teeyoot 1",
  "workingHours": 8,
  "firstWeekday": 1,
  "subscriptionPlanType": "power",
  "firstMonth": 0,
  "memberSortOrder": "firstName",
  "owner": {
      "id": "tcHNNMhfyK"
  },
  "subscriptionPlan": {
      "id": "4r46JqzFIZ"
  },
  "updated_at": "2018-06-23T06:21:33.315Z"
}

Update a Team

curl -i -X PUT -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"name": "Developers"}' https://connect.jibble.io/api/v1/teams/<:team_id>

Parameters

NameExampleDescription
<:team_id>XXX123YYYrequired ID of the team to update
nameDevelopersrequired a team name

Response

{
  "id": "1C6xFnSAYx",
  "name": "Teeyoot 1",
  "workingHours": 8,
  "firstWeekday": 1,
  "subscriptionPlanType": "power",
  "firstMonth": 0,
  "memberSortOrder": "firstName",
  "owner": {
      "id": "tcHNNMhfyK"
  },
  "subscriptionPlan": {
      "id": "4r46JqzFIZ"
  },
  "updated_at": "2018-06-23T06:21:33.315Z"
}

Delete a Team

curl -i -X DELETE -H "Authorization: Bearer <ACCESS_TOKEN>" https://connect.jibble.io/api/v1/teams/<:team_id>

Parameters

NameExampleDescription
<:team_id>XXX123YYYrequired ID of the team to delete

Response

{
  "status": "success"
}

+ Team Members

Get details about a Team Member

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/teammembers/<:teammember_id>

Parameters

NameExampleDescription
<:teammember_id>XXX123YYYrequired ID of the team member to retrieve

Response

{
  "id": "1fDfeKfPrx",
  "firstName": "Jaclyn",
  "lastName": "Ting-Un",
  "email": "jaclyn@example.com",
  "role": "team_owner",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "user": {
      "id": "cCOzuUDtsp"
  },
  "updated_at": "2018-06-24T15:54:27.723Z",
  "created_at": "2016-03-28T05:30:19.013Z"
}

List Team Members

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/teammembers

Response

[
  {
    "id": "1fDfeKfPrx",
    "firstName": "Jaclyn",
    "lastName": "Ting-Un",
    "email": "jaclyn@example.com",
    "role": "team_owner",
    "team": {
        "id": "FC6xFnSAYx"
    },
    "user": {
        "id": "cCOzuUDtsp"
    },
    "updated_at": "2018-06-24T15:54:27.723Z",
    "created_at": "2016-03-28T05:30:19.013Z"
  }
]

Create a new Team Member

Currently, we do not allow adding new team members using API. For more information, please contact us.

Update a Team Member

curl -i -X PUT -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"firstName": "Chris"}' https://connect.jibble.io/api/v1/teammembers/<:teammember_id>

Parameters

NameExampleDescription
<:teammember_id>XXX123YYYrequired ID of the team member to update
firstNameChrisrequired a first name
lastNameSmithrequired a last name

Response

{
  "id": "LfDfeKfPrx",
  "firstName": "Jaclyn",
  "lastName": "Ting-Un",
  "email": "jaclyn@example.com",
  "role": "team_owner",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "user": {
      "id": "cCOzuUDtsp"
  },
  "updated_at": "2018-06-24T15:54:27.723Z",
  "created_at": "2016-03-28T05:30:19.013Z"
}

Delete a Team Member

curl -i -X DELETE -H "Authorization: Bearer <ACCESS_TOKEN>" https://connect.jibble.io/api/v1/teammembers/<:teammember_id>

Parameters

NameExampleDescription
<:teammember_id>XXX123YYYrequired ID of the team member to delete

Response

{
  "status": "success"
}

+ Power Ups

Get details about a Power Up

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/powerups/<:powerup_id>

Parameters

NameExampleDescription
<:powerup_id>XXX123YYYrequired ID of the power up to retrieve

Response

{
  "id": "16BUnh9VfO",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "isEnabled": true,
  "powerUpId": "billing",
  "updated_at": "2018-06-21T13:08:05.827Z",
  "created_at": "2016-05-06T08:34:13.546Z"
}

List Power Ups

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/powerups

Response

[
  {
    "id": "16BUnh9VfO",
    "team": {
        "id": "FC6xFnSAYx"
    },
    "isEnabled": true,
    "powerUpId": "billing",
    "updated_at": "2018-06-21T13:08:05.827Z",
    "created_at": "2016-05-06T08:34:13.546Z"
  }
]

Create a new Power Up

curl -i -X POST -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"powerUpId": "XXX321YYY", "isEnabled": true, "team": "XXX123YYY"}' https://connect.jibble.io/api/v1/powerups

Parameters

NameExampleDescription
powerUpIdXXX321YYYrequired a power up id (see below for available ids)
isEnabledtruerequired a status for power up (boolean)
teamXXX123YYYrequired a team id

Response

{
  "id": "16BUnh9VfO",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "isEnabled": true,
  "powerUpId": "billing",
  "updated_at": "2018-06-21T13:08:05.827Z",
  "created_at": "2016-05-06T08:34:13.546Z"
}

Update a Power Up

curl -i -X PUT -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"isEnabled": false}' https://connect.jibble.io/api/v1/powerups/<:powerup_id>

Parameters

NameExampleDescription
<:powerup_id>XXX123YYYrequired ID of the power up to update
isEnabledtruerequired a status for power up (boolean)

Response

{
  "id": "16BUnh9VfO",
  "team": {
      "id": "FC6xFnSAYx"
  },
  "isEnabled": true,
  "powerUpId": "billing",
  "updated_at": "2018-06-21T13:08:05.827Z",
  "created_at": "2016-05-06T08:34:13.546Z"
}

Available Power Ups (powerup_id)

  • slack

+ Time Entries

Get details about a Time Entry

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/timeentries/<:timeentry_id>

Parameters

NameExampleDescription
<:timeentry_id>XXX123YYYrequired ID of the time entry to retrieve

Response

{
  "id": "1PkkzOnseXDvldOE",
  "person": {
      "id": "907MKj9OKo"
  },
  "action": 1,
  "meta": {
      "app": "public-api"
  },
  "date": "2018-06-24T12:16:59.490Z",
  "notes": "work on the client app",
  "updated_at": "2018-06-24T15:54:20.533Z",
  "created_at": "2018-06-24T15:54:20.533Z"
}

List Time Entries

curl -H "Authorization: Bearer <:token>" https://connect.jibble.io/api/v1/timeentries

Response

[
  {
    "id": "1PkkzOnseXDvldOE",
    "person": {
        "id": "907MKj9OKo"
    },
    "action": 1,
    "meta": {
        "app": "public-api"
    },
    "date": "2018-06-24T12:16:59.490Z",
    "notes": "work on the client app",
    "updated_at": "2018-06-24T15:54:20.533Z",
    "created_at": "2018-06-24T15:54:20.533Z"
  }
]

Create a new Time Entry

curl -i -X POST -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"action": 1, "notes": "sample note", "person": "XXX123YYY"}' https://connect.jibble.io/api/v1/timeentries

Parameters

NameExampleDescription
action1required a time entry action -> 1 - jibble in, 2 - jibble out
activityXXX321YYYan activity id
clientXXX123YYYa client id
notessome short notea note about this time entry
date2018-05-18T12:16:59.490Za time of this time entry
personoptionalan team member id
customData{ myId: 123, anotherField: 'hello' }a field where you can store your custom fields

Response

{
  "id": "1PkkzOnseXDvldOE",
  "person": {
      "id": "907MKj9OKo"
  },
  "action": 1,
  "customData": {
      "app": "internal-system",
      "myId": 123,
      "synched": true
  },
  "date": "2018-06-24T12:16:59.490Z",
  "notes": "work on the client app",
  "updated_at": "2018-06-24T15:54:20.533Z",
  "created_at": "2018-06-24T15:54:20.533Z"
}

Update a Time Entry

curl -i -X PUT -H "Authorization: Bearer <ACCESS_TOKEN>" -H 'Content-Type: application/json' -d '{"notes": "short note"}'  https://connect.jibble.io/api/v1/timeentries/<:timeentry_id>

Parameters

NameExampleDescription
<:timeentry_id>XXX123YYYrequired ID of the time entry to update
activityXXX321YYYan activity id
clientXXX123YYYa client id
notessome short notea note about this time entry

Response

{
  "id": "1PkkzOnseXDvldOE",
  "person": {
      "id": "907MKj9OKo"
  },
  "action": 1,
  "meta": {
      "app": "public-api"
  },
  "date": "2018-06-24T12:16:59.490Z",
  "notes": "work on the client app",
  "updated_at": "2018-06-24T15:54:20.533Z",
  "created_at": "2018-06-24T15:54:20.533Z"
}

Delete a Time Entry

curl -i -X DELETE -H "Authorization: Bearer <ACCESS_TOKEN>" https://connect.jibble.io/api/v1/timeentries/<:timeentry_id>

Parameters

NameExampleDescription
<:timeentry_id>XXX123YYYrequired ID of the time entry to delete

Response

{
  "status": "success"
}

Filtering

To filter data use filter[where][<:fieldName>] query:

?filter[where][team]=<:teamId>&filter[where][action]=1

more examples:

NameExampleDescription
filter[where][team]YYY123XXXdisplay data assigned to the team
filter[where][activity]XXX123YYYdisplay data assigned to selected activity
filter[where][action]1display data only for jibble in action
filter[where][meta.appVer]1display data only added by app in version 1

you can use mix of available filters:

OperatorNameExampleDescription
likefilter[where][team][like]YYY123XXXallows to use a regular expression in the query
eqfilter[where][date][eq]2018-05-18T12:16:59.490Zdisplay data where value is equal to
neqfilter[where][activity][neq]XXX123YYYdisplay data where value is not equal to
gtfilter[where][action][gt]1display data only where value is greater then
gtefilter[where][meta.appVer][gte]1display data only where value is greater or equal then
ltfilter[where][action][lt]1display data only where value is less then
ltefilter[where][meta.appVer][lte]1display data only added by app in version 1
[between][0]filter[where][meta.appVer][[between][0]]1display data only between range [between][0] to [between][1]
[between][1]filter[where][meta.appVer][[between][1]]2display data only between range [between][0] to [between][1]

Relations

To include full data about related objects user filter[include] query:

?filter[include]=person         # display full info about the person within element
NameExampleDescription
filter[include]persondisplay full info about the person within element
filter[include]activitydisplay full info about activity within element

Sorting

To sort data use filter[order] query:

?filter[order]=date DESC      # to sort descending
?filter[order]=date ASC       # to sort ascending

Pagination

By default all endpoints return 30 items per page, the maximum items per page is 100. To paginate through results you have to use filter[skip] and filter[limit] query:

?filter[limit]=100&filter[skip]=100             # set limit to 100 items per page 
                                                # and display second page
                                                # page 1 = 0 to 100
                                                # page 2 = 100 to 200

Authentication

We use OAuth 2.0 to provide authorized access to our API. Here is a sample recommended work-flow:

Step 1

Post a request to this endpoint

curl -i -X POST -H 'Content-Type: application/json' -d '{"grant_type": "password", "client_id": "XXX123YYY", "client_secret": "secret", "username": "youremail@somewhere.com", "password": "password", "scope": "basic"}' https://connect.herokuapp.com/oauth/token

with attributes in the post body

{
  "grant_type": "password",
  "client_id": "XXX123YYY",
  "client_secret": "secret",
  "username": "youremail@somewhere.com",
  "password": "password",
  "scope": "basic"
}

Your server should exchange the data it got in step 1 for an access token. The response will be JSON.

{
  "access_token": "XX1by1qQnkNiCsDxZlFhaT44zjnWr4C3iz",
  "expires_in": 1209600,
  "scope": "basic",
  "refresh_token": "YY1ug5pS6fpHOblO8c0n90GyKd1kVIfLvG",
  "token_type": "Bearer"
}

Step 2

Once you have an access token, you can use any of the endpoints by just adding Bearer <ACCESS_TOKEN> to your GET, PUT or POST request authorization header. For example, from the command line, you can do:

 curl -H "Authorization: Bearer <ACCESS_TOKEN>" https://connect.jibble.io/api/v1/clients

Rate Limits

Usage of the API is subject to an five minute rate limit. The rate limits are based on a client type assigned to your account that tracks the number of requests you make per five minute.

An application can make a maximum of 150 queries per hour minute.

If you are currently over limits, our API will return a 403 error, and the response object returned by our API will be empty.

Terms of Use