Header | Description of Value |
---|---|
vericlock_api_public_key | Your API Public Key in standard guid format: abcd1234-1234-1234-1234-abcd12345678 |
vericlock_domain | The unique part of your access url. If your access URL is: your_domain.vericlock.com then the value for vericlock_domain would be your_domain Do not include the vericlock.com suffix. |
vericlock_authtoken | The guid authentication token received after authenticating. This is required for all API routes except authentication itself |
vericlock_signature | The HMAC signature for the request. See below on how to generate. |
content-type | application/json - Required only for HTTP POST requests that post a JSON body |
idempotency_key | Caches the request results in a lookup table with this key. Subsequent requests made within the timeout window will return the original request's results. This allows requests to behave idempotently where one or many invocations result in the request being processed only once. Valid key characters are A-Za-z0-9 dash(-), underscore(_), equals(=), plus(+) and forward slash(/). Idempotency keys will be removed from the cache after 24hours or longer depending on the API route. |
private function _generateSignature($path, $privateKey, $bodyStr) { $hashStr = $path . $bodyStr; $sig = hash_hmac('sha256', $hashStr, $privateKey); return $sig; }
Any non-GET request can be made idempotent by adding a unique key to the HTTP header idempotency_key. The results of such requests are cached for 24 hours, and subsequent requests of the same form with the same key will return the original results.
Some routes cannot be made idempotent, such as authentication. Generally all responses, 2xx,4xx, even 500 errors will be cached, making it safe to retry a request as many times as needed with the same idempotency key within the 24 hour window.
If a response was replayed from the idempotency cache, the response header idempotent_replayed will be set and equal to true.
Idempotency keys are unique to the authenticated user, but it is still strongly recommended to use a strongly random key, like a 128bit guid converted to hex or base64.
Responses to idempotent requests that generate specific error responses are not stored. Such errors are generally of the form
{ "code": "errCode", "message": "errMsg" }
HTTP Response Code | code | message | Details |
---|---|---|---|
409 | IdempotencyConflict | Request url does not match original request url | The url (uri and query params) must match the original request for the same idempotency key |
409 | IdempotencyConflict | Request method does not match original request method | The request method must match the original request for the same idempotency key |
409 | IdempotencyConflict | Request body does not match original request body | The request body must match the original request for the same idempotency key |
500 | IdempotencyError | Uknown error during idempotent request processing | Something unexpected has occurred. You can try the request again, but likely you may need to contact support if the issue does not resolve itself. |
500 | IdempotencyError | Timeout waiting for response | The idempotecy_key has been used before, and the system timed out waiting for the original request to produce a result to be returned. The timeout is 2 minutes generally, and it is safe to retry, but if the request is not expected to take this long (few if any requests should take this long) then something unexpected may have happened and you will need to contact support to help resolve. |
{ "user":string, //(Required)[string] employee email address "password":string //(Required)[string] plain text password }
{ "authToken": "d35b1486-43ca-42bb-828d-9f35bc4be2d4" }
{ //Employee Object, Describes an employee "phoneID":string, //[string] Numeric/touch-tone ID "firstName":string, //(Required)[string] First name "middleName":string, //[string] Middle initial (or name) "lastName":string, //[string] Last name "emailAddress":string, //[string] Email address "password":string, //[string] Password - plaintext (salted and hashed server side) "oldpassword":string, //[string] Old Password - only needed for an admin to change their own password "status":string, //[string] [active,inactive,deleted] Active status "type":string, //[string] [normal,admin] Employee type "groupGuid":string, //[string] Group the employee belongs to "additionalGroupGuids":array,//[array] Additional guids of the groups employee belongs to, in addition to their primary group "customData":object, //[object] A custom JSON object to store with the employee "personalDetails":{ //An employee's contact and other personal details "addressLine1":string, //[string] Address Line 1 "addressLine2":string, //[string] Address Line 2 "city":string, //[string] City "countryCode":string, //[string] ISO 3166-1 Alpha 2 two character country code. "stateCode":string, //[string] Two character state or province code - only applicable to USA/Canada "postalCode":string, //[string] Zip/Postal Code "phoneHome":string, //[string] Home phone number / phone number 1 "phoneMobile":string, //[string] Mobile phone number / phone number 2 "phoneOther":string, //[string] Other phone number / phone number 3 "driversLicense":string, //[string] Zip/Postal Code "taxNumber":string, //[string] Zip/Postal Code "birthday":string, //[string] Employee's date of birth "privateNotes":string //[string] undefined }, "employmentDetails":{ //An employee's employement details "startDate":string, //[string] Employment start date "endDate":string //[string] Employment end date }, "settings":{ //An employee's customized settings "phone":{ //Phone specific settings "clockInReport":string,//[string] [required,optional,disabled] Is a report required on clock in "clockOutReport":string,//[string] [required,optional,disabled] Is a report required on clock out "pinType":string, //[string] [none,custom] Type of phone pin that is configured. ['none', 'custom']. 'custom' means the employee must enter their phonePin when clocking in by phone or SMS "pin":string //[string] Phone or SMS numeric PIN code - must be digits only. }, "web":{ //Web specific settings "clockInReport":string,//[string] [required,optional,disabled] Is a report required on clock in "clockOutReport":string//[string] [required,optional,disabled] Is a report required on clock out }, "gpsSettings":{ //GPS specific settings "basicGeoTagging":string//[string] [enabled,disabled] Collect GPS coordinates on clock in and out on supported mobile devices (Mobile Web/App) }, "location":{ //Employee GEO Tagging Settings "web":{ //Web browser based geo location - mobile browser "tagInOut":string, //[string] [enabled,disabled] GEO tag when employee clocks in/out "accuracy":integer, //[integer] When looking for a gps location, stop when a position with this level of accuracy is found "timeout":integer //[integer] When looking for a gps location, stop after this many seconds }, "app":{ //App based geo location - iOS App, Android App, etc... "tagInOut":string, //[string] [enabled,disabled] GEO tag when employee clocks in/out "accuracy":integer, //[integer] When looking for a gps location, stop when a position with this level of accuracy is found "timeout":integer, //[integer] When looking for a gps location, stop after this many seconds "continuousTracking":string//[string] [enabled,disabled] GEO Tag at regular intervals during employee's shift. Can be taxing on battery life. }, "network":{ //App based geo location - iOS App, Android App, etc... "tagInOut":string, //[string] [always,sometimes,disabled] GEO tag when employee clocks in/out "frequency":integer //[integer] When tagInOut is set to sometimes, events will randomly be tagged using network location using this frequency as a % } }, "permissions":{ //Employee access permissions "canViewOwnTimeSheet":boolean,//[boolean] Employee can view their own timesheet "canEditOwnTimeSheet":boolean,//[boolean] Employee can edit their own timesheet "activityNotes":string,//[string] [disabled,textOnly,textAndFiles] Employee can upload activity notes and/or files "offlineClock":boolean //[boolean] Employee can clock in or out when offline } }, "dailyBudgetMins":{ //Daily hour budgets "mon":number, //[number] undefined "tue":number, //[number] undefined "wed":number, //[number] undefined "thu":number, //[number] undefined "fri":number, //[number] undefined "sat":number, //[number] undefined "sun":number //[number] undefined } }
{ "guid": "cdcb385f-cc61-4951-adef-58dfafc59a58", "status": "active", "type": "normal", "firstName": "Walter", "middleName": "Hartwell", "lastName": "White", "fullName": "Walter Hartwell White", "phoneID": "625", "publicPhoneID": "100*625", "clockState": "clockedOut", "groupGuid": null, "additionalGroupGuids": [], "settings": { "phone": { "clockInReport": "disabled", "clockOutReport": "required", "pinType": "none" }, "web": { "clockInReport": "disabled", "clockOutReport": "required" }, "gpsSettings": { "basicGeoTagging": "disabled", "gpsAccuracyMeters": 75, "gpsTimeoutSeconds": 15, "continuousTracking": "disabled" }, "permissions": { "canViewOwnTimeSheet": true, "canEditOwnTimeSheet": false, "canViewJobDetails": false, "canViewServiceItemDetails": false, "activityNotes": "textAndFiles", "offlineClock": true, "canEditJobs": false }, "visualCustomizations": { "lists": { "render": { "employee": null, "job": null, "serviceItem": null, "customFieldListItem": null }, "sort": { "employee": null, "job": null, "serviceItem": null, "customFieldListItem": null } } }, "location": { "web": { "tagInOut": "disabled", "accuracy": 75, "usingDefaultAccuracy": true, "timeout": 15, "usingDefaultTimeout": true }, "app": { "tagInOut": "disabled", "accuracy": 75, "usingDefaultAccuracy": true, "timeout": 15, "usingDefaultTimeout": true, "continuousTracking": "disabled" } } }, "_legacyActivityParameters": null, "emailAddress": "wwhite@vericlock.com", "customData": { "nickname": "Heisenberg", "internalEmployeeID": "1" }, "personalDetails": { "addressLine1": "3828 Piermont dr", "addressLine2": null, "city": "Albuquerque", "countryCode": "US", "stateCode": "NM", "postalCode": "87111", "phoneHome": "+1-505-555-1234", "phoneMobile": "+1-505-555-9876", "phoneOther": null, "driversLicense": null, "taxNumber": null, "birthday": "1959-09-07", "iDataCode1": null, "iDataCode2": null, "iDataCode3": null, "iDataCode4": null, "iDataCode5": null }, "employmentDetails": { "startDate": "2009-09-08", "endDate": null, "payRate": null, "salary": 36000000, "jobTitle": null }, "dailyBudgetMins": { "mon": null, "tue": null, "wed": null, "thu": null, "fri": null, "sat": null, "sun": null }, "createdDate": null, "updateDate": 1696271032000, "passwordNotSet": true, "pinNotSet": true }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
employeeGuid | string | Required | Employee's guid |
{ //Employee Object, Describes an employee "phoneID":string, //[string] Numeric/touch-tone ID "firstName":string, //[string] First name "middleName":string, //[string] Middle initial (or name) "lastName":string, //[string] Last name "emailAddress":string, //[string] Email address "password":string, //[string] Password - plaintext (salted and hashed server side) "oldpassword":string, //[string] Old Password - only needed for an admin to change their own password "status":string, //[string] [active,inactive,deleted] Active status "type":string, //[string] [normal,admin] Employee type "groupGuid":string, //[string] Group the employee belongs to "additionalGroupGuids":array,//[array] Additional guids of the groups employee belongs to, in addition to their primary group "customData":object, //[object] A custom JSON object to store with the employee "personalDetails":{ //An employee's contact and other personal details "addressLine1":string, //[string] Address Line 1 "addressLine2":string, //[string] Address Line 2 "city":string, //[string] City "countryCode":string, //[string] ISO 3166-1 Alpha 2 two character country code. "stateCode":string, //[string] Two character state or province code - only applicable to USA/Canada "postalCode":string, //[string] Zip/Postal Code "phoneHome":string, //[string] Home phone number / phone number 1 "phoneMobile":string, //[string] Mobile phone number / phone number 2 "phoneOther":string, //[string] Other phone number / phone number 3 "driversLicense":string, //[string] Zip/Postal Code "taxNumber":string, //[string] Zip/Postal Code "birthday":string, //[string] Employee's date of birth "privateNotes":string //[string] undefined }, "employmentDetails":{ //An employee's employement details "startDate":string, //[string] Employment start date "endDate":string //[string] Employment end date }, "settings":{ //An employee's customized settings "phone":{ //Phone specific settings "clockInReport":string,//[string] [required,optional,disabled] Is a report required on clock in "clockOutReport":string,//[string] [required,optional,disabled] Is a report required on clock out "pinType":string, //[string] [none,custom] Type of phone pin that is configured. ['none', 'custom']. 'custom' means the employee must enter their phonePin when clocking in by phone or SMS "pin":string //[string] Phone or SMS numeric PIN code - must be digits only. }, "web":{ //Web specific settings "clockInReport":string,//[string] [required,optional,disabled] Is a report required on clock in "clockOutReport":string//[string] [required,optional,disabled] Is a report required on clock out }, "gpsSettings":{ //GPS specific settings "basicGeoTagging":string//[string] [enabled,disabled] Collect GPS coordinates on clock in and out on supported mobile devices (Mobile Web/App) }, "location":{ //Employee GEO Tagging Settings "web":{ //Web browser based geo location - mobile browser "tagInOut":string, //[string] [enabled,disabled] GEO tag when employee clocks in/out "accuracy":integer, //[integer] When looking for a gps location, stop when a position with this level of accuracy is found "timeout":integer //[integer] When looking for a gps location, stop after this many seconds }, "app":{ //App based geo location - iOS App, Android App, etc... "tagInOut":string, //[string] [enabled,disabled] GEO tag when employee clocks in/out "accuracy":integer, //[integer] When looking for a gps location, stop when a position with this level of accuracy is found "timeout":integer, //[integer] When looking for a gps location, stop after this many seconds "continuousTracking":string//[string] [enabled,disabled] GEO Tag at regular intervals during employee's shift. Can be taxing on battery life. }, "network":{ //App based geo location - iOS App, Android App, etc... "tagInOut":string, //[string] [always,sometimes,disabled] GEO tag when employee clocks in/out "frequency":integer //[integer] When tagInOut is set to sometimes, events will randomly be tagged using network location using this frequency as a % } }, "permissions":{ //Employee access permissions "canViewOwnTimeSheet":boolean,//[boolean] Employee can view their own timesheet "canEditOwnTimeSheet":boolean,//[boolean] Employee can edit their own timesheet "activityNotes":string,//[string] [disabled,textOnly,textAndFiles] Employee can upload activity notes and/or files "offlineClock":boolean //[boolean] Employee can clock in or out when offline } }, "dailyBudgetMins":{ //Daily hour budgets "mon":number, //[number] undefined "tue":number, //[number] undefined "wed":number, //[number] undefined "thu":number, //[number] undefined "fri":number, //[number] undefined "sat":number, //[number] undefined "sun":number //[number] undefined } }
{ "guid": "cdcb385f-cc61-4951-adef-58dfafc59a58", "status": "active", "type": "normal", "firstName": "Walter", "middleName": "Hartwell", "lastName": "White", "fullName": "Walter Hartwell White", "phoneID": "625", "publicPhoneID": "100*625", "clockState": "clockedOut", "groupGuid": null, "additionalGroupGuids": [], "settings": { "phone": { "clockInReport": "disabled", "clockOutReport": "required", "pinType": "none" }, "web": { "clockInReport": "disabled", "clockOutReport": "required" }, "gpsSettings": { "basicGeoTagging": "disabled", "gpsAccuracyMeters": 75, "gpsTimeoutSeconds": 15, "continuousTracking": "disabled" }, "permissions": { "canViewOwnTimeSheet": true, "canEditOwnTimeSheet": false, "canViewJobDetails": false, "canViewServiceItemDetails": false, "activityNotes": "textAndFiles", "offlineClock": true, "canEditJobs": false }, "visualCustomizations": { "lists": { "render": { "employee": null, "job": null, "serviceItem": null, "customFieldListItem": null }, "sort": { "employee": null, "job": null, "serviceItem": null, "customFieldListItem": null } } }, "location": { "web": { "tagInOut": "disabled", "accuracy": 75, "usingDefaultAccuracy": true, "timeout": 15, "usingDefaultTimeout": true }, "app": { "tagInOut": "disabled", "accuracy": 75, "usingDefaultAccuracy": true, "timeout": 15, "usingDefaultTimeout": true, "continuousTracking": "disabled" } } }, "_legacyActivityParameters": null, "emailAddress": "wwhite@vericlock.com", "customData": { "nickname": "Heisenberg", "internalEmployeeID": "1" }, "personalDetails": { "addressLine1": "3828 Piermont dr", "addressLine2": null, "city": "Albuquerque", "countryCode": "US", "stateCode": "NM", "postalCode": "87111", "phoneHome": "+1-505-555-1234", "phoneMobile": "+1-505-555-9876", "phoneOther": null, "driversLicense": null, "taxNumber": null, "birthday": "1959-09-07", "iDataCode1": null, "iDataCode2": null, "iDataCode3": null, "iDataCode4": null, "iDataCode5": null }, "employmentDetails": { "startDate": "2009-09-08", "endDate": null, "payRate": null, "salary": 36000000, "jobTitle": null }, "dailyBudgetMins": { "mon": null, "tue": null, "wed": null, "thu": null, "fri": null, "sat": null, "sun": null }, "createdDate": null, "updateDate": 1696271032000, "passwordNotSet": true, "pinNotSet": true }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
employeeGuid | string | Required | Employee's guid |
{ "guid": "cdcb385f-cc61-4951-adef-58dfafc59a58", "status": "active", "type": "normal", "firstName": "Walter", "middleName": "Hartwell", "lastName": "White", "fullName": "Walter Hartwell White", "phoneID": "625", "publicPhoneID": "100*625", "clockState": "clockedOut", "groupGuid": null, "additionalGroupGuids": [], "settings": { "phone": { "clockInReport": "disabled", "clockOutReport": "required", "pinType": "none" }, "web": { "clockInReport": "disabled", "clockOutReport": "required" }, "gpsSettings": { "basicGeoTagging": "disabled", "gpsAccuracyMeters": 75, "gpsTimeoutSeconds": 15, "continuousTracking": "disabled" }, "permissions": { "canViewOwnTimeSheet": true, "canEditOwnTimeSheet": false, "canViewJobDetails": false, "canViewServiceItemDetails": false, "activityNotes": "textAndFiles", "offlineClock": true, "canEditJobs": false }, "visualCustomizations": { "lists": { "render": { "employee": null, "job": null, "serviceItem": null, "customFieldListItem": null }, "sort": { "employee": null, "job": null, "serviceItem": null, "customFieldListItem": null } } }, "location": { "web": { "tagInOut": "disabled", "accuracy": 75, "usingDefaultAccuracy": true, "timeout": 15, "usingDefaultTimeout": true }, "app": { "tagInOut": "disabled", "accuracy": 75, "usingDefaultAccuracy": true, "timeout": 15, "usingDefaultTimeout": true, "continuousTracking": "disabled" } } }, "_legacyActivityParameters": null, "emailAddress": "wwhite@vericlock.com", "customData": { "nickname": "Heisenberg", "internalEmployeeID": "1" }, "personalDetails": { "addressLine1": "3828 Piermont dr", "addressLine2": null, "city": "Albuquerque", "countryCode": "US", "stateCode": "NM", "postalCode": "87111", "phoneHome": "+1-505-555-1234", "phoneMobile": "+1-505-555-9876", "phoneOther": null, "driversLicense": null, "taxNumber": null, "birthday": "1959-09-07", "iDataCode1": null, "iDataCode2": null, "iDataCode3": null, "iDataCode4": null, "iDataCode5": null }, "employmentDetails": { "startDate": "2009-09-08", "endDate": null, "payRate": null, "salary": 36000000, "jobTitle": null }, "dailyBudgetMins": { "mon": null, "tue": null, "wed": null, "thu": null, "fri": null, "sat": null, "sun": null }, "createdDate": null, "updateDate": 1696271032000, "passwordNotSet": true, "pinNotSet": true }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
jobGuid | string | Required | Job's guid |
budgetType | string | Required | Type of job cost report Valid Values: [allTime, monthly, weekly, daily, payroll] |
{ "totalDollars": 1650, "totalHours": 24.25, "hasTimeGuard": false, "missingRatesByPayrollItem": [ { "_payrollItem": { "Regular": true }, "employeeFullName": "Walter White", "employeeGuid": "5c235f53-2222-3333-4444-abc6ec86ed77", "payrollItems": [ "Regular" ] } ], "missingPayrollItemsByTimeType": [] }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
groupGuid | string | Required | Group's guid |
{ "guid": "19d9fd56-b893-4391-6ebe-f1d93e1c2c7e", "name": "Sales Team", "description": "", "employees": [ "...employees in group list..." ] }
{ //A time sheet query object describes what time data to retrieve "searchPeriod":{ //Search time frame "start":string, //(Required)[string] Search period begins at this date-time "end":string, //(Required)[string] Search period ends at this date-time "searchType":string, //[string] [inOutTimeInclusive,inTimeInclusive,inOrOutTimeInclusive] Changes how search interprets start and end time ranges. inTimeInclusive will only consider a clock event's clock in time, inOutTimeInclusive will consider both the clock in time AND out time, both must be in the search window, and 'inOrOutTimeInclusive' either the clock event's start or end time must be within the search window. Default is 'inOutTimeInclusive' "includeInProgressEvents":boolean//[boolean] Include clock events of employees still clocked in - duration, cost, etc will assume a time up to the current moment }, "applyScheduledDeductions":boolean,//[boolean] Apply the scheduled time deductions to all events "activeFilter":string, //[string] [active,deleted,all] Allows the inclusive of deleted events as well or exclusively. Default is 'active' "approvedFilter":string, //[string] [all,approved,unapproved] Filter for only approved timesheet entries. One of ['all','approved','unapproved']. Default is 'all' "employeeList":array, //[array] Array of employee guid's "groupList":array, //[array] Array of group guid's "jobList":array, //[array] Array of job guid's "includeEmployeeIds":array,//[array] undefined "excludeEmployeeIds":array,//[array] undefined "includeGroupIds":array, //[array] undefined "excludeGroupIds":array, //[array] undefined "includeJobIds":array, //[array] undefined "excludeJobIds":array, //[array] undefined "includeServiceItemIds":array,//[array] undefined "excludeServiceItemIds":array,//[array] undefined "includeDeletedCustomFields":boolean,//[boolean] Include custom field data attached to the clock event even if the custom field has been deleted "requestExtraData":{ //Data returned will be minimal unless additional fields or objects are requested "reportsIn":boolean, //[boolean] Include clock in reports for each clock event "reportsOut":boolean, //[boolean] Include clock out reports for each clock event "customFieldsIn":boolean,//[boolean] Include clock in custom field data for each clock event "customFieldsOut":boolean,//[boolean] Include clock out custom field data for each clock event "editEmployee":boolean, //[boolean] Include the last employee to edit each clock event "editReport":boolean, //[boolean] Include all edit notes for each clock event "webInfoIn":boolean, //[boolean] Include clock in details for web clocks if available. IP, Browser, etc... "phoneInfoIn":boolean, //[boolean] Include clock in details for phone clocks if available. Caller ID, etc... "smsInfoIn":boolean, //[boolean] Include clock in details for sms clocks if available. Caller ID, etc... "appInfoIn":boolean, //[boolean] Include clock in details for app clocks if available. IP, Device, etc... "gpsInfoIn":boolean, //[boolean] Include clock in GPS info if available. Lat, Lng, etc... "webInfoOut":boolean, //[boolean] Include clock out details for web clocks if available. IP, Browser, etc... "phoneInfoOut":boolean, //[boolean] Include clock out details for phone clocks if available. Caller ID, etc... "smsInfoOut":boolean, //[boolean] Include clock out details for sms clocks if available. Caller ID, etc... "appInfoOut":boolean, //[boolean] Include clock out details for app clocks if available. IP, Device, etc... "gpsInfoOut":boolean //[boolean] Include clock out GPS info if available. Lat, Lng, etc... }, "reportType":string //[string] Custom report or not? }
[ { "guid": "3ee38c93-57a2-4dc5-88d2-8a8da8942e36", "rootGuid": "3ee38c93-57a2-4dc5-88d2-8a8da8942e36", "employeeGuid": "a920cd77-f821-4b3d-970a-8d52a95f90de", "jobGuid": "7a2b4528-e941-4ccc-928d-618862c5acf6", "jobCode": null, "jobName": null, "serviceItemGuid": null, "serviceItemCode": null, "serviceItemName": null, "serviceRatePennies": 0, "start": "2009-01-01T08:05:00.000Z", "end": "2009-01-01T17:49:00.000Z", "duration": 584, "clockInReportId": null, "inDetails": { "method": "phone", "report": { "type": "audio", "url": "https://url.to.the.report/mp3/or/wav" }, "callerID": "+15055551234", "calledNumber": "+15055550000", "callLength": "37" }, "clockOutReportId": null, "outDetails": { "method": "web", "report": { "type": "text", "value": "Lab session went perfectly" }, "ipAddress": "192.168.0.25", "userAgent": "chrome browser" }, "deleted": false, "flags": 10, "gpsFlags": 0, "updateDate": null, "flagged": { "accessControlCallerIDClockIn": true }, "approved": true }, { "guid": "f8a988e9-1b1a-449b-a5c5-a8998af1d654", "rootGuid": "f8a988e9-1b1a-449b-a5c5-a8998af1d654", "employeeGuid": "c065b294-3ad3-48d3-9945-3eaedd255a69", "jobGuid": "23cb69e4-1ebe-48e1-8eff-ca31cb69aba1", "jobCode": null, "jobName": null, "serviceItemGuid": null, "serviceItemCode": null, "serviceItemName": null, "serviceRatePennies": 0, "start": "2009-02-01T08:27:00.000Z", "end": "2009-02-01T12:12:00.000Z", "duration": 225, "clockInReportId": null, "inDetails": { "method": "sms", "callerID": "+15055551234", "calledNumber": "+15055550000", "rawSMS": "in 625 100" }, "clockOutReportId": null, "outDetails": { "method": "mobileWeb", "ipAddress": "192.168.0.119", "userAgent": "iphone/safari browser", "geoTagging": { "latitude": "49.264585002149", "longitude": "-123.12476435135", "accuracy": 25 } }, "deleted": false, "flags": 42, "gpsFlags": 0, "updateDate": null, "flagged": { "accessControlCallerIDClockIn": true, "jobRulesAssignmentMismatch": true }, "approved": true }, { "guid": "f8a988e9-1b1a-449b-a5c5-a8998af1d654", "rootGuid": "f8a988e9-1b1a-449b-a5c5-a8998af1d654", "employeeGuid": "6de68d2e-559e-49ab-a468-7c2d5d73c161", "jobGuid": "e369f0f4-29d2-4594-ac57-95d78b577425", "jobCode": null, "jobName": null, "serviceItemGuid": null, "serviceItemCode": null, "serviceItemName": null, "serviceRatePennies": 0, "start": "2009-02-01T08:27:00.000Z", "end": "2009-02-01T12:12:00.000Z", "duration": 225, "clockInReportId": null, "inDetails": { "method": "phone", "callerID": "+15055551234", "calledNumber": "+15055550000" }, "clockOutReportId": null, "outDetails": { "method": "phone", "callerID": "+15055551234", "calledNumber": "+15055550000" }, "deleted": false, "flags": 24, "gpsFlags": 0, "updateDate": null, "flagged": { "accessControlCallerIDClockIn": true, "accessControlCallerIDClockOut": true } } ]
{ "guid":string, //[string] Payroll Item's guid "status":string,array //[string,array] Payroll Item's status }
{ //PayrollItem Object. Describes a payroll item "name":string, //(Required)[string] Name for the payroll item. "description":string, //[string] Description of the payroll item. "status":string, //[string] [active,inactive,deleted] Payroll item's active status "type":string, //[string] [hourly,overtime,salary] Payroll item's pay type "linkedGuid":string, //[string] Guid of linked payroll item "multiplier":number //[number] Multiplier for the payroll item rate. This is only valid if linkedGuid is valid }
{ "guid": "934cbe42-5dae-4d9f-bd1e-3d3dd58dd1bf", "name": "Painting overtime", "description": "Overtime payroll for painting", "status": "active", "type": "hourly", "linkedGuid": null, "linkedName": null, "multiplier": null, "createdDate": "2023-10-02T18:23:52.000Z" }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
guid | string | Required | Payroll item's guid |
{ //PayrollItem Object. Describes a payroll item "name":string, //[string] Name for the payroll item. "description":string, //[string] Description of the payroll item. "status":string, //[string] [active,inactive,deleted] Payroll item's active status "type":string, //[string] [hourly,overtime,salary] Payroll item's pay type "linkedGuid":string, //[string] Guid of linked payroll item "multiplier":number //[number] Multiplier for the payroll item rate. This is only valid if linkedGuid is valid }
{ "guid": "934cbe42-5dae-4d9f-bd1e-3d3dd58dd1bf", "name": "Painting overtime", "description": "Overtime payroll for painting", "status": "active", "type": "hourly", "linkedGuid": null, "linkedName": null, "multiplier": null, "createdDate": "2023-10-02T18:23:52.000Z" }
{ "payType":integer, //[integer] Pay type "jobGuid":string, //[string] Job's guid "serviceItemGuid":string, //[string] Service item's guid "employeeGuid":string, //[string] Employee's guid "groupGuid":string, //[string] Group's guid "payrollItemGuid":string //[string] Payroll item's guid }
{ "payType":integer, //(Required)[integer] Pay type "jobGuid":string, //(Required)[string] Job's guid "serviceItemGuid":string, //(Required)[string] Service item's guid "employeeGuid":string, //(Required)[string] Employee's guid "groupGuid":string, //(Required)[string] Group's guid "payrollItemGuid":string //(Required)[string] Payroll item's guid }
{ "payType":integer, //(Required)[integer] Pay type "jobGuid":string, //(Required)[string] Job's guid "serviceItemGuid":string, //(Required)[string] Service item's guid "employeeGuid":string, //(Required)[string] Employee's guid "groupGuid":string, //(Required)[string] Group's guid "payrollItemGuid":string //(Required)[string] Payroll item's guid }
{ "employeeGuid":string //(Required)[string] Employee's guid }
{ "clockEventGuid":string, //(Required)[string] Clock event's guid "originalFileName":string, //(Required)[string] Original file name from user "description":string //[string] Description of picture }
{ "clockEventGuid":string, //[string] Clock event's root guid "employeeGuid":string, //[string] Employee's guid "jobGuid":string, //[string] Job's guid "startDate":string, //[string] Search period begins at this date-time (UTC) "endDate":string //[string] Search period ends at this date-time (UTC) }
[ { "guid": "8e153f4f-37ba-4657-8105-dbc661e02942", "createDate": "2020-12-08T19:37:48.000Z", "fileURL": "https://s3.amazonaws.com/CustomerClockEventFilesDev/xxxxxxxxxxxx.png", "fileSize": 113167, "fileType": "Image", "metadata": { "fileName": "xxxxxxxxxxxxx.png", "originalFileName": "floorplan.png", "description": "Floor plan of the garage - note the window placement" }, "clockEventRootGuid": "dd7a0a7e-f579-439a-840a-16e9f07d9423", "employeeGuid": "95cfc3d1-684c-4048-89d6-4b7c1de572a2", "employeeName": "Jane Smith", "jobGuid": "992f59bf-7f4c-4f43-adfa-f2eb0f91b277", "jobName": "Garage Inspection - 556" } ]
{ "fileGuid":string //(Required)[string] File's guid }
{ "guidList":array //(Required)[array] undefined }
{ "clockEventGuid":string, //(Required)[string] Clock event's guid "report":string //(Required)[string] Report description }
{ "clockEventGuid":string, //[string] Clock event's root guid "employeeGuid":string, //[string] Employee's guid "jobGuid":string, //[string] Job's guid "startDate":string, //[string] Search period begins at this date-time (UTC) "endDate":string //[string] Search period ends at this date-time (UTC) }
[ { "guid": "24d4d179-2bf9-474c-b2c8-2a79ed8853db", "createDate": "2020-12-08T20:09:31.000Z", "report": "Roof needs a closer inspection next visit", "clockEventRootGuid": "dd7a0a7e-f579-439a-840a-16e9f07d9423", "employeeGuid": "95cfc3d1-684c-4048-89d6-4b7c1de572a2", "employeeName": "Jane Smith", "jobGuid": "992f59bf-7f4c-4f43-adfa-f2eb0f91b277", "jobName": "Garage Inspection - 556" } ]
{ "reportGuid":string //(Required)[string] Report's guid }
{ "guidList":array //(Required)[array] undefined }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
jobGuid | string | Required | The GUID of the job this rule will apply to or 'global' for the global rules |
{ "permission":string, //(Required)[string] [allow,deny] Permission type "flagOnly":boolean, //[boolean] Flag Only - if true, clocks matching rule are not blocked, but are instead flagged only "phoneNumber":string, //[string] Phone number for the rule, blank for generic base case. International format. "notes":string //[string] Short description about the phone number }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
jobGuid | string | Optional | The GUID of the job this rule will apply to - use 'global' to refer to the global rules. Leave empty to retrieve all rules. |
Parameter | Type | Required | Optional | Description |
---|---|---|---|
jobGuid | string | Optional | The GUID of the job this rule will apply to - use 'global' to refer to the global rules. |
{ "phoneNumber":string //[string] Phone number for the rule, blank for generic base case, wildcard * for entire rule. International format. }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
jobGuid | string | Required | The GUID of the job this rule will apply to or 'global' for the global rules |
{ "permission":string, //(Required)[string] [allow,deny] Permission type "flagOnly":boolean, //[boolean] Flag Only - if true, clocks matching rule are not blocked, but are instead flagged only "ipAddress":string, //[string] IP Address for the rule, blank for generic base case, wildcard * for entire rule.. "notes":string //[string] Short description about the IP address }
Parameter | Type | Required | Optional | Description |
---|---|---|---|
jobGuid | string | Optional | The GUID of the job this rule will apply to - use 'global' to refer to the global rules. Leave empty to retrieve all rules. |
Parameter | Type | Required | Optional | Description |
---|---|---|---|
jobGuid | string | Optional | The GUID of the job this rule will apply to - use 'global' to refer to the global rules. |
{ "ipAddress":string //[string] IP Address for the rule, blank for generic base case, wildcard * for entire rule.. }
{ "employeeGuids":array, //(Required)[array] List of employees guids "jobGuid":string, //[string] Job guid "serviceItemGuid":string, //[string] Service item guid "report":string, //[string] A text clock in report to be attached to the clock event "returnClockRootId":boolean//[boolean] undefined }
{ "23930782-390b-439f-88b6-7576593b3c6f": true, "9583b0b8-7eda-42ec-bbf0-7cdc8a7c48b8": true, "390bb0b8-439f-490b-7576-239307824324": false }
{ "employeeGuids":array, //(Required)[array] List of employees guids "report":string, //[string] A text clock out report to be attached to the clock event "flags":integer //[integer] undefined }
{ "23930782-390b-439f-88b6-7576593b3c6f": true, "9583b0b8-7eda-42ec-bbf0-7cdc8a7c48b8": true, "390bb0b8-439f-490b-7576-239307824324": false }
function _validateSignature($privateKey, $data, $signature) { $sig = hash_hmac('sha256', $data, $privateKey); return ($sig === $signature); }