PSOHub API: Expenses
Learn how to retrieve and create expense entries in PSOhub via the API
Published: 1 June 2026
Audience
-
Admin
Objective
This reference article covers the PSOhub API endpoints for retrieving and creating expense entries. Use these endpoints to query expenses for a project or user and to create new expense entries programmatically in PSOhub.
Prerequisites
Eligible access
You must have Admin user access in PSOhub.
API enabled
You must have API access enabled for your PSOhub account.
ProjectID, ContractLineID & AccountID
To create an expense, the ProjectID, ContractLineID, and AccountID must be known. These can be retrieved via the relevant API endpoints or from the PSOhub OData feed.
Get All Expenses
Use this endpoint to retrieve expense entries filtered by project and/or user:
Endpoint
GET https://www.psohubapp.com/rest/psohubapi/v1/expenses?projectid=693467340
Use the limit parameter to control the number of records returned. If not specified, the API returns 50 expenses by default.
⚠️ Important: Expenses are always connected to both a project and a user. You must filter on at least one of the two parameters (projectid or accountid) for the request to be valid.
Example response
json
[ { "AccountID": 39406496739494241, "ProjectID": 13229323905419233, "ContractLineID": 7036874417785905, "ProjectName": "Apple App Development", "ContractLineName": "20.002 - Expenses", "Description": "NYC hotel", "AmountExVAT": 991.73553719, "VATAmount": 208.26446281, "TotalAmount": 1200 }, { "AccountID": 39406496739494241, "ProjectID": 13229323905421635, "ContractLineID": 7036874417787659, "ProjectName": "Development Website and Marketing Automation", "ContractLineName": "90.001 - Travel Expenses", "Description": "nyc - amsterdam", "AmountExVAT": 743.80165289, "VATAmount": 156.19834711, "TotalAmount": 900 } ]
Response fields
| Name | Type | Description |
|---|---|---|
| AccountID | Integer/Long | The unique ID of the user who submitted the expense. |
| ProjectID | Integer/Long | The ID of the project the expense is linked to. |
| ContractLineID | Integer/Long | The ID of the contract line the expense is posted to. |
| ProjectName | String | The name of the project, for easy reference. |
| ContractLineName | String | The name of the contract line, for easy reference. |
| Description | String | The description the user added for the expense. |
| AmountExVAT | Decimal | The expense amount excluding VAT. |
| VATAmount | Decimal | The VAT amount applied to the expense. |
| TotalAmount | Decimal | The total expense amount including VAT. |
Create an Expense
Use this endpoint to create a new expense entry on a project:
Endpoint
POST https://www.psohubapp.com/rest/psohubapi/v1/expenses
Request fields
| Name | Required | Type | Description |
|---|---|---|---|
| AccountID | Yes | Integer/Long | The unique ID of the user submitting the expense. |
| ProjectID | Yes | Integer/Long | The ID of the project the expense belongs to. |
| ContractLineID | Yes | Integer/Long | The ID of the contract line to post the expense to. |
| Description | No | String | An optional description for the expense. |
| AmountExVAT | Yes | Decimal | The expense amount excluding VAT. |
| VATAmount | No | Decimal | The VAT amount applicable to the expense. |
| TotalAmount | Yes | Decimal | The total expense amount including VAT. |
| ExpenseDate | Yes | DateTime | The date the expense was incurred. |
📌 Note: The request fields, endpoint URL, and required fields above are a best-effort draft based on the expense data model. The dev team must confirm the correct create endpoint and all field names before this section is published.
Example request body
json
{ "AccountID": 39406496739494241, "ProjectID": 13229323905419233, "ContractLineID": 7036874417785905, "Description": "NYC hotel", "AmountExVAT": 991.74, "VATAmount": 208.26, "TotalAmount": 1200, "ExpenseDate": "2024-09-23T00:00:00.000Z" }
Response
On success, the API returns the unique ID of the created expense entry.
json
{ "ExpenseID": "expense-id-returned-here" }