Billable Portfolios
A billable portfolio is a portfolio that is associated with a specific fee schedule. A billable portfolio can be a household, client, legal entity, or group. Use the Billable Portfolios API to view and add portfolios, edit their fee schedules, archive portfolios, and restore archived portfolios.
| Base route | /v1/billable_portfolios |
| Endpoints | GET /v1/billable_portfolios/:id /v1/billable_portfolios POST /v1/billable_portfolios PATCH /v1/billable_portfolios/:id/relationships/fee_schedules /v1/billable_portfolios/relationships/fee_schedules DELETE /v1/billable_portfolios/:id/relationships/fee_schedules /v1/billable_portfolios/relationships/fee_schedules |
| Produces | JSON |
| Pagination | Yes |
| Application permissions required | "Run and manage bills, include fee adjustment and payment tracking" or "Full access to Billing and billing data" |
| OAuth scopes | BILLING_WRITE |
Resource overview
Arguments are described by the below resource object attributes and will appear in successful POST responses.
| Attribute | Description | Example |
|---|---|---|
id | The billable portfolio's ID. List of integers. | [1234, 5678] |
Parameters
| Parameter | Description | Example |
|---|---|---|
entity_id | The ID of the entity that is a billable portfolio. You can only use either entity_id or group_id per request, not both. | 1234 |
group_id | The ID of the group that is a billable portfolio. You can only use either entity_id or group_id per request, not both. | 4567 |
schedule_id | The ID of the associated fee schedule . | 9101 |
is_archived | A boolean flag showing if the billable portfolio is archived. Only available on get requests. | true |
last_modified | The time that the portfolio was last modified. Only available on get requests. | 2026-05-10T14:30:00Z |
Get a billable portfolio
Get a single billable portfolio setup by it's id.
GET /v1/billable_portfolios/:id
Example:
GET https://examplefirm.addepar.com/api/v1/billable_portfolios/12345
HTTP/1.1 200
{
"data": {
"type": "billable_portfolios",
"id": "12345",
"attributes": {
"entity_id": 67890,
"group_id": null,
"schedule_id": 111
"is_archived": false,
"last_modified": "2026-05-10T14:30:00Z"
}
}
}
Response codes:
200 OK: Success403 Forbidden: Insufficient application permissions or appropriate scope not granted404 Not Found: Billable Portfolio does not exist
Get billable portfolios
Get multiple billable portfolio setups.
GET /v1/billable_portfolios
Example:
GET https://examplefirm.addepar.com/api/v1/billable_portfolios
HTTP/1.1 200
{
"data": [
{
"type": "billable_portfolios",
"id": "12345",
"attributes": {
"entity_id": 67890,
"group_id": null,
"schedule_id": 111,
"is_archived": false,
"last_modified": "2026-03-15T10:30:00Z"
}
},
{
"type": "billable_portfolios",
"id": "12346",
"attributes": {
"entity_id": null,
"group_id": 54321,
"schedule_id": 222,
"is_archived": false,
"last_modified": "2026-04-20T16:45:00Z"
}
}
],
"meta": {
"page": {
"total_count": 2,
"next_cursor": null,
"limit": 500
}
}
}
Response codes:
200 OK: Success403 Forbidden: Insufficient application permissions or appropriate scope not granted404 Not Found: Billable Portfolio does not exist
Add a billable portfolio
Set up a group or entity for billing with a specified fee schedule. This also supports bulk creation.
POST /v1/billable_portfolios
Example:
POST https://examplefirm.addepar.com/api/v1/billable_portfolios
{
"data": {
"type": “create_billable_portfolio”,
"attributes": {
"group_id": 1,
"schedule_id": 2
}
}
}
HTTP/1.1 201
{
"id": 1234
}
Example:
POST https://examplefirm.addepar.com/api/v1/billable_portfolios
{
"data": {
"type": "create_billable_portfolio",
"attributes": {
"entity_id": 1,
"schedule_id": 2
}
}
}
HTTP/1.1 201
{
"id": 1234
}
Example:
POST https://examplefirm.addepar.com/api/v1/billable_portfolios
{
"data": [
{
"type": "create_billable_portfolio",
"attributes": {
"entity_id": 1,
"schedule_id": 2
}
},
{
"type": "create_billable_portfolio",
"attributes": {
"group_id": 1,
"schedule_id": 2
}
}
]
}
HTTP/1.1 201
{
"data": [
{
"type": "billable_portfolios",
"id": "1001",
"attributes": {
"entity_id": 1,
"schedule_id": 2,
"is_archived": false,
"last_modified": "2024-03-15T10:00:00Z"
}
},
{
"type": "billable_portfolios",
"id": "1002",
"attributes": {
"group_id": 1,
"schedule_id": 2,
"is_archived": false,
"last_modified": "2024-03-15T10:00:01Z"
}
}
]
}
Response codes:
200 OK: Success400 Bad Request: Failed during validation403 Forbidden: Insufficient application permissions or appropriate scope not granted404 Not Found: Argument does not exist
Update a fee schedule or restore a billable portfolio
Update a billable portfolio's fee schedule to a different one. You can also restore an archived billable portfolio by adding a fee schedule to it.
PATCH /v1/billable_portfolios/:id/relationships/fee_schedules
Example:
PATCH https://examplefirm.addepar.com/api/v1/billable_portfolios/2/relationships/fee_schedules
{
"data": {
"id": 3,
"type": "fee_schedules"
}
}
HTTP/1.1 200
Response codes:
200 OK: Success400 Bad Request: Failed during validation403 Forbidden: Insufficient application permissions or appropriate scope not granted404 Not Found: Billable portfolio or fee schedule does not exist.
Bulk update fee schedules or restore billable portfolios
Update multiple billable portfolios' fee schedules to different ones. You can also restore archived billable portfolios by adding fee schedules to them.
PATCH /v1/billable_portfolios/relationships/fee_schedules
Example:
PATCH https://examplefirm.addepar.com/api/v1/billable_portfolios/relationships/fee_schedules
{
"data": [
{
"id": "2",
"type": "create_billable_portfolio",
"attributes": {
"schedule_id": 3
}
},
{
"id": "5",
"type": "create_billable_portfolio",
"attributes": {
"schedule_id": 7
}
}
]
}
HTTP/1.1 200
Response codes:
200 OK: Success400 Bad Request: Failed during validation, or request exceeds the 500 portfolio limit403 Forbidden: Insufficient application permissions, appropriate scope not granted, or feature flag
not enabled404 Not Found: One or more billable portfolios or fee schedules do not exist
Archive a billable portfolio
Archive a billable portfolio when you no longer want to bill on it. None of its previous bills will change.
DELETE /v1/billable_portfolios/:id/relationships/fee_schedules
Example:
DELETE https://examplefirm.addepar.com/api/v1/billable_portfolios/2/relationships/fee_schedules
HTTP/1.1 200
Response codes:
200 OK: Success403 Forbidden: Insufficient application permissions or appropriate scope not granted404 Not Found: Billable portfolio does not exist.409 Conflict: Billable portfolio is already archived.
Bulk archive billable portfolios
Archive multiple billable portfolios when you no longer want to bill on them. None of their previous
bills will change.
DELETE /v1/billable_portfolios/relationships/fee_schedules
Example:
DELETE https://examplefirm.addepar.com/api/v1/billable_portfolios/relationships/fee_schedules
{
"data": [
{
"id": "2",
"type": "billable_portfolios"
},
{
"id": "5",
"type": "billable_portfolios"
}
]
}
HTTP/1.1 200
Response codes:
200 OK: Success400 Bad Request: Request exceeds the 500 portfolio limit403 Forbidden: Insufficient application permissions, appropriate scope not granted, or feature flag
not enabled404 Not Found: One or more billable portfolios do not exist409 Conflict: One or more billable portfolios are already archived, or type is not
billable_portfolios
Updated 8 days ago