API reference / Bills
Bills API
17 endpoints. Scopes: Scalar360.bills.READ, .CREATE, .UPDATE, .DELETE or .ALL. All calls need Authorization: Scalar360-oauthtoken <access_token> — see Authentication.
List bills
/api/v1/bills
Scope: Scalar360.bills.READ
| Parameter | In | Type | Required |
|---|---|---|---|
status | query | string | No |
vendorId | query | string (uuid) | No |
startDate | query | string (date) | No |
endDate | query | string (date) | No |
q | query | string | No |
page | query | integer | No |
pageSize | query | integer | No |
sortBy | query | string | No |
sortDir | query | string | No |
curl -X GET "https://api.scalar360.com/api/v1/bills" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Create bill
/api/v1/bills
Scope: Scalar360.bills.CREATE
| Body field | Type | Required | Notes |
|---|---|---|---|
vendorId | string (uuid) | Yes | |
purchaseOrderId | string (uuid) | ||
billNumber | string | max length 50 | |
vendorBillNumber | string | max length 50 | |
billDate | string (date) | Yes | |
dueDate | string (date) | ||
notes | string | ||
items | array of object | Yes | required, not empty |
items[].itemName | string | Yes | required, not blank, max length 200 |
items[].description | string | ||
items[].quantity | number | Yes | required, >= 0.01 |
items[].unit | string | ||
items[].rate | number | Yes | required, >= 0.01 |
items[].taxRate | number | >= 0 | |
items[].discountPercent | number | >= 0 | |
items[].glAccountId | string (uuid) |
curl -X POST "https://api.scalar360.com/api/v1/bills" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"vendorId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","billDate":"2026-10-12","items":[{"itemName":"string","description":"string","quantity":100,"unit":"string","rate":100,"taxRate":100}]}'Get bill
/api/v1/bills/{id}
Scope: Scalar360.bills.READ
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
curl -X GET "https://api.scalar360.com/api/v1/bills/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Update bill
/api/v1/bills/{id}
Scope: Scalar360.bills.UPDATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
vendorId | string (uuid) | ||
purchaseOrderId | string (uuid) | ||
billNumber | string | max length 50 | |
vendorBillNumber | string | max length 50 | |
billDate | string (date) | ||
dueDate | string (date) | ||
notes | string | ||
items | array of object | Yes | required, not empty |
items[].itemName | string | Yes | required, not blank, max length 200 |
items[].description | string | ||
items[].quantity | number | Yes | required, >= 0.01 |
items[].unit | string | ||
items[].rate | number | Yes | required, >= 0.01 |
items[].taxRate | number | >= 0 | |
items[].discountPercent | number | >= 0 | |
items[].glAccountId | string (uuid) |
curl -X PUT "https://api.scalar360.com/api/v1/bills/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"vendorId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","purchaseOrderId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","billNumber":"string","vendorBillNumber":"string","billDate":"2026-10-12","dueDate":"2026-10-12"}'Delete bill
/api/v1/bills/{id}
Scope: Scalar360.bills.DELETE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
reason | query | string | No |
| Body field | Type | Required | Notes |
|---|---|---|---|
cancellationDate | string (date) | ||
reason | string | Yes | required, not blank, max length 500 |
curl -X DELETE "https://api.scalar360.com/api/v1/bills/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cancellationDate":"2026-10-12","reason":"string"}'Cancel bill
/api/v1/bills/{id}/cancel
Scope: Scalar360.bills.CREATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
cancellationDate | string (date) | ||
reason | string | Yes | required, not blank, max length 500 |
curl -X POST "https://api.scalar360.com/api/v1/bills/{id}/cancel" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reason":"string"}'Record payment
/api/v1/bills/{id}/payments
Scope: Scalar360.bills.CREATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
amount | number | > 0 | |
method | string | ||
reference | string | ||
date | string (date) |
curl -X POST "https://api.scalar360.com/api/v1/bills/{id}/payments" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"amount":100,"method":"string","reference":"string","date":"2026-10-12"}'/api/v1/bills/{id}/pdf
Scope: Scalar360.bills.READ
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
curl -X GET "https://api.scalar360.com/api/v1/bills/{id}/pdf" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Update status
/api/v1/bills/{id}/status
Scope: Scalar360.bills.UPDATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
status | query | string | Yes |
curl -X PATCH "https://api.scalar360.com/api/v1/bills/{id}/status" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"List
/api/v1/bills/recurring
Scope: Scalar360.bills.READ
curl -X GET "https://api.scalar360.com/api/v1/bills/recurring" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Create
/api/v1/bills/recurring
Scope: Scalar360.bills.CREATE
| Body field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | required |
vendorId | string (uuid) | ||
dueDays | integer | ||
frequency | string | ||
startDate | string (date) | ||
endDate | string (date) | ||
neverExpires | boolean | ||
nextDate | string (date) | ||
active | boolean | ||
notes | string | ||
items | array of object | ||
items[].itemName | string | Yes | required |
items[].description | string | ||
items[].quantity | number | ||
items[].unit | string | ||
items[].rate | number | ||
items[].taxRate | number | ||
items[].discountPercent | number | ||
items[].glAccountId | string (uuid) |
curl -X POST "https://api.scalar360.com/api/v1/bills/recurring" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"string"}'Get
/api/v1/bills/recurring/{id}
Scope: Scalar360.bills.READ
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
curl -X GET "https://api.scalar360.com/api/v1/bills/recurring/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Update
/api/v1/bills/recurring/{id}
Scope: Scalar360.bills.UPDATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | required |
vendorId | string (uuid) | ||
dueDays | integer | ||
frequency | string | ||
startDate | string (date) | ||
endDate | string (date) | ||
neverExpires | boolean | ||
nextDate | string (date) | ||
active | boolean | ||
notes | string | ||
items | array of object | ||
items[].itemName | string | Yes | required |
items[].description | string | ||
items[].quantity | number | ||
items[].unit | string | ||
items[].rate | number | ||
items[].taxRate | number | ||
items[].discountPercent | number | ||
items[].glAccountId | string (uuid) |
curl -X PUT "https://api.scalar360.com/api/v1/bills/recurring/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"string","vendorId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","dueDays":1,"frequency":"string","startDate":"2026-10-12","endDate":"2026-10-12"}'Delete
/api/v1/bills/recurring/{id}
Scope: Scalar360.bills.DELETE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
curl -X DELETE "https://api.scalar360.com/api/v1/bills/recurring/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Generate
/api/v1/bills/recurring/{id}/generate
Scope: Scalar360.bills.CREATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
curl -X POST "https://api.scalar360.com/api/v1/bills/recurring/{id}/generate" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Toggle
/api/v1/bills/recurring/{id}/toggle
Scope: Scalar360.bills.CREATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
curl -X POST "https://api.scalar360.com/api/v1/bills/recurring/{id}/toggle" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"From bill
/api/v1/bills/recurring/from-bill/{billId}
Scope: Scalar360.bills.CREATE
| Parameter | In | Type | Required |
|---|---|---|---|
billId | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | required |
vendorId | string (uuid) | ||
dueDays | integer | ||
frequency | string | ||
startDate | string (date) | ||
endDate | string (date) | ||
neverExpires | boolean | ||
nextDate | string (date) | ||
active | boolean | ||
notes | string | ||
items | array of object | ||
items[].itemName | string | Yes | required |
items[].description | string | ||
items[].quantity | number | ||
items[].unit | string | ||
items[].rate | number | ||
items[].taxRate | number | ||
items[].discountPercent | number | ||
items[].glAccountId | string (uuid) |
curl -X POST "https://api.scalar360.com/api/v1/bills/recurring/from-bill/{billId}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"string"}'