API Docsbeta
Please submit all support requests to help@vericlock.com

Overview

The VeriClock API is a RESTful API. All requests are either HTTP GET or POSTs and are directed at the VeriClock API endpoint:
https://api.vericlock.com
Currently all API actions are done in the context of a VeriClock user and are limited and restricted by the users specific set of permissions. For example a user that is an administrator has full API access. A user that is a regular employee will only be able to clock in/out, not be able to create jobs or employees, etc...

Request Format

All API requests must contain the following HTTP Headers:
HeaderDescription 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.
All JSON object parameters, unless specified as [Required] can be considered optional and omitted if desired.

VeriClock Signature

The private key is a binary representation of your account's 16 byte private key. In your account, the keys are displayed as guid's for visual convenience only.
IMPORTAN! The path is the part of an API call after the hostname AND /api prefix ie.
Full url: https://api.vericlock.com/api/1.0/employee/query
path for HMAC: /1.0/employee/query
private function _generateSignature($path, $privateKey, $bodyStr)
{
    $hashStr = $path . $bodyStr;
    $sig = hash_hmac('sha256', $hashStr, $privateKey);
    return $sig;
}
                    

Response Format

The HTTP Response code will indicate whether the request was successful or not. 2xx responses indicate success. 4xx responses indicate some sort of user error, and the response JSON object will have more information. 5xx is an error on our side, and again the response JSON object may have additional information.

All content in the response body will be a JSON object related to the API request made. Usually a JSON object or JSON array.

Idempotency

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.

Activity Notes - Files

File activity notes

Authentication

Most API functions require authentication to occur first.
Authenticate
Description
Login & Authenticate with VeriClock's servers.
HTTP POST

https://api.vericlock.com/1.0/auth

Post Body

{
  "user":string,             //(Required) employee email address
  "password":string          //(Required) plain text password
}

Response

{
  "authToken": "d35b1486-43ca-42bb-828d-9f35bc4be2d4"
}
Logout
Description
Purposely invalidate your authentication token - otherwise it will invalidate naturally due to inactivity
HTTP POST

https://api.vericlock.com/api/1.0/logout

Post Details

Empty

Employee

Methods for creating, updating and retrieving employees.
Get Employee
Description
Get a specific employee by guid
HTTP GET

https://api.vericlock.com/api/1.0/employee/:employeeGuid

URI Parameters

Parameter Type Required | Optional Description
employeeGuid string Required Employee's guid

Group

Methods for clocking groups in and out of the service.
Get a Group by guid
Description
Get a Group by guid
HTTP GET

https://api.vericlock.com/api/1.0/group/:groupGuid

URI Parameters

Parameter Type Required | Optional Description
groupGuid string Required Group's guid

Response

{
  "guid": "19d9fd56-b893-4391-6ebe-f1d93e1c2c7e",
  "name": "Sales Team",
  "description": "",
  "employees": [
    "...employees in group list..."
  ]
}

Payroll

Gets the payroll items
Description
Gets the payroll items
HTTP POST

https://api.vericlock.com/api/1.0/payroll/query

Post Body

{
  "guid":string,             // Payroll Item's guid
  "status":string,array      // Payroll Item's status
}
Create payroll item
Description
Creates a new payroll item. Returns the newly created payroll item on success.
HTTP POST

https://api.vericlock.com/api/1.0/payroll/create

Post Body

{                            //PayrollItem Object. Describes a payroll item
  "name":string,             //(Required) Name for the payroll item.
  "description":string,      // Description of the payroll item.
  "status":string,           // [active,inactive,deleted] Payroll item's active status
  "type":string,             // [hourly,overtime,salary] Payroll item's pay type
  "linkedGuid":string,       // Guid of linked payroll item
  "multiplier":number        // Multiplier for the payroll item rate. This is only valid if linkedGuid is valid
}

Response

{
  "guid": "b365a304-0b4f-4fdf-8093-f98200a50ab6",
  "name": "Painting overtime",
  "description": "Overtime payroll for painting",
  "status": "active",
  "type": "hourly",
  "linkedGuid": null,
  "linkedName": null,
  "multiplier": null,
  "createdDate": "2026-09-03T23:36:12.000Z",
  "updateSyncId": 0
}
Update payroll items
Description
Update a payroll item with the posted payroll item object. The posted payroll item may be incomplete, only set fields will be updated.
HTTP POST

