Developer docs menu

API reference / Expenses

Expenses API

27 endpoints. Scopes: Scalar360.expenses.READ, .CREATE, .UPDATE, .DELETE or .ALL. All calls need Authorization: Scalar360-oauthtoken <access_token> — see Authentication.

GET

List

/api/v1/expenses

Scope: Scalar360.expenses.READ

ParameterInTypeRequired
scopequerystring (default mine)No
statusquerystringNo
qquerystringNo
startDatequerystring (date)No
endDatequerystring (date)No
pagequeryintegerNo
pageSizequeryintegerNo
sortByquerystringNo
sortDirquerystringNo
Example request
curl -X GET "https://api.scalar360.com/api/v1/expenses" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create

/api/v1/expenses

Scope: Scalar360.expenses.CREATE

Body fieldTypeRequiredNotes
titlestringYesrequired, not blank
notesstring
reimburseViaPayrollboolean
projectIdstring (uuid)
customerIdstring (uuid)
itemsarray of object
items[].categoryIdstring (uuid)
items[].expenseDatestring (date)
items[].merchantstring
items[].descriptionstring
items[].amountnumber
items[].gstRatenumber
items[].paidViastring
items[].billableboolean
items[].projectIdstring (uuid)
items[].customerIdstring (uuid)
items[].isMileageboolean
items[].distanceKmnumber
items[].ratePerKmnumber
items[].receiptObjectKeystring
items[].receiptNamestring
items[].receiptContentTypestring
items[].receiptSizeinteger
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string"}'
GET

Get

/api/v1/expenses/{id}

Scope: Scalar360.expenses.READ

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/expenses/{id}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update

/api/v1/expenses/{id}

Scope: Scalar360.expenses.UPDATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Body fieldTypeRequiredNotes
titlestringYesrequired, not blank
notesstring
reimburseViaPayrollboolean
projectIdstring (uuid)
customerIdstring (uuid)
itemsarray of object
items[].categoryIdstring (uuid)
items[].expenseDatestring (date)
items[].merchantstring
items[].descriptionstring
items[].amountnumber
items[].gstRatenumber
items[].paidViastring
items[].billableboolean
items[].projectIdstring (uuid)
items[].customerIdstring (uuid)
items[].isMileageboolean
items[].distanceKmnumber
items[].ratePerKmnumber
items[].receiptObjectKeystring
items[].receiptNamestring
items[].receiptContentTypestring
items[].receiptSizeinteger
Example request
curl -X PUT "https://api.scalar360.com/api/v1/expenses/{id}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","notes":"string","reimburseViaPayroll":true,"projectId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","customerId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","items":[{"categoryId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","expenseDate":"2026-10-12","merchant":"string","description":"string","amount":100,"gstRate":100}]}'
DELETE

Delete

/api/v1/expenses/{id}

Scope: Scalar360.expenses.DELETE

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/expenses/{id}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Approve

/api/v1/expenses/{id}/approve

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Body fieldTypeRequiredNotes
notestring
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/{id}/approve" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"string"}'
POST

Cancel

/api/v1/expenses/{id}/cancel

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/{id}/cancel" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Finance approve

/api/v1/expenses/{id}/finance-approve

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Body fieldTypeRequiredNotes
notestring
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/{id}/finance-approve" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"string"}'
POST

Reimburse

/api/v1/expenses/{id}/reimburse

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Body fieldTypeRequiredNotes
modestring
referencestring
datestring (date)
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/{id}/reimburse" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"string","reference":"string","date":"2026-10-12"}'
POST

Reject

/api/v1/expenses/{id}/reject

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Body fieldTypeRequiredNotes
notestring
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/{id}/reject" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"string"}'
POST

Submit

/api/v1/expenses/{id}/submit

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/{id}/submit" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

List

/api/v1/expenses/approval-workflows

Scope: Scalar360.expenses.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/expenses/approval-workflows" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create

/api/v1/expenses/approval-workflows

Scope: Scalar360.expenses.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired, not blank
minAmountnumber
isDefaultboolean
activeboolean
levelsarray of object
levels[].approverUserIdstring
levels[].approverNamestring
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/approval-workflows" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
PUT

