{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"9900ee92-5a41-4f67-9bfa-005dcc0c3d7b","name":"Jibble API","description":"## API Introduction\n\nThe Jibble API follows the [REST](http://en.wikipedia.org/wiki/Representational_State_Transfer) architecture. The URLs have a predictable structure that is resource based, accepts [JSON-encoded](http://www.json.org/) request bodies and returns JSON-encoded responses. It also uses standard HTTP response codes, authentication and verbs.\n\nSome requests can also be used with filters.\n\nIt is possible to test the API on the test environment without affecting your live data.\n\n---\n\n## OData Query Options\n\nJibble's API supports query options to customize the information retrieved. For more details refer to [Query Options documentation](https://docs.microsoft.com/en-us/odata/concepts/queryoptions-overview).\n\n---\n\n## Errors\n\nJibble uses standard HTTP response codes to indicate success or failure of a request. In case of an error, the response body should contain more details on the problem.\n\n---\n\n# Async requests for OData collection endpoints\n\nThis guide explains how to use asynchronous API requests.  \nIt is intended for API consumers who need to export or fetch large OData collections without keeping a long-running HTTP connection open.\n\n## What this feature does\n\nFor supported collection `GET` endpoints, add:\n\n``` http\nPrefer: respond-async\n\n ```\n\nWhen this header is present, the API accepts the request and returns a job reference instead of the full dataset immediately.  \nYou then poll the export status and download the result when ready.\n\n## Supported request shape\n\n- Method: `GET`\n    \n- Endpoint type: OData collection endpoint (for example: `/v1/People`)\n    \n- Optional OData options: `$filter`, `$orderby`, `$select`, `$expand` (and combinations)\n    \n- Header: `Prefer: respond-async`\n    \n\nIf `Prefer: respond-async` is not sent, the endpoint behaves normally and returns a synchronous response.\n\n## Endpoints that do not support async mode\n\nNot every endpoint supports async exports.  \nFor non-async endpoints (Timesheets endpoints, for example), sending `Prefer: respond-async` does not return an async export job and the endpoint behaves as a normal synchronous API call.\n\nUse this quick check:\n\n- Async-capable endpoint: returns `202 Accepted` with `exportId` and `statusUrl`.\n    \n- Non-async endpoint: returns its regular response shape (usually `200 OK`) without `exportId`/`statusUrl`.\n    \n\n## Step 1: Start an async request\n\n### Example\n\n``` http\nGET <service-host>/v1/People?$select=id,fullName,status&$expand=organization&$filter=contains(fullName,&#x27;Export&#x27;)&$orderby=fullName\nAuthorization: Bearer {{person_access_token}}\nPrefer: respond-async\n\n ```\n\n### Response\n\n- Status: `202 Accepted`\n    \n- Headers:\n    \n    - `Preference-Applied: respond-async`\n        \n    - `Location: /v1/AsyncExports({exportId})`\n        \n- Body:\n    \n\n``` json\n{\n  \"exportId\": \"d7d6d82a-ae1b-4dda-b47a-4d8fce95be58\",\n  \"status\": \"Pending\",\n  \"statusUrl\": \"/v1/AsyncExports(d7d6d82a-ae1b-4dda-b47a-4d8fce95be58)\"\n}\n\n ```\n\n> Note: for duplicate requests, the API may return an existing export ID instead of creating a new one.  \n`statusUrl` is a relative URL; call it on the same service host that received the original request. \n  \n\n## Deduplication and getting a fresh export\n\nAsync export creation uses deduplication per user.\n\n- Two requests are considered duplicates when they target the same entity and use the same raw query string (same parameters).\n    \n- If a duplicate is found, the API returns the existing export instead of creating a new one.\n    \n- This means repeated calls can return the same `exportId` until that export is removed or expires.\n    \n\nTo force a fresh export with the same parameters:\n\n1. Delete the existing export: `DELETE /v1/AsyncExports({exportId})`, or\n    \n2. Wait until the existing export expires based on retention.\n    \n\n## Step 2: Poll export status\n\nUse the `statusUrl` (or `Location`) from step 1:\n\n``` http\nGET <service-host>/v1/AsyncExports({{export_id}})\nAuthorization: Bearer {{person_access_token}}\n\n ```\n\nPossible status response:\n\n``` json\n{\n  \"exportId\": \"d7d6d82a-ae1b-4dd2-b47a-4d8fce95be58\",\n  \"status\": \"Processing\",\n  \"entityType\": \"Jibble.TimeTracking.Model.Person\",\n  \"createdAt\": \"2026-02-26T13:20:10.2877721+00:00\",\n  \"lastUpdatedAt\": \"2026-02-26T13:20:11.1142432+00:00\",\n  \"responseSizeBytes\": null,\n  \"error\": null\n}\n\n ```\n\nStatus values:\n\n- `Pending`\n    \n- `Processing`\n    \n- `Completed`\n    \n- `Failed`\n    \n\nIf status is `Failed`, check the `error` field.\n\n## Step 3: Download completed result\n\nWhen an export is completed, polling endpoint returns:\n\n- Status: `303 See Other`\n    \n- Header: `Location:`\n    \n\nMany HTTP clients automatically follow redirects; in that case you usually receive `200 OK` from S3 with the exported JSON.\n\nThe exported payload is OData JSON:\n\n``` json\n{\n  \"@odata.context\": \"https://<service-host>/$metadata#Collection(Person)\",\n  \"@odata.count\": 3,\n  \"value\": [\n    {\n      \"id\": \"....\",\n      \"fullName\": \"Export Alpha\",\n      \"organization\": { \"id\": \"....\", \"name\": \"...\" }\n    }\n  ]\n}\n\n ```\n\n## Additional export management endpoints\n\n### List your exports\n\n``` http\nGET <service-host>/v1/AsyncExports\nAuthorization: Bearer {{person_access_token}}\n\n ```\n\nReturns an array of your export records.\n\n### Delete an export\n\n``` http\nDELETE <service-host>/v1/AsyncExports({{export_id}})\nAuthorization: Bearer {{person_access_token}}\n\n ```\n\nReturns `204 No Content`.\n\n## Retention and URL expiration\n\n- Export state is retained for a limited time (default is 24 hours, deployment-configurable).\n    \n- Download URLs are pre-signed and expire (default is 24 hours, deployment-configurable).\n    \n- If an export has expired, polling may return `404 Not Found`.\n    \n\n## Error handling and limits\n\n- `429 Too Many Requests`: too many active exports for the user.  \n    Example body:\n    \n    ``` json\n      {\n        \"error\": \"Too many concurrent exports\",\n        \"maxConcurrentExports\": 5\n      }\n    \n     ```\n    \n- `404 Not Found`: export does not exist or does not belong to the authenticated user.\n    \n- `200 OK` + `status: \"Failed\"`: export failed asynchronously; inspect `error`.\n    \n\n## End-to-end cURL example\n\n``` bash\n# 1) Start async request\ncurl -i --request GET \\\n  --url \"https://time-tracking.prod.jibble.io/v1/People?\\$select=id,fullName&\\$expand=organization\" \\\n  --header \"Authorization: Bearer <token>\" \\\n  --header \"Prefer: respond-async\"\n# 2) Poll status (repeat until completed or failed)\ncurl -i --request GET \\\n  --url \"https://time-tracking.prod.jibble.io/v1/AsyncExports(<exportId>)\" \\\n  --header \"Authorization: Bearer <token>\"\n\n ```\n\n## Best practices for API clients\n\n- Poll with a small delay (for example 1-3 seconds) and apply backoff for longer-running exports.\n    \n- Handle both `303` redirects and auto-followed `200` responses from S3.\n    \n- Treat `Failed` as terminal and surface `error` to logs/telemetry.\n    \n- Delete exports you no longer need.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"11516962","collectionId":"9900ee92-5a41-4f67-9bfa-005dcc0c3d7b","publishedId":"TzJshepU","public":true,"publicUrl":"https://docs.api.jibble.io","privateUrl":"https://go.postman.co/documentation/11516962-9900ee92-5a41-4f67-9bfa-005dcc0c3d7b","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2021-10-28T08:11:56.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[{"name":"Jibble Production Environment","id":"f657e397-fb5c-47ce-bfec-9b79ad0fca12","owner":"11516962","values":[{"key":"workspaceURL","value":"https://workspace.prod.jibble.io","enabled":true},{"key":"identityURL","value":"https://identity.prod.jibble.io","enabled":true},{"key":"timeAttendanceURL","value":"https://time-attendance.prod.jibble.io","enabled":true},{"key":"authorizationURL","value":"https://authorization.prod.jibble.io","enabled":true},{"key":"timeTrackingURL","value":"https://time-tracking.prod.jibble.io","enabled":true},{"key":"notificationURL","value":"https://notification.prod.jibble.io","enabled":true},{"key":"accessToken","value":"Access Token","enabled":true},{"key":"accessPersonToken","value":"Access Token","enabled":false},{"key":"login","value":"login","enabled":false},{"key":"password","value":"password","enabled":false},{"key":"personID","value":"Person ID","enabled":true},{"key":"organizationID","value":"Organization ID","enabled":true},{"key":"locationID","value":"Location ID","enabled":true},{"key":"organizationName","value":"Organization Name","enabled":true},{"key":"locationName","value":"Location Name","enabled":true},{"key":"kioskID","value":"Kiosk ID","enabled":true},{"key":"accountInviteFullName","value":"John Doe","enabled":true},{"key":"accountInviteEmail","value":"pedro+normaluser@jibble.io","enabled":false},{"key":"ownerEmail","value":"Owner Email","enabled":true},{"key":"memberEmail","value":"Member Email","enabled":true},{"key":"memberName","value":"Member Name","enabled":true},{"key":"phoneNumber","value":"Phone Number","enabled":true},{"key":"invitedMemberID","value":"Invited Member ID","enabled":true},{"key":"memberInvitedID","value":"Member Invited ID","enabled":true},{"key":"memberPersonID","value":"Member Person ID","enabled":true},{"key":"password2","value":"Password","enabled":true},{"key":"randomPhoneNumber","value":"Phone Number","enabled":true},{"key":"activityID","value":"","enabled":false},{"key":"acvitityName","value":"Acvitity Name","enabled":true},{"key":"latestTimeEntryID","value":"Latest Time Entry ID","enabled":true},{"key":"activityID","value":"Activity ID","enabled":true},{"key":"fileID","value":"","enabled":true},{"key":"uploadURL","value":"","enabled":true},{"key":"activityName","value":"Activity Name","enabled":true},{"key":"user1ID","value":"","enabled":true},{"key":"user2ID","value":"","enabled":true},{"key":"kiosk1ID","value":"","enabled":true},{"key":"kiosk2ID","value":"","enabled":true},{"key":"clientID","value":"Client ID","enabled":true},{"key":"projectID","value":"Project ID","enabled":true},{"key":"randomNumber","value":"Random Number","enabled":true},{"key":"person1ID","value":"","enabled":true},{"key":"person2ID","value":"","enabled":true},{"key":"person3ID","value":"","enabled":true},{"key":"groupID","value":"","enabled":true},{"key":"managerName","value":"Manager Name","enabled":true},{"key":"managerEmail","value":"Manager Email","enabled":true},{"key":"managerID","value":"Manager ID","enabled":true},{"key":"managerRoleID","value":"Manager Role ID","enabled":true},{"key":"managerGroupID","value":"Manager Group ID","enabled":true},{"key":"ownerGroupID","value":"Owner Group ID","enabled":true},{"key":"managerUserAccessToken","value":"Manager User Access Token","enabled":true},{"key":"variable_key","value":"","enabled":true},{"key":"managerPersonAccessToken","value":"Manager Person Access Token","enabled":true},{"key":"managerGroupMemberEmail","value":"Manager Group Member Email","enabled":true},{"key":"managerGroupMemberID","value":"Manager Group Member ID","enabled":true},{"key":"noGroupMemberEmail","value":"No Group Member Email","enabled":true},{"key":"noGroupMemberID","value":"No Group Member ID","enabled":true},{"key":"memberCounter","value":"0","enabled":true},{"key":"member1ID","value":"","enabled":true},{"key":"group1ID","value":"","enabled":true},{"key":"adminEmail","value":"Admin Email","enabled":true},{"key":"adminID","value":"Admin ID","enabled":true},{"key":"adminName","value":"Admin Name","enabled":true},{"key":"adminRoleID","value":"Admin Role ID","enabled":true},{"key":"adminGroupID","value":"Admin Group ID","enabled":true},{"key":"adminGroupMemberEmail","value":"Admin Group Member Email","enabled":true},{"key":"adminGroupMemberID","value":"Admin Group Member ID","enabled":true},{"key":"adminUserAccessToken","value":"Admin User Access Token","enabled":true},{"key":"adminPersonAccessToken","value":"Admin Person Access Token","enabled":true},{"key":"noGroupMemberName","value":"Member Name","enabled":true},{"key":"noGroupMemberLatestTimeEntryID","value":"No Group Member Latest TimeEntry ID","enabled":true},{"key":"managerGroupMemberLatestTimeEntryID","value":"Manager Group Member Latest TimeEntry ID","enabled":true},{"key":"managerLatestTimeEntryID","value":"Manager Latest TimeEntry ID","enabled":true},{"key":"s3Bucket","value":"","enabled":true},{"key":"envName","value":"Environment Name","enabled":true},{"key":"managerGroupMemberName","value":"Manager Group Member Name","enabled":true},{"key":"memberID","value":"Member ID","enabled":true},{"key":"memberUserAccessToken","value":"Member User Access Token","enabled":true},{"key":"memberPersonAccessToken","value":"Member Person Access Token","enabled":true},{"key":"memberLatestTimeEntryID","value":"Latest TimeEntry ID","enabled":true},{"key":"adminGroupMemberLatestTimeEntryID","value":"Latest TimeEntry ID","enabled":true},{"key":"adminLatestTimeEntryID","value":"Latest TimeEntry ID","enabled":true},{"key":"location2ID","value":"Location ID","enabled":true},{"key":"location2Name","value":"Location Name","enabled":true},{"key":"noGroupMember2ID","value":"Group Member ID","enabled":true},{"key":"noGroupMember2Email","value":"Member Email","enabled":true},{"key":"billingURL","value":"https://billing.prod.jibble.io","enabled":true},{"key":"subscriptionID","value":"Subscription ID","enabled":true},{"key":"location1ID","value":"Location ID","enabled":true},{"key":"location1Name","value":"Location Name","enabled":true},{"key":"location3ID","value":"Location ID","enabled":true},{"key":"location3Name","value":"Location Name","enabled":true},{"key":"activity2ID","value":"Activity ID","enabled":true},{"key":"activity2Name","value":"Activity Name","enabled":true},{"key":"projectName","value":"Project Name","enabled":true},{"key":"clientName","value":"Client Name","enabled":true},{"key":"scheduleID","value":"Schedule ID","enabled":true},{"key":"scheduleName","value":"Schedule Name","enabled":true},{"key":"customerID","value":"Customer ID","enabled":true},{"key":"memberGroupID","value":"Group ID","enabled":true},{"key":"acvitityID","value":"","enabled":false},{"key":"clientSecretID","value":"65d6cacb-60a4-4a88-9d23-c93c32d6dafd","enabled":true,"type":"secret"},{"key":"clientSecret","value":"ol!Mi^dw%.BY5qp5","enabled":true,"type":"secret"},{"key":"acvitityID","value":"","enabled":true,"type":"any"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/c3dd4725c7a6ee916ab7cbe0a98b0adbaa5fd0162ad5a94d0fd8db487948ec84","favicon":"https://jibble.io/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"Jibble Production Environment","value":"11516962-f657e397-fb5c-47ce-bfec-9b79ad0fca12"}],"canonicalUrl":"https://docs.api.jibble.io/view/metadata/TzJshepU"}