https://api.vericlock.com/api/1.0/payroll/:guid/update

URI Parameters

Parameter Type Required | Optional Description
guid string Required Payroll item's guid

Post Body

{                            //PayrollItem Object. Describes a payroll item
  "name":string,             // Name for the payroll item.
  "description":string,      // Description of the payroll item.
  "status":string,           // [active,inactive,deleted] Payroll item's active status
  "type":string,             // [hourly,overtime,salary] Payroll item's pay type
  "linkedGuid":string,       // Guid of linked payroll item
  "multiplier":number        // Multiplier for the payroll item rate. This is only valid if linkedGuid is valid
}

Response

{
  "guid": "b365a304-0b4f-4fdf-8093-f98200a50ab6",
  "name": "Painting overtime",
  "description": "Overtime payroll for painting",
  "status": "active",
  "type": "hourly",
  "linkedGuid": null,
  "linkedName": null,
  "multiplier": null,
  "createdDate": "2026-09-03T23:36:12.000Z",
  "updateSyncId": 0
}
Notes
* Some fields are not directly changeable such as guid
Gets payroll item rules
Description
Gets the list of payroll item rules
HTTP POST

https://api.vericlock.com/api/1.0/payroll/queryRules

Post Body

{
  "payType":integer,         // Pay type
  "jobGuid":string,          // Job's guid
  "serviceItemGuid":string,  // Service item's guid
  "employeeGuid":string,     // Employee's guid
  "groupGuid":string,        // Group's guid
  "payrollItemGuid":string   // Payroll item's guid
}
Creates a payroll item rule
Description
Creates a payroll item rule
HTTP POST

https://api.vericlock.com/api/1.0/payroll/createRule

Post Body

{
  "payType":integer,         //(Required) Pay type
  "jobGuid":string,          //(Required) Job's guid
  "serviceItemGuid":string,  //(Required) Service item's guid
  "employeeGuid":string,     //(Required) Employee's guid
  "groupGuid":string,        //(Required) Group's guid
  "payrollItemGuid":string   //(Required) Payroll item's guid
}
Delete a payroll item rule
Description
Delete a payroll item rule
HTTP POST

https://api.vericlock.com/api/1.0/payroll/deleteRule

Post Body

{
  "payType":integer,         //(Required) Pay type
  "jobGuid":string,          //(Required) Job's guid
  "serviceItemGuid":string,  //(Required) Service item's guid
  "employeeGuid":string,     //(Required) Employee's guid
  "groupGuid":string,        //(Required) Group's guid
  "payrollItemGuid":string   //(Required) Payroll item's guid
}
Queries payroll info for specified employee
Description
Queries payroll info for specified employee
HTTP POST

https://api.vericlock.com/api/1.0/payroll/queryPayrollInfo

Post Body

{
  "employeeGuid":string      //(Required) Employee's guid
}

Settings - Clock Access Control

Methods for changing the clock in/out access control settings
Get caller ID Access Rule
Description
Retrieves all or a specific caller ID access rule referenced by URI parameter :jobGuid
HTTP GET

https://api.vericlock.com/api/1.0/settings/accessControl/callerID
Removes a caller ID access rule
Description
URI parameter :jobGuid refers to the rule to be deleted.
HTTP DELETE

https://api.vericlock.com/api/1.0/settings/accessControl/callerID/:jobGuid

Post Body

{
  "phoneNumber":undefined    // 
}
Create IP Address Access Rule
Description
Creates/updates a IP Address access rule for job referenced by URI parameter :jobGuid
HTTP POST

https://api.vericlock.com/api/1.0/settings/accessControl/ipAddress/:jobGuid

Post Body

{
  "permission":undefined,    // [allow,deny] 
  "flagOnly":boolean,        // 
  "ipAddress":undefined,     // 
  "notes":string             // 
}
Get IP Address Access Rule
Description
Retrieves all or a specific IP Address access rule referenced by URI parameter :jobGuid
HTTP GET

