API Documentation
Authentication
All API endpoints require authentication using an API key passed in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Base URL
https://ivapi.financialsource.co/api/
Data Updates & Polling Strategy
Update Frequency
Data is updated once daily
Since our API uses GET endpoints (pull-based), you'll need to poll for updates.
Symbol Format
Symbols may be provided as EURUSD or EUR/USD; the API normalizes internally. Both formats are accepted on all endpoints.
Recommended Polling Strategy:
- Daily polling: Check for updates once per day after 7:30 AM London Time
- For real-time systems: Poll every 15 minutes after the initial 7:30 AM check if immediate updates are critical
Response Format
All responses are in JSON format. Successful responses return data with HTTP 200 status. Errors return appropriate HTTP status codes with error messages.
Standard Volatility Data Object:
{
"instrument": "EURUSD",
"date": "2025-01-15",
"fx_open": 1.0285,
"iv_value": 7.35,
"upperbound_1sd": 1.0352,
"upperbound_2sd": 1.0419,
"upperbound_3sd": 1.0486,
"lowerbound_1sd": 1.0218,
"lowerbound_2sd": 1.0151,
"lowerbound_3sd": 1.0084,
"created_at": "2025-01-15T17:10:27",
"updated_at": "2025-01-15T17:21:12"
}
Field Descriptions:
| Field | Type | Description |
|---|---|---|
instrument | string | Financial instrument symbol (e.g., EURUSD, XAUUSD) |
date | string | Date in YYYY-MM-DD format |
fx_open | number | Opening price for the instrument on this date |
iv_value | number | Implied volatility value for the day |
upperbound_1sd | number | Upper boundary at 1 standard deviation |
upperbound_2sd | number | Upper boundary at 2 standard deviations |
upperbound_3sd | number | Upper boundary at 3 standard deviations |
lowerbound_1sd | number | Lower boundary at 1 standard deviation |
lowerbound_2sd | number | Lower boundary at 2 standard deviations |
lowerbound_3sd | number | Lower boundary at 3 standard deviations |
created_at | string | ISO timestamp when the record was first created |
updated_at | string | ISO timestamp when the record was last updated |
Endpoints
GET /api/symbols
Description: Get list of all available instruments
Parameters: None
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://ivapi.financialsource.co/api/symbols
Example Response:
{
"symbols": ["AUDJPY", "AUDNZD", "AUDUSD", "EURAUD", "EURCAD", "EURCHF", "EURGBP", "EURJPY", "EURUSD", "GBPUSD", "..."],
"count": 28
}
GET /api/latest/{symbol}
Description: Get the most recent volatility data for an instrument
Parameters:
symbol(path) - Financial instrument symbol (e.g., EURUSD, XAUUSD)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://ivapi.financialsource.co/api/latest/EURUSD
Example Response:
{
"instrument": "EURUSD",
"date": "2025-01-15",
"fx_open": 1.0285,
"iv_value": 7.35,
"upperbound_1sd": 1.0352,
"upperbound_2sd": 1.0419,
"upperbound_3sd": 1.0486,
"lowerbound_1sd": 1.0218,
"lowerbound_2sd": 1.0151,
"lowerbound_3sd": 1.0084,
"created_at": "2025-01-15T17:10:27",
"updated_at": "2025-01-15T17:21:12"
}
GET /api/date/{symbol}/{date}
Description: Get volatility data for a specific symbol and date
Parameters:
symbol(path) - Financial instrument symbol (e.g., EURUSD, XAUUSD)date(path) - Date in YYYY-MM-DD format
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://ivapi.financialsource.co/api/date/EURUSD/2025-01-15
Example Response:
{
"instrument": "EURUSD",
"date": "2025-01-15",
"fx_open": 1.0285,
"iv_value": 7.35,
"upperbound_1sd": 1.0352,
"upperbound_2sd": 1.0419,
"upperbound_3sd": 1.0486,
"lowerbound_1sd": 1.0218,
"lowerbound_2sd": 1.0151,
"lowerbound_3sd": 1.0084,
"created_at": "2025-01-15T17:10:27",
"updated_at": "2025-01-15T17:21:12"
}
GET /api/history/{symbol}
Description: Get historical volatility data for a symbol
Parameters:
symbol(path) - Financial instrument symbol (e.g., EURUSD, XAUUSD)days(query, optional) - Number of days to retrieve (default: 30, max: 365)limit(query, optional) - Maximum number of records (default: 100, max: 1000)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://ivapi.financialsource.co/api/history/XAUUSD?days=7&limit=50"
Example Response:
{
"instrument": "XAUUSD",
"records": 7,
"data": [
{
"instrument": "XAUUSD",
"date": "2025-01-15",
"fx_open": 2665.50,
"iv_value": 15.82,
"upperbound_1sd": 2703.60,
"upperbound_2sd": 2741.70,
"upperbound_3sd": 2779.80,
"lowerbound_1sd": 2627.40,
"lowerbound_2sd": 2589.30,
"lowerbound_3sd": 2551.20,
"created_at": "2025-01-15T17:10:27",
"updated_at": "2025-01-15T17:21:12"
},
...
]
}
GET /api/compare/{symbols}
Description: Compare latest volatility data across multiple symbols
Parameters:
symbols(path) - Comma-separated list of symbols (max 10)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://ivapi.financialsource.co/api/compare/EURUSD,XAUUSD,GBPUSD
Example Response:
{
"symbols_requested": ["EURUSD", "XAUUSD", "GBPUSD"],
"symbols_found": 3,
"data": [
{
"instrument": "EURUSD",
"date": "2025-01-15",
"fx_open": 1.0285,
"iv_value": 7.35,
"upperbound_1sd": 1.0352,
"upperbound_2sd": 1.0419,
"upperbound_3sd": 1.0486,
"lowerbound_1sd": 1.0218,
"lowerbound_2sd": 1.0151,
"lowerbound_3sd": 1.0084,
"created_at": "2025-01-15T17:10:27",
"updated_at": "2025-01-15T17:21:12"
},
...
]
}
GET /api/range/{symbol}/{start_date}/{end_date}
Description: Get volatility data for a symbol within a date range
Parameters:
symbol(path) - Financial instrument symbol (e.g., EURUSD, XAUUSD)start_date(path) - Start date (YYYY-MM-DD)end_date(path) - End date (YYYY-MM-DD, max 365 days range)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://ivapi.financialsource.co/api/range/EURUSD/2025-01-01/2025-01-31
GET /api/stats/{symbol}
Description: Get statistical summary for a symbol
Parameters:
symbol(path) - Financial instrument symbol (e.g., EURUSD, XAUUSD)days(query, optional) - Period in days (default: 30, max: 365)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://ivapi.financialsource.co/api/stats/XAUUSD?days=90"
Example Response:
{
"instrument": "XAUUSD",
"period_days": 90,
"records_count": 65,
"iv_value": {
"min": 12.40,
"max": 19.85,
"avg": 15.62
}
}
GET /api/v3/percentiles/{symbol}
Description: Get volatility percentile ranking for a symbol
Parameters:
symbol(path) - Financial instrument symbol (e.g., EURUSD, XAUUSD)lookback_days(query, optional) - Historical period (default: 252, max: 1000)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://ivapi.financialsource.co/api/v3/percentiles/EURUSD?lookback_days=252"
Example Response:
{
"symbol": "EURUSD",
"current_percentile": 85.2,
"trading_signals": [
{
"signal": "SELL_VOLATILITY",
"strength": "HIGH",
"reason": "IV at extreme high levels - expect mean reversion"
}
],
"alpha_insights": {
"regime": "HIGH_VOL",
"mean_reversion_probability": 70.4
}
}
GET /api/v3/breakout-signals/{symbol}
Description: Get volatility breakout signals for a symbol
Parameters:
symbol(path) - Financial instrument symbollookback_period(query, optional) - Analysis window (default: 60, max: 250)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://ivapi.financialsource.co/api/v3/breakout-signals/EURUSD"
Example Response:
{
"symbol": "EURUSD",
"breakout_signals": [
{
"signal": "VOLATILITY_COMPRESSION",
"probability": 75.2,
"time_horizon": "5-15 days",
"trade_setup": "Long straddles/strangles"
}
]
}
GET /api/v3/correlations/volatility
Description: Get cross-asset volatility correlations
Parameters:
symbols(query, required) - Comma-separated symbols (2-10 symbols)rolling_window(query, optional) - Correlation window (default: 30, max: 90)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://ivapi.financialsource.co/api/v3/correlations/volatility?symbols=EURUSD,GBPUSD,XAUUSD"
Example Response:
{
"correlation_matrix": [
{
"pair": "EURUSD/GBPUSD",
"correlation": 0.7234,
"strength": "STRONG"
}
],
"arbitrage_opportunities": [
{
"pair": "EURUSD/GBPUSD",
"signal": "CONVERGENCE_TRADE",
"z_score": 2.15,
"trade_direction": "SELL EURUSD, BUY GBPUSD"
}
]
}
GET /api/search
Description: Search for symbols by pattern
Parameters:
q(query) - Search query (minimum 1 character)
Example Request:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://ivapi.financialsource.co/api/search?q=EUR"
Example Response:
{
"query": "EUR",
"symbols": ["EURAUD", "EURCAD", "EURCHF", "EURGBP", "EURJPY", "EURMXN", "EURNOK", "EURNZD", "EURSEK", "EURUSD"],
"count": 10
}
Error Codes
| Status Code | Description | Example Response |
|---|---|---|
| 400 | Bad Request | {"error": "Invalid date format. Use YYYY-MM-DD"} |
| 401 | Unauthorized | {"error": "Invalid API key"} |
| 403 | Forbidden | {"error": "Admin access required"} |
| 404 | Not Found | {"error": "No data found for symbol EURUSD"} |
| 429 | Rate Limited | {"error": "Daily request limit exceeded"} |
| 500 | Server Error | {"error": "Internal server error"} |
Rate Limiting
API requests are limited based on your tier. Limits are designed for realistic daily volatility data usage:
| Tier | Daily Limit | Monthly Limit | Best For |
|---|---|---|---|
| Professional | 250 requests | 6,000 requests | Professional trading systems, multiple apps |
| Enterprise | 1,000 requests | 25,000 requests | Institutional use, high-volume applications |
Rate limiting is enforced on both daily and monthly basis. Limits reset at midnight UTC daily and on the 1st of each month.
Code Examples
Python Example:
import requests
api_key = "YOUR_API_KEY"
base_url = "https://ivapi.financialsource.co/api"
headers = {
"Authorization": f"Bearer {api_key}"
}
# Get latest data for EURUSD
response = requests.get(
f"{base_url}/latest/EURUSD",
headers=headers
)
if response.status_code == 200:
data = response.json()
print(f"EURUSD IV: {data['iv_value']}")
print(f"Upper 1SD: {data['upperbound_1sd']}")
print(f"Lower 1SD: {data['lowerbound_1sd']}")
else:
print(f"Error: {response.json()['error']}")
JavaScript Example:
const apiKey = "YOUR_API_KEY";
const baseUrl = "https://ivapi.financialsource.co/api";
async function getLatestData(symbol) {
try {
const response = await fetch(
`${baseUrl}/latest/${symbol}`,
{
headers: {
"Authorization": `Bearer ${apiKey}`
}
}
);
if (response.ok) {
const data = await response.json();
console.log(`${symbol} IV:`, data.iv_value);
console.log(`Upper 1SD:`, data.upperbound_1sd);
console.log(`Lower 1SD:`, data.lowerbound_1sd);
return data;
} else {
const error = await response.json();
console.error("Error:", error.error);
}
} catch (error) {
console.error("Network error:", error);
}
}
getLatestData("EURUSD");