Update

/api/v1/expenses/approval-workflows/{id}

Scope: Scalar360.expenses.UPDATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired, not blank
minAmountnumber
isDefaultboolean
activeboolean
levelsarray of object
levels[].approverUserIdstring
levels[].approverNamestring
Example request
curl -X PUT "https://api.scalar360.com/api/v1/expenses/approval-workflows/{id}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","minAmount":100,"isDefault":true,"active":true,"levels":[{"approverUserId":"string","approverName":"string"}]}'
DELETE

Delete

/api/v1/expenses/approval-workflows/{id}

Scope: Scalar360.expenses.DELETE

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/expenses/approval-workflows/{id}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
GET

Dashboard

/api/v1/expenses/dashboard

Scope: Scalar360.expenses.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/expenses/dashboard" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Upload receipt

/api/v1/expenses/receipts

Scope: Scalar360.expenses.CREATE

Request body: multipart/form-data with a file field.

Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/receipts" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -F "file=@/path/to/file"
GET

List

/api/v1/expenses/recurring

Scope: Scalar360.expenses.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/expenses/recurring" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Create

/api/v1/expenses/recurring

Scope: Scalar360.expenses.CREATE

Body fieldTypeRequiredNotes
namestringYesrequired
categoryIdstring (uuid)
merchantstring
descriptionstring
amountnumber
gstRatenumber
paidThroughstring
billableboolean
customerIdstring (uuid)
projectIdstring (uuid)
frequencystring
startDatestring (date)
endDatestring (date)
neverExpiresboolean
nextDatestring (date)
activeboolean
notesstring
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/recurring" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
GET

Get

/api/v1/expenses/recurring/{id}

Scope: Scalar360.expenses.READ

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X GET "https://api.scalar360.com/api/v1/expenses/recurring/{id}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update

/api/v1/expenses/recurring/{id}

Scope: Scalar360.expenses.UPDATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired
categoryIdstring (uuid)
merchantstring
descriptionstring
amountnumber
gstRatenumber
paidThroughstring
billableboolean
customerIdstring (uuid)
projectIdstring (uuid)
frequencystring
startDatestring (date)
endDatestring (date)
neverExpiresboolean
nextDatestring (date)
activeboolean
notesstring
Example request
curl -X PUT "https://api.scalar360.com/api/v1/expenses/recurring/{id}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","categoryId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","merchant":"string","description":"string","amount":100,"gstRate":100}'
DELETE

Delete

/api/v1/expenses/recurring/{id}

Scope: Scalar360.expenses.DELETE

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X DELETE "https://api.scalar360.com/api/v1/expenses/recurring/{id}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Generate

/api/v1/expenses/recurring/{id}/generate

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/recurring/{id}/generate" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

Toggle

/api/v1/expenses/recurring/{id}/toggle

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
idpathstring (uuid)Yes
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/recurring/{id}/toggle" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
POST

From claim

/api/v1/expenses/recurring/from-claim/{claimId}

Scope: Scalar360.expenses.CREATE

ParameterInTypeRequired
claimIdpathstring (uuid)Yes
Body fieldTypeRequiredNotes
namestringYesrequired
categoryIdstring (uuid)
merchantstring
descriptionstring
amountnumber
gstRatenumber
paidThroughstring
billableboolean
customerIdstring (uuid)
projectIdstring (uuid)
frequencystring
startDatestring (date)
endDatestring (date)
neverExpiresboolean
nextDatestring (date)
activeboolean
notesstring
Example request
curl -X POST "https://api.scalar360.com/api/v1/expenses/recurring/from-claim/{claimId}" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'
GET

Get settings

/api/v1/expenses/settings

Scope: Scalar360.expenses.READ

Example request
curl -X GET "https://api.scalar360.com/api/v1/expenses/settings" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"
PUT

Update settings

/api/v1/expenses/settings

Scope: Scalar360.expenses.UPDATE

Example request
curl -X PUT "https://api.scalar360.com/api/v1/expenses/settings" \
  -H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'