https://api.vericlock.com/api/1.0/settings/accessControl/ipAddress
Removes an IP Address access rule
Description
URI parameter :jobGuid refers to the rule to be deleted.
HTTP DELETE

https://api.vericlock.com/api/1.0/settings/accessControl/ipAddress/:jobGuid

Post Body

{
  "ipAddress":undefined      // 
}

Timesheet (Legacy Endpoints)

Methods for retrieving time data.
Time Sheet Query
Description
Retrieve all clock events that match the posted search criteria
HTTP POST

https://api.vericlock.com/api/1.0/timesheet/query

Post Body

{                            //A time sheet query object describes what time data to retrieve
  "searchPeriod":{           //Search time frame
    "start":string,          //(Required) Search period begins at this date-time
    "end":string,            //(Required) Search period ends at this date-time
    "searchType":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// Include clock events of employees still clocked in - duration, cost, etc will assume a time up to the current moment
  },
  "applyScheduledDeductions":boolean,// Apply the scheduled time deductions to all events
  "activeFilter":string,     // [active,deleted,all] Allows the inclusive of deleted events as well or exclusively. Default is 'active'
  "approvedFilter":string,   // [all,approved,unapproved] Filter for only approved timesheet entries. One of ['all','approved','unapproved']. Default is 'all'
  "employeeList":array,      // Array of employee guid's
  "groupList":array,         // Array of group guid's
  "jobList":array,           // Array of job guid's
  "includeEmployeeIds":array,// 
  "excludeEmployeeIds":array,// 
  "includeGroupIds":array,   // 
  "excludeGroupIds":array,   // 
  "includeJobIds":array,     // 
  "excludeJobIds":array,     // 
  "includeServiceItemIds":array,// 
  "excludeServiceItemIds":array,// 
  "includeDeletedCustomFields":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,     // Include clock in reports for each clock event
    "reportsOut":boolean,    // Include clock out reports for each clock event
    "customFieldsIn":boolean,// Include clock in custom field data for each clock event
    "customFieldsOut":boolean,// Include clock out custom field data for each clock event
    "editEmployee":boolean,  // Include the last employee to edit each clock event
    "editReport":boolean,    // Include all edit notes for each clock event
    "webInfoIn":boolean,     // Include clock in details for web clocks if available. IP, Browser, etc...
    "phoneInfoIn":boolean,   // Include clock in details for phone clocks if available. Caller ID, etc...
    "smsInfoIn":boolean,     // Include clock in details for sms clocks if available. Caller ID, etc...
    "appInfoIn":boolean,     // Include clock in details for app clocks if available. IP, Device, etc...
    "gpsInfoIn":boolean,     // Include clock in GPS info if available. Lat, Lng, etc...
    "webInfoOut":boolean,    // Include clock out details for web clocks if available. IP, Browser, etc...
    "phoneInfoOut":boolean,  // Include clock out details for phone clocks if available. Caller ID, etc...
    "smsInfoOut":boolean,    // Include clock out details for sms clocks if available. Caller ID, etc...
    "appInfoOut":boolean,    // Include clock out details for app clocks if available. IP, Device, etc...
    "gpsInfoOut":boolean     // Include clock out GPS info if available. Lat, Lng, etc...
  },
  "reportType":string        // Custom report or not?
}

Response

[
  {
    "guid": "20bc4cb7-bbbd-4bd2-bc01-47ecd93038f9",
    "rootGuid": "20bc4cb7-bbbd-4bd2-bc01-47ecd93038f9",
    "employeeGuid": "669616da-43c6-4e82-8078-8c6af13fa363",
    "jobGuid": "f0e63769-112f-4dcc-9f1e-0e1310a1489f",
    "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": "321410fc-7196-44f1-9cb4-fd1e6922ea0b",
    "rootGuid": "321410fc-7196-44f1-9cb4-fd1e6922ea0b",
    "employeeGuid": "7dda44ce-9efb-4d75-87e8-53c31fcdfccb",
    "jobGuid": "24e0739c-e12a-419f-b9c9-62740f374fd5",
    "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": "321410fc-7196-44f1-9cb4-fd1e6922ea0b",
    "rootGuid": "321410fc-7196-44f1-9cb4-fd1e6922ea0b",
    "employeeGuid": "0f1a113a-38bc-43ef-ae11-3cb0b6952fb8",
    "jobGuid": "d875abb8-b0f8-4082-89e3-1a64e9ccef25",
    "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
    }
  }
]
Notes
duration: in minutes inDetails.method: 'phone', 'sms', 'web', 'mobileWeb', 'edit', 'manualEntry'

