Get set up
This page gets you from zero to a working API call. You need an Addepar account with API access enabled by your firm administrator.
Create an API key
- Sign in to Addepar and navigate to Firm Administration.
- Under Admin Tools, select API Access Key.
- Create a new key. You receive a key ID and key secret.
Save both values immediatelyThe key secret is displayed once. If you lose it, you must create a new key.
If API Access Key is not available, your firm administrator needs to enable it under Firm Administration > Users > Permissions > API Access.
The API key inherits the permissions of the user who created it. A key can access exactly what that user can access in the Addepar UI. See Access and Authentication for the full permission model.
Make your first request
Every request requires three things: your credentials (Base64-encoded key:secret), your firm ID in the Addepar-Firm header, and the JSON:API content type.
curl -X GET "https://examplefirm.addepar.com/api/v1/entities" \
-u "YOUR_KEY_ID:YOUR_KEY_SECRET" \
-H "Addepar-Firm: YOUR_FIRM_ID" \
-H "Accept: application/vnd.api+json"Replace examplefirm with your firm's subdomain. A successful response:
{
"data": [
{
"id": "1",
"type": "entities",
"attributes": {
"entity_type": "person_node",
"display_name": "Example Client"
},
"relationships": { ... }
}
],
"links": {
"next": "/v1/entities?page[limit]=500&page[after]=501"
}
}A 401 means bad credentials or a mismatched firm header. A 403 means the API key user lacks permission for that resource. See Response Codes for all statuses.
Handle pagination
Most list endpoints return paginated results. Default page size is 500; maximum is 2,000. Follow links.next until it returns null.
curl -X GET "https://examplefirm.addepar.com/api/v1/entities?page[limit]=100" \
-u "YOUR_KEY_ID:YOUR_KEY_SECRET" \
-H "Addepar-Firm: YOUR_FIRM_ID" \
-H "Accept: application/vnd.api+json"The next page URL comes from links.next in the response. See Pagination for the full reference.
Run a portfolio query
The Portfolio Query endpoint is a computation. You specify columns (what to calculate), groupings (how to slice), portfolio type (which ownership interpretation), and a date range. The server walks the ownership graph and returns a hierarchical tree of computed values.
curl -X POST "https://examplefirm.addepar.com/api/v1/portfolio/query" \
-u "YOUR_KEY_ID:YOUR_KEY_SECRET" \
-H "Addepar-Firm: YOUR_FIRM_ID" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "portfolio_query",
"attributes": {
"columns": ["value"],
"groupings": ["asset_class"],
"start_date": "2026-01-01",
"end_date": "2026-09-01",
"portfolio_type": "FIRM",
"portfolio_id": 1
}
}
}'
Why this mattersMost Addepar integrations need portfolio analytics. Changing
portfolio_typechanges which ownership paths the engine traverses, which changes the results. The Addepar 101 page explains the ownership graph.
For queries covering 100+ entities, use the Jobs API to submit asynchronously. See Portfolio Query for column arguments, filters, and the async pattern.
Environments
| Environment | Base URL | Purpose |
|---|---|---|
| Production | https://{firm}.addepar.com/api/v1 | Live client data. Use with caution. |
| Development | https://{firm}.clientdev.addepar.com/api/v1 | Testing and development. Provisioned by Addepar on request. |
| Premier Sandbox | https://{firm}.sandbox.addepar.com/api/v1 | Production replica for safe testing. Select firms only. |
On development environmentsMost developers start by testing against production because dev environments require separate provisioning and may have limited sample data. This is common and expected. Use a read-only API key for initial development, and request a dev environment when you need to test writes. See Rate Limiting for thresholds.
Authentication options
API key (Basic Auth) is the default for single-firm integrations. The key ID and secret are sent as Basic Auth credentials. See Access and Authentication.
Server-to-server OAuth is for backend services that need automated access without user interaction. Addepar provides a Java and Python library with token caching and automatic refresh. Contact your account team for access.
OAuth 2.0 (Authorization Code) is for applications serving multiple users or firms. 240-second access tokens with automatic refresh. Addepar provides the client ID and secret. See OAuth.
Common integration patterns
Data extraction for reporting. Run a saved view via the Jobs API on a schedule, download results, push to a BI tool. This is the most common pattern.
Entity synchronization. Pull entities (clients, accounts, groups) to keep an external system in sync. Paginate large sets and use updated_since for incremental updates.
Portfolio analytics. Use Portfolio Query for on-demand calculations. For 100+ entities or complex groupings, submit through Jobs.
ADX-based analysis. For workloads spanning the entire book (cross-portfolio concentration, performance attribution, risk reporting), query ADX precomputed tables with SQL or Python.
What to read next
Updated 5 days ago