Skip to main content
API

API Documentation

Integrate Achieved.io into your workflow. Access investor data, project analytics, documents, and communications through a simple REST API.

v1.0 StableREST APIJSON Responses
Client AppHTTP RequestHTTPSAchieved APIAuth & ProcessQueryDatabaseStore & RetrieveJSONResponseJSON Payload

Getting Started

The Achieved.io API is built on REST principles. All requests use HTTPS, return JSON responses, and use standard HTTP status codes. The base URL for all API requests is:

Base URL
https://api.achieved.io/api/v1

HTTPS Only

All requests must use TLS 1.2+

JSON Format

Request and response bodies in JSON

Versioned

API version included in the URL path

Authentication

All API requests require an API key sent via the Authorization header using the Bearer scheme. You can generate and manage API keys from your Achieved.io dashboard.

1. Generate an API Key

Navigate to Settings → API Keys in your dashboard and click Create New Key. Store the key securely — it will only be shown once.

2. Include the Key in Requests

Example Request
curl -X GET https://api.achieved.io/api/v1/investors \
  -H "Authorization: Bearer ak_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json"

Security Notice: Never expose your API key in client-side code. Use environment variables and server-side requests to keep your key safe.

Retrieve a paginated list of investors associated with your organization. Supports filtering by status, type, and date range.

Parameters

NameTypeRequiredDescription
pageintegerOptionalPage number (default: 1)
limitintegerOptionalResults per page (default: 25, max: 100)
statusstringOptionalFilter by status: "active", "pending", "inactive"
typestringOptionalInvestor type: "individual", "institutional"

Response

200 OK
{
  "data": [
    {
      "id": "inv_8xK2mP9qL",
      "name": "Jane Smith",
      "email": "jane@example.com",
      "type": "individual",
      "status": "active",
      "total_invested": 250000,
      "currency": "USD",
      "created_at": "2025-11-15T08:30:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 25,
    "total": 142,
    "total_pages": 6
  }
}

Retrieve all projects in your portfolio. Each project includes summary metrics, current status, and linked investor count.

Parameters

NameTypeRequiredDescription
pageintegerOptionalPage number (default: 1)
limitintegerOptionalResults per page (default: 25, max: 100)
statusstringOptionalProject status: "active", "completed", "pipeline"

Response

200 OK
{
  "data": [
    {
      "id": "prj_4nR7wX2bK",
      "name": "Riverside Development",
      "status": "active",
      "target_raise": 5000000,
      "current_raise": 3250000,
      "investor_count": 18,
      "currency": "USD",
      "asset_class": "real_estate",
      "created_at": "2025-09-01T12:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 25,
    "total": 8,
    "total_pages": 1
  }
}

Upload a document and associate it with a project or investor. Supported formats: PDF, DOCX, XLSX. Max file size: 50 MB.

Parameters

NameTypeRequiredDescription
filebinaryRequiredThe document file (multipart/form-data)
project_idstringRequiredThe project to attach the document to
typestringRequired"report", "agreement", "statement", "other"
visibilitystringOptional"private" (default) or "investor_visible"

Request

Example Request
curl -X POST https://api.achieved.io/api/v1/documents \
  -H "Authorization: Bearer ak_live_xxxxxxxxxxxx" \
  -F "file=@quarterly-report.pdf" \
  -F "project_id=prj_4nR7wX2bK" \
  -F "type=report" \
  -F "visibility=investor_visible"

Response

200 OK
{
  "id": "doc_9mT3vY8hQ",
  "filename": "quarterly-report.pdf",
  "size_bytes": 2458901,
  "mime_type": "application/pdf",
  "type": "report",
  "project_id": "prj_4nR7wX2bK",
  "visibility": "investor_visible",
  "status": "processing",
  "uploaded_at": "2026-03-20T14:22:00Z"
}

Retrieve aggregated analytics across your portfolio including AUM, returns, investor growth, and project performance metrics.

Parameters

NameTypeRequiredDescription
periodstringOptional"7d", "30d", "90d", "1y", "all" (default: "30d")
project_idstringOptionalFilter analytics to a specific project
metricstringOptional"aum", "returns", "investors", "all" (default: "all")

Response

200 OK
{
  "period": "30d",
  "metrics": {
    "total_aum": 28500000,
    "aum_change_pct": 4.2,
    "total_investors": 142,
    "new_investors": 8,
    "active_projects": 6,
    "avg_return_pct": 12.8,
    "distributions_paid": 850000
  },
  "currency": "USD",
  "generated_at": "2026-03-20T15:00:00Z"
}

Send an email or in-app notification to a specific investor or a group of investors. Supports templates and custom HTML content.

Parameters

NameTypeRequiredDescription
typestringRequired"email", "in_app", "both"
recipient_idsstring[]RequiredArray of investor IDs
subjectstringRequiredMessage subject line
bodystringRequiredMessage body (HTML or plain text)
template_idstringOptionalUse a predefined template instead of body

Request

Example Request
{
  "type": "email",
  "recipient_ids": ["inv_8xK2mP9qL", "inv_3bN5kR7wF"],
  "subject": "Q4 2025 Portfolio Update",
  "body": "<h1>Quarterly Update</h1><p>Dear Investor, ...</p>",
  "template_id": null
}

Response

200 OK
{
  "id": "comm_6pW1xZ4nM",
  "type": "email",
  "recipients_count": 2,
  "status": "queued",
  "scheduled_at": null,
  "created_at": "2026-03-20T16:00:00Z"
}

SDKs & Libraries

Get started quickly with our official SDKs. Install via your preferred package manager and initialize with your API key.

Node.js / TypeScript

Install
npm install @achieved/sdk
Usage
import { AchievedClient } from "@achieved/sdk";

const client = new AchievedClient({
  apiKey: process.env.ACHIEVED_API_KEY,
});

const investors = await client.investors.list({
  status: "active",
  limit: 50,
});

Python

Install
pip install achieved-sdk
Usage
from achieved import AchievedClient

client = AchievedClient(
    api_key=os.environ["ACHIEVED_API_KEY"]
)

investors = client.investors.list(
    status="active",
    limit=50,
)

Rate Limits

API requests are rate-limited to ensure fair usage and platform stability. Limits are applied per API key.

PlanRequests / MinuteRequests / DayBurst Limit
Starter6010,00010 req/s
Professional300100,00030 req/s
Enterprise1,000Unlimited100 req/s

Rate Limit Headers

Every response includes headers to help you track your usage:

Response Headers
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 297
X-RateLimit-Reset: 1711036800
Retry-After: 42

When you exceed the rate limit, the API returns a 429 Too Many Requests response. Use the Retry-After header to determine when to retry.