Timesheet (New Endpoints)

Methods for retrieving time data.
Get Timesheet Entries
Description
Retrieves a array of TimesheetEntry objects based on a search query
HTTP POST

https://api.vericlock.com/api/1.0/timesheet/entries/query

Post Body

{
  "searchPeriod":{
    "start":DateTime(string),// Start date and time in UTC
    "end":DateTime(string)   // End date and time in UTC
  },
  "employeeGuids":ApiGuid(string)[]// Employee GUIDs to filter by
}
Get Timesheet Entry
Description
Retrieves a clock event entry by instance guid (not root guid)
HTTP POST

https://api.vericlock.com/api/1.0/timesheet/entry/get

Post Body

{
  "eventGuid":ApiGuid(string)// The GUID of the time sheet entry to retrieve
}
Create Timesheet Entry
Description
Creates a clock event entry
HTTP POST

https://api.vericlock.com/api/1.0/timesheet/entry/create

Post Body

{
  "event":{
    "employeeGuid":ApiGuid(string),// The GUID of the employee associated with this time sheet entry
    "jobGuid":ApiGuidNullable,// The GUID of the job associated with this time sheet entry or null if not set
    "serviceItemGuid":ApiGuidNullable,// The GUID of the service item associated with this time sheet entry or null if not set
    "start":DateTime(string),// The start time of the clock event in ISO format. For example: '2024-01-01T08:00:00Z'. This should be in UTC time.
    "end":DateTimeOrNull,    // The end time of the clock event in ISO format. For example: '2024-01-01T17:00:00Z'. This should be in UTC time.
    "durationMinutes":integer,// If the event is duration only this is the duration in minutes.
    "clockInMethod":string,  // [phone,web,mobileWeb,api,edit,sms,manualEntry,machine,kiosk] The method by which the clock in event was recorded. For example, 'manualEntry' for an event created manually.
    "clockOutMethod":string, // [,phone,web,mobileWeb,api,edit,sms,manualEntry,machine,kiosk] The method by which the clock out event was recorded. For example, 'manualEntry' for an event created manually. This can be null if the employee has not clocked out yet or if the event is duration only.
    "inReport":string,       // Optional report for clocking in
    "inCustomFieldData":Array of either 1 of 3 definitions {
      "type":"string",       // The value is "string" to denote a custom field of type string
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "value":string         // The string value of the custom field
    },Array of either 2 of 3 definitions {
      "type":"number",       // The value is "number" to denote a custom field of type number
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "value":number         // The numeric value of the custom field
    },Array of either 3 of 3 definitions {
      "type":"list",         // The value is "list" to denote a custom field of type list
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "listItemValue":number,// The numeric value of the selected list item for the custom field
      "listItemName":string, // The name of the selected list item for the custom field
      "listItemGuid":ApiGuid(string)// The guid of the selected list item for the custom field
    },// Optional custom field data for clocking in. This should be an array of objects.
    "outReport":string,      // Optional report for clocking out
    "outCustomFieldData":Array of either 1 of 3 definitions {
      "type":"string",       // The value is "string" to denote a custom field of type string
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "value":string         // The string value of the custom field
    },Array of either 2 of 3 definitions {
      "type":"number",       // The value is "number" to denote a custom field of type number
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "value":number         // The numeric value of the custom field
    },Array of either 3 of 3 definitions {
      "type":"list",         // The value is "list" to denote a custom field of type list
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "listItemValue":number,// The numeric value of the selected list item for the custom field
      "listItemName":string, // The name of the selected list item for the custom field
      "listItemGuid":ApiGuid(string)// The guid of the selected list item for the custom field
    },// Optional custom field data for clocking out. This should be an array of objects.
    "editNotes":string       // Optional notes for edits to the time sheet entry, such as reasons for changes
  },
  "overwriteSignatureRequests":boolean// Whether to overwrite signature requests when updating an existing entry with a new one. If true, any existing signature requests for the entry will be deleted and new ones will be created based on the current entry data. 
}
Update Timesheet Entry
Description
Edits a clock event entry
HTTP POST

