Unofficial Python SDK for the Addepar API
Project description
AddePy
Unofficial Python SDK for the Addepar API.
Installation
pip install addepy
Setup
Create a .env file in your project with your Addepar credentials:
ADDEPAR_FIRM_NAME=yourfirm
ADDEPAR_FIRM_ID=12345
ADDEPAR_API_KEY=your_base64_encoded_api_key
ADDEPAR_FIRM_NAME is your URL subdomain: https://{ADDEPAR_FIRM_NAME}.addepar.com
Usage
from addepy import AddePy
addepy = AddePy() # Reads from .env automatically, or pass in config variables yourself
# List entities - Tier 1 Method
entity_types = addepy.ownership.entities.list_entity_types()
# Execute a portfolio query (submit, poll, download) - Tier 2 Method
results = addepy.portfolio.jobs.execute_portfolio_query(query_dict)
# Run an import (submit, poll, download) - Tier 2 Method
results = addepy.admin.import_tool.execute_import(df, "TRANSACTIONS")
The Import Tool via API is in Beta (as of 12/10/2025), so you may need to request access for your firm. However, this is a great tool... the Import Tool allows data management of almost resources in Addepar...
Design Philosophy
Namespaces & Resources
The SDK mirrors the Addepar API documentation structure with three namespaces:
addepy.portfolio → Market data & holdings
addepy.ownership → Entity management
addepy.admin → System & user management
Each namespace contains resources that map to API endpoints:
addepy.portfolio.jobs # /v1/jobs
addepy.ownership.entities # /v1/entities
addepy.admin.import_tool # /v1/imports
Tier 1 vs Tier 2 Methods
Tier 1 - CRUD Operations
Direct wrappers around individual API endpoints.
| Pattern | Purpose |
|---|---|
create_* |
Create a resource |
get_* |
Retrieve a resource |
list_* |
List resources (with pagination) |
update_* |
Update a resource |
delete_* |
Delete a resource |
job_id = addepy.portfolio.jobs.create_job(query_dict)
status = addepy.portfolio.jobs.get_job_status(job_id)
results = addepy.portfolio.jobs.get_job_results(job_id)
Tier 2 - Orchestration
Combine multiple Tier 1 operations into a single call.
| Pattern | Purpose |
|---|---|
execute_* |
Submit → Poll → Return results |
# Does create_job + poll for completion + get_job_results
results = addepy.portfolio.jobs.execute_portfolio_query(query_dict)
Use Tier 1 when you need fine-grained control. Use Tier 2 for convenience.
Error Handling
from addepy import AddePyError, AuthenticationError, RateLimitError, ValidationError
try:
results = addepy.ownership.entities.create_entity(...)
except ValidationError as e:
print(f"Invalid input: {e}")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after} seconds")
except AddePyError as e:
print(f"API error: {e}")
Logging
import logging
logging.getLogger("addepy").setLevel(logging.DEBUG)
logging.getLogger("addepy").addHandler(logging.StreamHandler())
Repository Structure
Mirrors the Addepar API documentation:
addepy/
├── client.py # Main entry point
├── exceptions.py # Custom exceptions
├── constants.py # SDK constants
└── resources/
├── base.py # Base resource class
├── portfolio/ # PORTFOLIO endpoints
│ └── jobs.py
├── ownership/ # OWNERSHIP endpoints
│ └── entities.py
└── admin/ # ADMIN endpoints
└── import_tool.py
Addepar API Documentation
Official docs: developers.addepar.com
API Sections:
- Portfolio - Jobs, Transactions, Historical Prices, Benchmarks, etc.
- Ownership - Entities, Groups, Positions, External IDs
- Admin - Import Tool, Users, Files, Reports, etc.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file addepy-0.1.0.tar.gz.
File metadata
- Download URL: addepy-0.1.0.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85e8d76d579c1f5195029951b1710abfb98795f9b1c36f838142061656d5f5d1
|
|
| MD5 |
8722d52d2bd179863e7bd7d3ca8b141a
|
|
| BLAKE2b-256 |
342fbd08a97d2969c55e70ddd5ebd7f78e5d952ddfee458bcee6d51ad5526e06
|
File details
Details for the file addepy-0.1.0-py3-none-any.whl.
File metadata
- Download URL: addepy-0.1.0-py3-none-any.whl
- Upload date:
- Size: 19.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1192739495411b2e9708bf9747c1b3bdf37fa49a9ae85f7cf4b933d2a0b411e8
|
|
| MD5 |
f75314c64199d50e25cca2df61795c10
|
|
| BLAKE2b-256 |
2986e347d0ac831b8bceb65c8718263596789000b5a52cf9c0364a6d1c730006
|