Skip to content
ClockLap Developers
API reference clocklap.com Get an API key

API reference

Expenses

16 endpoints. Click one to see its parameters, fields and an example. Code samples use the region you pick.

GET/v1/expensesExpenses you can see (your own; managers and report runners: everyone in scope), waiting ones first, with totals

Expenses you can see (your own; managers and report runners: everyone in scope), waiting ones first, with totals

Query parameters

NameTypeDescription
fromstring
tostring
statusstring or array of stringStatuses: submitted, approved, rejected, reimbursed
user_idsstring or array of string
location_idsstring or array of stringSites (and everything under them)
project_idsstring or array of string'_none' = no project
customer_idsstring or array of stringClients; '_none' = no client
category_idsstring or array of string
billableboolean
invoicedbooleantrue: billed on a live invoice; false: not billed yet
kind"standard" | "mileage"
minebooleanOnly your own
searchstring
limitinteger
cursorstring

Example

curl "https://ca-api.clocklap.com/v1/expenses" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY"

Responses

200

POST/v1/expensesSubmit an expense (yours, or for someone you manage). Idempotent on id. The amount is worked out from quantity × rate or a distance where the category says so.

Submit an expense (yours, or for someone you manage). Idempotent on id. The amount is worked out from quantity × rate or a distance where the category says so.

Body (JSON)

NameTypeDescription
idstring
user_idstring
daterequiredstring
category_idrequiredstring
descriptionstring or null
amount_centsinteger
tax_centsinteger or null
quantitynumber or null
unitstring or null
unit_rate_centsnumber or null
distancenumber
distance_minteger
fromstring or null
tostring or null
routearray of object or null
location_idstring or null
project_idstring or null
customer_idstring or null
time_entry_idstring or null
billableboolean
receipt_idsarray of string
original_currencystring (20 values) or null
original_amount_centsinteger or null
exchange_ratenumber or null

Example

curl -X POST "https://ca-api.clocklap.com/v1/expenses" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"date":"2026-10-26","category_id":"cat_01J…"}'

Responses

200

GET/v1/expenses/{id}Get one expense

Get one expense

Path parameters

NameTypeDescription
idrequiredstring

Example

curl "https://ca-api.clocklap.com/v1/expenses/{id}" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY"

Responses

200

PATCH/v1/expenses/{id}Change an expense that isn't approved yet. Fixing a rejected one sends it back for approval. receipt_ids replaces the receipts.

Change an expense that isn't approved yet. Fixing a rejected one sends it back for approval. receipt_ids replaces the receipts.

Path parameters

NameTypeDescription
idrequiredstring

Body (JSON)

NameTypeDescription
datestring
category_idstring
descriptionstring or null
amount_centsinteger
tax_centsinteger or null
quantitynumber or null
unitstring or null
unit_rate_centsnumber or null
distancenumber
distance_minteger
fromstring or null
tostring or null
routearray of object or null
location_idstring or null
project_idstring or null
customer_idstring or null
time_entry_idstring or null
billableboolean
receipt_idsarray of string
original_currencystring (20 values) or null
original_amount_centsinteger or null
exchange_ratenumber or null

Example

curl -X PATCH "https://ca-api.clocklap.com/v1/expenses/{id}" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Responses

200

DELETE/v1/expenses/{id}Remove an expense that isn't approved yet

Remove an expense that isn't approved yet

Path parameters

NameTypeDescription
idrequiredstring

Example

curl -X DELETE "https://ca-api.clocklap.com/v1/expenses/{id}" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY"

Responses

200

POST/v1/expenses/{id}/decisionApprove, or reject with a reason

Approve, or reject with a reason

Path parameters

NameTypeDescription
idrequiredstring

Body (JSON)

NameTypeDescription
decisionrequired"approve" | "reject"
reasonstring

Example

curl -X POST "https://ca-api.clocklap.com/v1/expenses/{id}/decision" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"decision":"approve","reason":"string"}'

Responses

200