https://api.vericlock.com/api/1.0/timesheet/entry/update

Post Body

{
  "event":{
    "employeeGuid":ApiGuid(string),// The GUID of the employee associated with this time sheet entry
    "jobGuid":ApiGuidNullable,// The GUID of the job associated with this time sheet entry or null if not set
    "serviceItemGuid":ApiGuidNullable,// The GUID of the service item associated with this time sheet entry or null if not set
    "start":DateTime(string),// The start time of the clock event in ISO format. For example: '2024-01-01T08:00:00Z'. This should be in UTC time.
    "end":DateTimeOrNull,    // The end time of the clock event in ISO format. For example: '2024-01-01T17:00:00Z'. This should be in UTC time.
    "durationMinutes":integer,// If the event is duration only this is the duration in minutes.
    "clockInMethod":string,  // [phone,web,mobileWeb,api,edit,sms,manualEntry,machine,kiosk] The method by which the clock in event was recorded. For example, 'manualEntry' for an event created manually.
    "clockOutMethod":string, // [,phone,web,mobileWeb,api,edit,sms,manualEntry,machine,kiosk] The method by which the clock out event was recorded. For example, 'manualEntry' for an event created manually. This can be null if the employee has not clocked out yet or if the event is duration only.
    "inReport":string,       // Optional report for clocking in
    "inCustomFieldData":Array of either 1 of 3 definitions {
      "type":"string",       // The value is "string" to denote a custom field of type string
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "value":string         // The string value of the custom field
    },Array of either 2 of 3 definitions {
      "type":"number",       // The value is "number" to denote a custom field of type number
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "value":number         // The numeric value of the custom field
    },Array of either 3 of 3 definitions {
      "type":"list",         // The value is "list" to denote a custom field of type list
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "listItemValue":number,// The numeric value of the selected list item for the custom field
      "listItemName":string, // The name of the selected list item for the custom field
      "listItemGuid":ApiGuid(string)// The guid of the selected list item for the custom field
    },// Optional custom field data for clocking in. This should be an array of objects.
    "outReport":string,      // Optional report for clocking out
    "outCustomFieldData":Array of either 1 of 3 definitions {
      "type":"string",       // The value is "string" to denote a custom field of type string
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "value":string         // The string value of the custom field
    },Array of either 2 of 3 definitions {
      "type":"number",       // The value is "number" to denote a custom field of type number
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "value":number         // The numeric value of the custom field
    },Array of either 3 of 3 definitions {
      "type":"list",         // The value is "list" to denote a custom field of type list
      "guid":ApiGuid(string),// The guid of the custom field type
      "name":string,         // The name of the custom field
      "listItemValue":number,// The numeric value of the selected list item for the custom field
      "listItemName":string, // The name of the selected list item for the custom field
      "listItemGuid":ApiGuid(string)// The guid of the selected list item for the custom field
    },// Optional custom field data for clocking out. This should be an array of objects.
    "editNotes":string,      // Optional notes for edits to the time sheet entry, such as reasons for changes
    "deleted":boolean,       // Whether the time sheet entry is deleted
    "guid":ApiGuid(string)   // The GUID of the time sheet entry to update
  },
  "overwriteSignatureRequests":boolean// Whether to overwrite signature requests when updating an existing entry with a new one. If true, any existing signature requests for the entry will be deleted and new ones will be created based on the current entry data. 
}

Webhooks

function _validateSignature($privateKey, $data, $signature)
{
    $sig = hash_hmac('sha256', $data, $privateKey);
    return ($sig === $signature);
}
                    
  • $privateKey is binary.
  • $data is the URI ('/' if blank) concatenated with the request body
  • $signature is the HEX string in the http header: VERICLOCK_SIGNATURE