API Documentation

Complete reference for the Marlowe Research REST API

Authentication
All API requests require authentication via Bearer token

Include your API key in the Authorization header:

Authorization: Bearer mk_live_your_api_key_here

Important: Keep your API key secret. Never expose it in client-side code or public repositories.

Rate Limiting
API requests are rate limited per key

Rate limits are configured per API key (default: 100 requests/minute). When exceeded, you'll receive a 429 response:

{
  "error": "Rate Limit Exceeded",
  "message": "Too many requests. Please wait before trying again.",
  "retryAfter": 60
}
Endpoints
Available API endpoints and their permissions
GET/api/v1/health

Check API health status

GET/api/v1/searchsearch

Search for companies by name or symbol

Parameters:

q(string)required- Search query
limit(number)- Max results (default 10, max 50)
GET/api/v1/profile/:symbolanalysis

Get company profile information

GET/api/v1/executives/:symbolanalysis

Get key executives for a company

GET/api/v1/analysis/:symbolanalysis

Get full management analysis for a symbol

GET/api/v1/analysis/:symbol/scoreanalysis

Get management score breakdown

POST/api/v1/analysis/:symbolanalysis

Trigger a new analysis for a symbol

GET/api/v1/history/:symbolanalysis

Get analysis history for a symbol

Parameters:

limit(number)- Max results (default 10, max 100)
GET/api/v1/watchlistwatchlist

Get your watchlist

GET/api/v1/microstructure/:symbolmicrostructure

Get market microstructure data (Databento)

GET/api/v1/batch/scoresanalysis

Get scores for multiple symbols

Parameters:

symbols(string)required- Comma-separated symbols (max 10)
Example Responses
{
  "success": true,
  "symbol": "AAPL",
  "companyName": "Apple Inc.",
  "overallScore": 78,
  "analysis": {
    "ceo": "Tim Cook",
    "marketCap": 2850000000000,
    "insiderOwnershipPct": 0.07,
    "executives": [...],
    "questionScores": [...]
  },
  "analyzedAt": "2025-01-10T14:30:00.000Z"
}
Symbol Scoping
Restrict API keys to specific symbols for security

When creating an API key, you can optionally restrict it to specific stock symbols. This is useful for:

  • Limiting third-party integrations to only the symbols they need
  • Creating separate keys for different portfolios or clients
  • Reducing risk if a key is compromised

If a key with symbol restrictions tries to access a non-allowed symbol, it will receive a 403 Forbidden response:

{
  "error": "Forbidden",
  "message": "This API key is not authorized to access symbol 'MSFT'. Allowed symbols: AAPL, GOOGL"
}
Webhooks
Get notified when analysis completes or scores change

Configure webhooks to receive real-time notifications when:

  • analysis.completed - A new analysis finishes for a watched symbol
  • score.changed - A symbol's management score changes significantly
  • alert.triggered - A custom alert condition is met

Webhook payloads include a signature header for verification:

POST /your-webhook-endpoint
X-Webhook-Signature: sha256=abc123...
Content-Type: application/json

{
  "event": "analysis.completed",
  "symbol": "AAPL",
  "score": 78,
  "previousScore": 75,
  "timestamp": "2025-01-10T14:30:00.000Z"
}
Python SDK
Official Python client for the Marlowe Research API

Install the official Python SDK:

pip install marlowe-research

Quick start:

from marlowe_research import MarloweClient

client = MarloweClient(api_key="mk_live_your_api_key")

# Search for companies
results = client.search("Apple")
for company in results:
    print(f"{company.symbol}: {company.name}")

# Get management analysis
analysis = client.get_analysis("AAPL")
print(f"Score: {analysis.overall_score} ({analysis.grade})")

# Compare multiple companies
comparison = client.compare(["AAPL", "MSFT", "GOOGL"])
for symbol, score in sorted(comparison.items(), key=lambda x: x[1].overall_score, reverse=True):
    print(f"{symbol}: {score.overall_score}")

# Screen for high-quality management
top_companies = client.screen(["AAPL", "MSFT", "GOOGL", "META"], min_score=75)
for company in top_companies:
    print(f"{company.symbol}: {company.overall_score}")

The SDK provides typed data models, automatic retries, and comprehensive error handling.