POST/v1/expenses/{id}/reopenUndo an approval so the expense can be fixed (not once it's billed or paid back)

Undo an approval so the expense can be fixed (not once it's billed or paid back)

Path parameters

NameTypeDescription
idrequiredstring

Example

curl -X POST "https://ca-api.clocklap.com/v1/expenses/{id}/reopen" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY"

Responses

200

POST/v1/expenses/approveApprove several expenses; ones that can't be approved are listed with the reason

Approve several expenses; ones that can't be approved are listed with the reason

Body (JSON)

NameTypeDescription
idsrequiredarray of string

Example

curl -X POST "https://ca-api.clocklap.com/v1/expenses/approve" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids":["string"]}'

Responses

200

GET/v1/expenses/categoriesList categories

List categories

Query parameters

NameTypeDescription
include_archivedboolean

Example

curl "https://ca-api.clocklap.com/v1/expenses/categories" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY"

Responses

200

POST/v1/expenses/categoriesCreate a category

Create a category

Body (JSON)

NameTypeDescription
namerequiredstring
kind"standard" | "mileage" Default "standard"
billableboolean Default false
unitstring or null
rate_centsnumber or null
positioninteger

Example

curl -X POST "https://ca-api.clocklap.com/v1/expenses/categories" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Example"}'

Responses

200

PATCH/v1/expenses/categories/{id}Rename, change the rate or unit, reorder, or archive (archived: true) a category

Rename, change the rate or unit, reorder, or archive (archived: true) a category

Path parameters

NameTypeDescription
idrequiredstring

Example

curl -X PATCH "https://ca-api.clocklap.com/v1/expenses/categories/{id}" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Responses

200

POST/v1/expenses/mileageA mileage expense from a distance in metres (a recorded trip), at the workspace mileage rate. The same trip_id returns the expense already made.

A mileage expense from a distance in metres (a recorded trip), at the workspace mileage rate. The same trip_id returns the expense already made.

Body (JSON)

NameTypeDescription
user_idstring
daterequiredstring
distance_mrequiredinteger
project_idstring or null
location_idstring or null
time_entry_idstring or null
fromstring or null
tostring or null
trip_idstring or null
routearray of object or null
descriptionstring or null

Example

curl -X POST "https://ca-api.clocklap.com/v1/expenses/mileage" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"date":"2026-10-26","distance_m":1}'

Responses

200

POST/v1/expenses/reimburseMark approved expenses as paid back, with the date and a reference

Mark approved expenses as paid back, with the date and a reference

Body (JSON)

NameTypeDescription
idsrequiredarray of string
datestring
referencestring or null

Example

curl -X POST "https://ca-api.clocklap.com/v1/expenses/reimburse" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids":["string"],"date":"2026-10-26","reference":"string"}'

Responses

200

GET/v1/expenses/reportExpense totals grouped by person, project, client, category, status, site or month

Expense totals grouped by person, project, client, category, status, site or month

Query parameters

NameTypeDescription
fromstring
tostring
statusstring or array of stringStatuses: submitted, approved, rejected, reimbursed
user_idsstring or array of string
location_idsstring or array of stringSites (and everything under them)
project_idsstring or array of string'_none' = no project
customer_idsstring or array of stringClients; '_none' = no client
category_idsstring or array of string
billableboolean
invoicedbooleantrue: billed on a live invoice; false: not billed yet
kind"standard" | "mileage"
minebooleanOnly your own
searchstring
group_by"member" | "project" | "customer" | "category" | "status" | "location" | "month" Default "member"

Example

curl "https://ca-api.clocklap.com/v1/expenses/report" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY"

Responses

200

GET/v1/expenses/settingsMileage unit and rate (with CRA / IRS presets), the receipt threshold and the categories

Mileage unit and rate (with CRA / IRS presets), the receipt threshold and the categories

Example

curl "https://ca-api.clocklap.com/v1/expenses/settings" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY"

Responses

200

PATCH/v1/expenses/settingsChange the mileage rate (or pick a preset), distance unit or receipt threshold

Change the mileage rate (or pick a preset), distance unit or receipt threshold

Body (JSON)

NameTypeDescription
distance_unit"km" | "mi"
mileage_rate_centsnumber
mileage_presetstring or null
receipt_required_over_centsinteger or null

Example

curl -X PATCH "https://ca-api.clocklap.com/v1/expenses/settings" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"distance_unit":"km","mileage_rate_cents":2500,"mileage_preset":"string","receipt_required_over_cents":2500}'

Responses

200