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
| Name | Type | Description |
|---|---|---|
from | string | |
to | string | |
status | string or array of string | Statuses: submitted, approved, rejected, reimbursed |
user_ids | string or array of string | |
location_ids | string or array of string | Sites (and everything under them) |
project_ids | string or array of string | '_none' = no project |
customer_ids | string or array of string | Clients; '_none' = no client |
category_ids | string or array of string | |
billable | boolean | |
invoiced | boolean | true: billed on a live invoice; false: not billed yet |
kind | "standard" | "mileage" | |
mine | boolean | Only your own |
search | string | |
limit | integer | |
cursor | string |
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)
| Name | Type | Description |
|---|---|---|
id | string | |
user_id | string | |
daterequired | string | |
category_idrequired | string | |
description | string or null | |
amount_cents | integer | |
tax_cents | integer or null | |
quantity | number or null | |
unit | string or null | |
unit_rate_cents | number or null | |
distance | number | |
distance_m | integer | |
from | string or null | |
to | string or null | |
route | array of object or null | |
location_id | string or null | |
project_id | string or null | |
customer_id | string or null | |
time_entry_id | string or null | |
billable | boolean | |
receipt_ids | array of string | |
original_currency | string (20 values) or null | |
original_amount_cents | integer or null | |
exchange_rate | number 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
| Name | Type | Description |
|---|---|---|
idrequired | string |
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
| Name | Type | Description |
|---|---|---|
idrequired | string |
Body (JSON)
| Name | Type | Description |
|---|---|---|
date | string | |
category_id | string | |
description | string or null | |
amount_cents | integer | |
tax_cents | integer or null | |
quantity | number or null | |
unit | string or null | |
unit_rate_cents | number or null | |
distance | number | |
distance_m | integer | |
from | string or null | |
to | string or null | |
route | array of object or null | |
location_id | string or null | |
project_id | string or null | |
customer_id | string or null | |
time_entry_id | string or null | |
billable | boolean | |
receipt_ids | array of string | |
original_currency | string (20 values) or null | |
original_amount_cents | integer or null | |
exchange_rate | number 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
| Name | Type | Description |
|---|---|---|
idrequired | string |
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
| Name | Type | Description |
|---|---|---|
idrequired | string |
Body (JSON)
| Name | Type | Description |
|---|---|---|
decisionrequired | "approve" | "reject" | |
reason | string |
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
| Name | Type | Description |
|---|---|---|
idrequired | string |
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)
| Name | Type | Description |
|---|---|---|
idsrequired | array 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
| Name | Type | Description |
|---|---|---|
include_archived | boolean |
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)
| Name | Type | Description |
|---|---|---|
namerequired | string | |
kind | "standard" | "mileage" | Default "standard" |
billable | boolean | Default false |
unit | string or null | |
rate_cents | number or null | |
position | integer |
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
| Name | Type | Description |
|---|---|---|
idrequired | string |
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)
| Name | Type | Description |
|---|---|---|
user_id | string | |
daterequired | string | |
distance_mrequired | integer | |
project_id | string or null | |
location_id | string or null | |
time_entry_id | string or null | |
from | string or null | |
to | string or null | |
trip_id | string or null | |
route | array of object or null | |
description | string 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)
| Name | Type | Description |
|---|---|---|
idsrequired | array of string | |
date | string | |
reference | string 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
| Name | Type | Description |
|---|---|---|
from | string | |
to | string | |
status | string or array of string | Statuses: submitted, approved, rejected, reimbursed |
user_ids | string or array of string | |
location_ids | string or array of string | Sites (and everything under them) |
project_ids | string or array of string | '_none' = no project |
customer_ids | string or array of string | Clients; '_none' = no client |
category_ids | string or array of string | |
billable | boolean | |
invoiced | boolean | true: billed on a live invoice; false: not billed yet |
kind | "standard" | "mileage" | |
mine | boolean | Only your own |
search | string | |
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)
| Name | Type | Description |
|---|---|---|
distance_unit | "km" | "mi" | |
mileage_rate_cents | number | |
mileage_preset | string or null | |
receipt_required_over_cents | integer 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