Include your API key in the Authorization header:
Authorization: Bearer mk_live_your_api_key_hereImportant: Keep your API key secret. Never expose it in client-side code or public repositories.
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
}/api/v1/healthCheck API health status
/api/v1/searchsearchSearch for companies by name or symbol
Parameters:
q(string)required- Search querylimit(number)- Max results (default 10, max 50)/api/v1/profile/:symbolanalysisGet company profile information
/api/v1/executives/:symbolanalysisGet key executives for a company
/api/v1/analysis/:symbolanalysisGet full management analysis for a symbol
/api/v1/analysis/:symbol/scoreanalysisGet management score breakdown
/api/v1/analysis/:symbolanalysisTrigger a new analysis for a symbol
/api/v1/history/:symbolanalysisGet analysis history for a symbol
Parameters:
limit(number)- Max results (default 10, max 100)/api/v1/watchlistwatchlistGet your watchlist
/api/v1/microstructure/:symbolmicrostructureGet market microstructure data (Databento)
/api/v1/batch/scoresanalysisGet scores for multiple symbols
Parameters:
symbols(string)required- Comma-separated symbols (max 10){
"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"
}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"
}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"
}Install the official Python SDK:
pip install marlowe-researchQuick 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.