Getting Started
Technical reference for the AltIndex REST API. For a quick start, see Getting Started.
Base URL
All API V2 requests use the following base URL:
https://v2.api.altindex.com/apiAuthentication
All API requests (except the root endpoint) require authentication via an API key passed in the X-API-Key header.
Request Header
Include your API key in every request:
X-API-Key: your_api_key_hereAPI Key Format
API keys use a v2_ prefix.
Obtaining an API Key
Create API keys at app.altindex.com/settings (opens in a new tab). Enterprise clients receive custom keys during onboarding.
Access Model
The API is organized into seven data families: entities, score, social, news, employment, ownership, and research. Every plan includes every family. Plans differ in request budget, history window, tickers per call, and MCP access, not in which endpoints you can reach.
If a request asks for something outside your plan, the API refuses it with a 403 Forbidden and a code that names the limit:
{
"error": {
"code": "HISTORY_LIMIT_EXCEEDED",
"message": "The requested range is older than your plan allows.",
"request_id": "req_abc123..."
}
}Rate Limiting
Each plan sets a daily request budget and a per-minute ceiling. Both reset on fixed UTC windows. The daily budget is shared between REST and MCP: one number covers both surfaces.
Plans
| Plan | Requests per day | Requests per minute | History window | Tickers per call | MCP |
|---|---|---|---|---|---|
| Hobbyist | 250 | 20 | 30 days | 1 | No |
| Developer | 1,000 | 60 | 2 years | 1 | Yes |
| Research | 10,000 | 300 | Full history | Up to 50 | Yes |
| Enterprise | Custom | Custom | Full history | Up to 200 | Yes |
See altindex.com/pricing (opens in a new tab) for plans. For Enterprise access, contact sales (opens in a new tab).
Rate Limit Headers
Every response to an authenticated request carries your remaining budget:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | The limit for the window that refused or served you |
X-RateLimit-Remaining | Requests left in that window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Rate Limit Exceeded
When you exceed your limit, the API returns a 429 Too Many Requests response with a Retry-After header:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Daily request limit exceeded.",
"request_id": "req_abc123..."
}
}Best Practices
- Cache responses when possible
- Use date range filters to reduce data transfer
- Read the
X-RateLimit-*headers to track your usage
Error Handling
All errors follow a consistent JSON format with a unique request_id for troubleshooting. The full API Reference also lists the specific error codes each endpoint can return.
Error Response Format
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error description",
"request_id": "req_<uuid>"
}
}Error Codes
The most common codes:
| HTTP Status | Code | Description |
|---|---|---|
| 401 Unauthorized | MISSING_API_KEY | No API key provided in the X-API-Key header |
| 403 Forbidden | INVALID_API_KEY | API key is invalid or inactive |
| 403 Forbidden | HISTORY_LIMIT_EXCEEDED | The requested range is older than your plan allows |
| 403 Forbidden | TOO_MANY_TICKERS | More tickers were requested than your plan allows per call |
| 404 Not Found | TICKER_NOT_FOUND | That ticker is not in our covered universe |
| 422 Unprocessable Entity | VALIDATION_ERROR | Request validation failed |
| 429 Too Many Requests | RATE_LIMIT_EXCEEDED | Daily or per-minute request limit exceeded |
The API also returns the request_id in the X-Request-ID response header. Quote that value in a support ticket and we can find the request.
OpenAPI Specification
Download the machine-readable spec: /openapi/v2.json
Next Steps
- Browse the Reference for endpoint details
- Connect AltIndex to your AI assistant via MCP
- Explore the Data Dictionary for field definitions and coverage