Authentication
All API requests require authentication via a Bearer token in the Authorization header. Generate API keys from your dashboard settings.
Authorization: Bearer arch_live_xxxxxxxxxxxxAPI Key Types
| Prefix | Environment | Usage |
|---|---|---|
arch_live_ | Production | Full access to live fund data. Use in server-side applications. |
arch_test_ | Test/Sandbox | Read-only access to sandbox data. Safe for development. |
Request Format
All requests should include the following headers:
httpAuthorization: Bearer arch_live_xxxxxxxxxxxx
Content-Type: application/json
Accept: application/jsonQuick Start
Get started in seconds. Replace YOUR_API_KEY with your actual key.
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
https://archstone.app/api/v1/portfoliojavascriptconst response = await fetch("https://archstone.app/api/v1/portfolio", {
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const { data, meta } = await response.json();
console.log(data); // Array of portfolio companiespythonimport requests
response = requests.get(
"https://archstone.app/api/v1/portfolio",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = response.json()
print(data["data"]) # List of portfolio companieshttps://archstone.app/api/v1Auth
Manage API keys, validate tokens, and check permissions.
/auth/validateValidate API key
Example Request
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
"https://archstone.app/api/v1/auth/validate"Example Response
{
"valid": true,
"key_id": "key_abc123",
"fund_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"permissions": [
"read",
"write"
],
"created_at": "2025-06-01T00:00:00Z",
"last_used_at": "2026-03-21T14:30:00Z"
}Fund
Retrieve details about your fund including thesis, fees, and terms.
/fundGet fund details
Example Request
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
"https://archstone.app/api/v1/fund"Example Response
{
"data": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Archstone Fund I",
"target_size": 25000000,
"thesis": "Early-stage B2B SaaS in North America",
"sectors": [
"SaaS",
"Fintech"
],
"stages": [
"Pre-Seed",
"Seed"
],
"management_fee": 2,
"carried_interest": 20,
"hurdle_rate": 8,
"status": "active",
"created_at": "2025-01-15T00:00:00Z"
}
}Portfolio
List and filter portfolio companies with latest metrics snapshots.
/portfolioList portfolio companies
Parameters
| Name | Type | In | Description |
|---|---|---|---|
page | integer | query | Page number(default: 1) |
per_page | integer | query | Results per page (max 100)(default: 25) |
sort | string | query | Field name to sort by |
order | string | query | Sort order: "asc" or "desc"(default: "desc") |
id | string | query | Fetch a single company by UUID |
status | string | query | Filter by status (active, exited, written_off) |
sector | string | query | Filter by sector |
stage | string | query | Filter by stage |
Example Request
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
"https://archstone.app/api/v1/portfolio"Example Response
{
"data": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Acme Corp",
"sector": "SaaS",
"stage": "Seed",
"investment_amount": 500000,
"current_valuation": 12000000,
"status": "active",
"latest_metrics": {
"period": "2025-Q4",
"arr": 2400000,
"mrr": 200000,
"burn_rate": 150000,
"runway_months": 18
}
}
],
"meta": {
"total": 12,
"page": 1,
"per_page": 25,
"total_pages": 1
}
}LPs
Manage your limited partner directory and commitment data.
/lpsList LPs
Parameters
| Name | Type | In | Description |
|---|---|---|---|
page | integer | query | Page number(default: 1) |
per_page | integer | query | Results per page (max 100)(default: 25) |
sort | string | query | Field name to sort by |
order | string | query | Sort order: "asc" or "desc"(default: "desc") |
id | string | query | Fetch a single LP by UUID |
status | string | query | Filter by commitment_status |
lp_type | string | query | Filter by LP type |
Example Request
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
"https://archstone.app/api/v1/lps"Example Response
{
"data": [
{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"name": "Jane Smith",
"organization": "Smith Family Office",
"lp_type": "Individual",
"commitment_amount": 1000000,
"commitment_status": "committed"
}
],
"meta": {
"total": 8,
"page": 1,
"per_page": 25,
"total_pages": 1
}
}Deals
Access your deal pipeline with filtering by stage, sector, and more.
/dealsList deals
Parameters
| Name | Type | In | Description |
|---|---|---|---|
page | integer | query | Page number(default: 1) |
per_page | integer | query | Results per page (max 100)(default: 25) |
sort | string | query | Field name to sort by |
order | string | query | Sort order: "asc" or "desc"(default: "desc") |
id | string | query | Fetch a single deal by UUID |
pipeline_stage | string | query | Filter by pipeline stage |
sector | string | query | Filter by sector |
stage | string | query | Filter by company stage |
Example Request
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
"https://archstone.app/api/v1/deals"Example Response
{
"data": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"company_name": "NewCo AI",
"sector": "AI/ML",
"stage": "Pre-Seed",
"pipeline_stage": "due_diligence",
"check_size": 250000,
"valuation": 8000000,
"score": 85
}
],
"meta": {
"total": 24,
"page": 1,
"per_page": 25,
"total_pages": 1
}
}Metrics
Query aggregate portfolio metrics and per-company performance data.
/metricsGet portfolio metrics
Parameters
| Name | Type | In | Description |
|---|---|---|---|
company_id | string | query | Filter to a specific portfolio company UUID |
period | string | query | Filter by period (e.g. 2025-Q4) |
Example Request
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
"https://archstone.app/api/v1/metrics"Example Response
{
"data": {
"summary": {
"total_companies": 12,
"active_companies": 10,
"total_invested": 6500000,
"current_portfolio_value": 42000000,
"tvpi": 6.46,
"aggregate_arr": 28000000,
"aggregate_mrr": 2333333,
"avg_burn_rate": 180000
},
"metrics": [
{
"company_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"period": "2025-Q4",
"arr": 2400000,
"mrr": 200000,
"burn_rate": 150000,
"runway_months": 18
}
]
},
"meta": {
"total_metrics": 48,
"companies_with_metrics": 10
}
}Capital Calls
List capital calls with status and payment tracking.
/capital-callsList capital calls
Parameters
| Name | Type | In | Description |
|---|---|---|---|
page | integer | query | Page number(default: 1) |
per_page | integer | query | Results per page (max 100)(default: 25) |
sort | string | query | Field name to sort by |
order | string | query | Sort order: "asc" or "desc"(default: "desc") |
id | string | query | Fetch a single capital call by UUID |
status | string | query | Filter by status (pending, completed, cancelled) |
Example Request
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
"https://archstone.app/api/v1/capital-calls"Example Response
{
"data": [
{
"id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"fund_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"amount": 500000,
"due_date": "2025-12-15",
"status": "pending",
"paid_amount": 0
}
],
"meta": {
"total": 3,
"page": 1,
"per_page": 25,
"total_pages": 1
}
}Documents
Upload, list, and share data room documents with analytics.
/documentsList documents
Parameters
| Name | Type | In | Description |
|---|---|---|---|
page | integer | query | Page number(default: 1) |
per_page | integer | query | Results per page (max 100)(default: 25) |
sort | string | query | Field name to sort by |
order | string | query | Sort order: "asc" or "desc"(default: "desc") |
folder | string | query | Filter by folder name |
file_type | string | query | Filter by MIME type (e.g. application/pdf) |
Example Request
bashcurl -H "Authorization: Bearer YOUR_API_KEY" \
"https://archstone.app/api/v1/documents"Example Response
{
"data": [
{
"id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"name": "Q4 2025 LP Report.pdf",
"folder": "LP Reports",
"file_type": "application/pdf",
"file_size": 2456789,
"uploaded_by": "user-uuid",
"created_at": "2025-12-20T10:00:00Z"
}
],
"meta": {
"total": 47,
"page": 1,
"per_page": 25,
"total_pages": 2
}
}AI
Interact with Archie AI for fund intelligence and automated workflows.
/ai/generateGenerate AI response
Parameters
| Name | Type | In | Description |
|---|---|---|---|
message | string | body | The prompt or question for Archie |
context | string | body | Optional page context (e.g. 'portfolio', 'deals') |
Example Request
bashcurl -X POST "https://archstone.app/api/v1/ai/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Summarize my portfolio"
}'Example Response
{
"message": "Here is a summary of your portfolio performance for Q4 2025...",
"model": "claude-sonnet-4-20250514",
"tokens_used": 1250,
"tools_used": [
"query_fund_data",
"portfolio_summary"
]
}Rate Limits
API requests are rate limited to ensure fair usage and platform stability.
| Plan | Rate Limit | Burst |
|---|---|---|
| Starter | 60 requests / minute | 10 requests / second |
| Pro | 300 requests / minute | 30 requests / second |
Rate limit headers are included in every response:
X-RateLimit-Limit — max requests per windowX-RateLimit-Remaining — requests remainingX-RateLimit-Reset — UTC epoch seconds until resetHandling Rate Limits
When you exceed the rate limit, the API responds with a 429 status. Implement exponential backoff to handle this gracefully:
javascriptasync function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const res = await fetch(url, options);
if (res.status === 429) {
const resetAt = res.headers.get("X-RateLimit-Reset");
const waitMs = resetAt
? Math.max(0, Number(resetAt) * 1000 - Date.now())
: Math.pow(2, i) * 1000;
await new Promise(r => setTimeout(r, waitMs));
continue;
}
return res;
}
throw new Error("Rate limit exceeded after retries");
}Error Codes
All errors return a consistent JSON body with an error field.
json{
"error": "Unauthorized — invalid or missing API key",
"status": 401,
"request_id": "req_abc123def456"
}Every error response includes an error string, the HTTP status code, and a unique request_id for debugging. Include the request_id when contacting support.
| Status | Title | Description |
|---|---|---|
400 | Bad Request | Invalid query parameters or request body. |
401 | Unauthorized | Missing or invalid API key. |
403 | Forbidden | API key does not have permission for this resource. |
404 | Not Found | The requested resource does not exist. |
429 | Too Many Requests | Rate limit exceeded. Wait and retry. |
500 | Internal Server Error | Something went wrong on our end. |