Create project expense
Create a new expense for a project or a task, either amount-based or unit-based.
/expenses
Parameters
| Name |
Required |
Type/Format |
Description |
| projectId |
yes |
String |
Project ID |
| userId |
yes |
String |
User who created the expense |
| expenseCategoryId |
yes |
String |
Expense category ID (defines amount-based or unit-based rules) |
| expenseDate |
yes |
YYYY-MM-DD |
Date of expense |
| name |
yes |
String |
Expense name (short title) |
| reimbursementStatus |
yes |
Integer |
Reimbursement status (see constants below) |
| amount |
no |
Number |
Amount-based expense value (use only for amount-based categories) |
| units |
no |
Float |
Units for unit-based expense (use only for unit-based categories) |
| comments |
no |
String |
Optional notes or comments |
| taskId |
no |
String |
Related task ID (optional) |
Response
Sample response →
{
"amount": null,
"approvalStatus": 0,
"comments": "some comment",
"expenseCategoryId": "EXPENSE_CATEGORY_ID",
"expenseDate": "2026-04-02",
"id": "EXPENSE_ID",
"momentCreated": "2026-04-02T14:39:07.095086",
"name": "Test expense",
"projectId": "PROJECT_ID",
"reimbursementStatus": 0,
"taskId": null,
"units": 100,
"userId": "USER_ID"
}
Get expense
Retrieve a single expense by ID.
/expense/EXPENSE-ID
Response
Sample response →
{
"amount": 1000,
"approvalStatus": 0,
"comments": "some comment",
"expenseCategoryId": "EXPENSE_CATEGORY_ID",
"expenseDate": "2026-04-02",
"id": "EXPENSE_ID",
"momentCreated": "2026-04-02T14:39:07.095086",
"name": "Expense",
"projectId": "PROJECT_ID",
"reimbursementStatus": 0,
"taskId": null,
"units": null,
"userId": "USER_ID"
}
Get expense categories
Retrieve a list of expense categories. The approvalStatus and reimbursement
fields are the default statuses applied to expenses created under the category, and use the same Approval/Reimbursement status enums described below.
/expenses/categories
Response
Sample response →
[
{
"approvalStatus": 0,
"id": "EXPENSE_CATEGORY_ID",
"name": "Consulting",
"reimbursement": 0,
"systemType": 2,
"unitName": "hour",
"unitPrice": 13
}
]
Get project expenses
Retrieve a list of expenses for a project.
/project/PROJECT-ID/expenses
Response
Sample response →
[
{
"amount": null,
"approvalStatus": 0,
"comments": "some comment",
"expenseCategoryId": "EXPENSE_CATEGORY_ID",
"expenseDate": "2026-04-02",
"id": "EXPENSE_ID",
"momentCreated": "2026-04-02T14:39:07.095086",
"name": "Expense",
"projectId": "PROJECT_ID",
"reimbursementStatus": 0,
"taskId": null,
"units": 100,
"userId": "USER_ID"
}
]
Constants
Supported constants for expense-related fields.
Approval status
| Value |
Name |
Description |
| 0 |
PENDING |
Waiting for approval; no decision made yet |
| 1 |
APPROVED |
Approved and accepted |
| 2 |
REJECTED |
Rejected and not accepted |
Reimbursement status
| Value |
Name |
Description |
| 0 |
NOT_REIMBURSABLE |
Not eligible for reimbursement |
| 1 |
PENDING |
Reimbursement requested and pending |
| 2 |
REIMBURSED |
Reimbursed to the user |
| 3 |
REJECTED |
Reimbursement rejected |
Expense category system type
| Value |
Name |
Description |
| 1 |
AMOUNT_BASED |
Amount-based expense; use the amount field |
| 2 |
UNIT_BASED |
Unit-based expense; use the units field |