API Reference
v1.0Integrate ValueMarkers scores, quality checks, and screening into your workflow. Pull our analysis into your models, dashboards, or client reports.
API access is available on Professional and Team plans. All responses are JSON.
https://api.valuemarkers.com/api/v1Authentication
Every request requires an Authorization header with a Bearer token. API keys use the vmk_ prefix.
Generate keys from Settings > API Keys in your dashboard. Each account can have up to 5 active keys. Keys can be revoked at any time.
curl -X GET "https://api.valuemarkers.com/api/v1/stock/AAPL" \
-H "Authorization: Bearer vmk_your_api_key"401UnauthorizedReturned when the Authorization header is missing or the API key is invalid. Check that your key starts with vmk_.
403ForbiddenReturned when your plan does not include API access. API is available on Professional and Team plans.
What the API provides
The ValueMarkers API gives you programmatic access to our analysis - composite scores, quality checks, valuation estimates, and screening results. It's designed for investment professionals who want to integrate our insights into their existing tools and workflows.
Included
- VM Score + 5-pillar breakdown per stock
- Quality checks (Piotroski, Altman, Beneish)
- Key valuation metrics + DCF estimate
- Multi-factor screening (73 exchanges)
- Leaderboard rankings
- Watchlist export with scores
Use the platform for
- Full 120-indicator deep dives
- Advanced AND/OR screener logic
- AI-powered stock analysis
- Natural language screening
- Interactive DCF calculator
- Guru & insider tracking
Stock Profile
Get our composite analysis for any stock. Returns our scores, quality checks, and key valuation metrics - not raw financial data.
Search
Look up stocks by ticker symbol or company name.
Screener
Find stocks matching your criteria across 73 exchanges. Filter by our scores and key metrics.
Leaderboard
See the highest-ranked stocks by our composite VM Score.
Watchlist Export
Export your watchlists with current scores and metrics. Useful for syncing with external tools.
Response Format
All responses return JSON with a consistent envelope. The top-level object always contains a data field and a meta field.
Standard Response
{
"data": "{ ... }",
"meta": {
"timestamp": "2026-03-09T14:32:00Z",
"version": "v1.0"
}
}Paginated Response
{
"data": [
"{ ... }"
],
"meta": {
"timestamp": "2026-03-09T14:32:00Z",
"version": "v1.0",
"pagination": {
"total": 47,
"offset": 0,
"limit": 25
}
}
}Rate Limits
Rate limits are enforced per API key. Every response includes rate limit headers.
| Plan | Monthly Requests | Rate Limit |
|---|---|---|
| Professional | 10,000/month | 50 rpm |
| Team 5 | 50,000/month | 200 rpm |
| Team 10 | 100,000/month | 300 rpm |
| Enterprise | Custom | Custom |
Rate Limit Headers
X-RateLimit-LimitMonthly request quota.
X-RateLimit-RemainingRequests remaining.
X-RateLimit-ResetUTC timestamp when the window resets.
Error Codes
The API uses standard HTTP status codes. Error responses include a JSON body with a human-readable message.
| Code | Status | Description |
|---|---|---|
200 | OK | Request succeeded. |
400 | Bad Request | Missing or malformed request parameters. |
401 | Unauthorized | API key is missing or invalid. |
403 | Forbidden | Your plan does not include access to this endpoint. |
404 | Not Found | The requested ticker or resource does not exist. |
422 | Unprocessable | Parameters are well-formed but semantically invalid (e.g. min_score=200). |
429 | Too Many Requests | Rate limit exceeded. Back off and retry after X-RateLimit-Reset. |
500 | Server Error | Something went wrong on our end. If it persists, contact support. |
Code Examples
Working examples in Python, JavaScript, and cURL. Replace vmk_your_api_key with your actual key.
import requests
API_KEY = "vmk_your_api_key"
BASE = "https://api.valuemarkers.com/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Get a stock's ValueMarkers analysis
stock = requests.get(f"{BASE}/stock/AAPL", headers=headers).json()["data"]
print(f"{stock['name']}")
print(f" VM Score: {stock['scores']['vm_score']}/100")
print(f" Piotroski: {stock['quality_checks']['piotroski_f_score']}/9")
print(f" DCF Value: $" + str(stock['valuation']['dcf_value']))
print(f" Margin of Safety: {stock['valuation']['margin_of_safety']}%")
# Screen for high-quality undervalued stocks
params = {"min_score": 70, "max_pe": 20, "min_piotroski": 7, "limit": 10}
results = requests.get(f"{BASE}/screener", headers=headers, params=params).json()
for s in results["data"]:
print(f" {s['ticker']:6s} VM: {s['vm_score']} MoS: {s['margin_of_safety']}%")Changelog
- Initial public release.
- Stock profiles with composite scores and quality checks.
- Multi-factor screener across 73 exchanges.
- Leaderboard endpoint.
- Search and watchlist export.
Ready to integrate?
API access starts on the Professional plan ($99/mo). Team plans include higher rate limits and shared workspaces.