ARIMA, Chronos-T5, and LSTM models behind a single REST endpoint. Send a list of numbers, get back point forecasts with calibrated 80% and 95% confidence intervals. No infrastructure, no training.
No ML background needed. No model training. No infrastructure to provision.
Create a free account, pick a plan (BASIC is free — no credit card), and copy your API key. Takes 2 minutes.
Send a JSON array of historical values to /v1/forecast/univariate with a horizon and frequency. That's it.
Get back point forecasts, 80% and 95% prediction intervals, diagnostics (trend, seasonality, stationarity), and credit usage.
Pass "model": "auto" to let the API select, or specify one explicitly. The API automatically falls back to ARIMA if the GPU backend is unavailable.
| Model ID | Architecture | Backend | Best for | Credits/call | Avg latency |
|---|---|---|---|---|---|
| arima | AutoARIMA (statsforecast) | CPU local | Short series (<200 obs), interpretable output, fast turnaround | 1 | <300ms |
| chronos | Chronos-T5-Small (Amazon, zero-shot) | GPU · Modal | General-purpose, any domain, any frequency | 1 | 1–4s |
| lstm | Custom LSTM (PyTorch) | GPU · Modal | Long series (>500 obs) with strong seasonal patterns | 2 | 1–3s |
| ensemble | Weighted average (all models) | GPU · Modal | Maximum accuracy when cost is secondary | 5 | 3–8s |
| auto | Automatic model selection | — | Unknown data — let the API decide | varies | varies |
Automatic fallback:
If the GPU backend (Modal.com) is unreachable, the API silently falls back to ARIMA and sets
fallback_used: true in the response. Your request always completes.
Rolling-window backtesting — 5 windows per dataset. Source code and raw JSON results are available in the GitHub repository. No cherry-picked metrics.
| Dataset | Domain | Frequency | Model | Horizon | MAE | RMSE | MAPE | sMAPE |
|---|---|---|---|---|---|---|---|---|
| ETT-h1 | Electricity | Hourly | arima | 24h | 2.4524 | 2.9405 | 10.12% | 10.74% |
| Exchange Rate | Finance (FX) | Daily | arima | 30d | 0.0085 | 0.0100 | 1.13% | 1.13% |
| M5-sample | Retail demand | Daily | arima | 14d | 9.0427 | 10.5617 | 7.63% | 7.43% |
ETT-h1: ETDataset — Exchange Rate: Time-Series-Library — M5-sample: synthetic retail demand with M5-style weekly seasonality. Methodology: 5-window rolling backtesting, evaluated on held-out test windows.
Honest comparison. TSFA is not the right tool for every use case — but for univariate forecasting with a REST API, it's the simplest and cheapest path.
| TSFA | AWS Forecast | Azure TSI | Nixtla TimeGPT | DIY (statsforecast) | |
|---|---|---|---|---|---|
| Setup time | ✓ <5 min | Hours (IAM, S3, groups) | Hours (workspace) | Minutes | Days (infra + tuning) |
| PRO-equivalent cost | ✓ $49/month | $200–500+/month | $150–400+/month | $100+/month at 10K calls | $30–100/month + your time |
| Confidence intervals | ✓ 80% + 95% | ✓ Yes | Limited | ✓ Yes | Manual |
| Zero-shot (no training) | ✓ Chronos | ✗ | ✗ | ✓ TimeGPT | ✗ |
| Public benchmarks | ✓ Reproducible | ✗ | ✗ | Partial | N/A |
| Auto ARIMA fallback | ✓ Automatic | ✗ | ✗ | ✗ | Manual |
| Multivariate (covariates) | Phase 2 | ✓ Yes | ✓ Yes | ✓ Yes | Manual |
Honest caveat: TSFA does not yet support multivariate forecasting with covariates (Phase 2). If you need exogenous variables today, Nixtla or AWS Forecast are better fits.
Three domains where TSFA is production-ready today.
Forecast weekly demand for hundreds of SKUs simultaneously using the batch endpoint. Each product's history is independent — perfect for concurrent processing.
POST /v1/forecast/batchauto (typically selects ARIMA on daily retail data)Forecast hourly electricity consumption for the next 24 hours. Use frequency: "H" and horizon: 24. The 80% prediction interval directly translates to reserve scheduling requirements.
POST /v1/forecast/univariatechronos (zero-shot, handles hourly patterns)Forecast FX rates, stock indices, or economic indicators. Exchange rate data is near-stationary — ARIMA achieves 1.13% MAPE on this type of series. Use /v1/validate to backtest before deploying in production.
POST /v1/forecast/univariatearima (1.13% MAPE on FX benchmark)POST /v1/validate
Base URL: https://api.eymdey-network.com/v1 — all requests require X-RapidAPI-Key header.
Copy-paste examples for the three most common use cases. Replace YOUR_KEY with your RapidAPI key.
import requests # Install: pip install requests url = "https://api.eymdey-network.com/v1/forecast/univariate" headers = { "X-RapidAPI-Key": "YOUR_KEY", "Content-Type": "application/json", } payload = { "series": [120, 132, 128, 145, 139, 152, 148, 160, 155, 168, 163, 175], "horizon": 7, "frequency": "D", "model": "auto", "confidence_levels": [0.80, 0.95], } resp = requests.post(url, json=payload, headers=headers) resp.raise_for_status() data = resp.json() print(data["model_used"]) # "arima" or "chronos" print(data["forecast"]["mean"]) # [176.3, 179.1, ...] print(data["forecast"]["lower_95"]) # 95% lower bound print(data["diagnostics"]["trend"]) # "upward" print(data["meta"]["credits_used"]) # 1
// Node.js or browser fetch const resp = await fetch("https://api.eymdey-network.com/v1/forecast/univariate", { method: "POST", headers: { "X-RapidAPI-Key": "YOUR_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ series: [120, 132, 128, 145, 139, 152, 148, 160, 155, 168, 163, 175], horizon: 7, frequency: "D", model: "auto", confidence_levels: [0.80, 0.95], }), }); if (!resp.ok) throw new Error(`HTTP ${resp.status}`); const data = await resp.json(); console.log(data.model_used); // "arima" console.log(data.forecast.mean); // [176.3, ...] console.log(data.forecast.lower_95); // 95% lower bound console.log(data.diagnostics.trend); // "upward" console.log(data.meta.credits_used); // 1
# Basic forecast curl -X POST "https://api.eymdey-network.com/v1/forecast/univariate" \ -H "X-RapidAPI-Key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "series": [120, 132, 128, 145, 139, 152, 148, 160, 155, 168, 163, 175], "horizon": 7, "frequency": "D", "model": "auto", "confidence_levels": [0.80, 0.95] }' # Check your credit usage curl "https://api.eymdey-network.com/v1/usage" \ -H "X-RapidAPI-Key: YOUR_KEY" # List available models curl "https://api.eymdey-network.com/v1/models" \ -H "X-RapidAPI-Key: YOUR_KEY"
{
"status": "success",
"model_used": "arima", // model that actually ran
"forecast": {
"timestamps": ["2024-01-13", "2024-01-14", "..."],
"mean": [178.2, 181.5, 184.8, "..."], // point forecast
"lower_80": [171.0, 173.5, 176.0, "..."], // 80% lower bound
"upper_80": [185.4, 189.5, 193.6, "..."], // 80% upper bound
"lower_95": [164.5, 166.8, 169.2, "..."], // 95% lower bound
"upper_95": [191.9, 196.2, 200.4, "..."] // 95% upper bound
},
"diagnostics": {
"trend": "upward", // "upward" | "downward" | "stable"
"seasonality_detected": false,
"seasonality_period": null,
"series_length": 12,
"missing_values": 0,
"stationarity": "non_stationary" // ADF test result
},
"meta": {
"inference_time_ms": 234.0,
"request_id": "req_abc123", // use in bug reports
"credits_used": 1
}
}
All plans include confidence intervals, diagnostics, and backtesting. Upgrade or cancel anytime via RapidAPI.
arima = 1 credit ·
chronos = 1 credit ·
lstm = 2 credits ·
ensemble = 5 credits ·
Batch = N series × model credits ·
Validate = N windows × model credits
All errors follow the same JSON structure: {"status":"error","code":"...","message":"...","details":null}
Retry-After: 60 header. Slow down your requests.
fallback_used: true).
request_id.
Answers to the most common questions.
"fallback_used": true in the meta section. You are only charged 1 credit (ARIMA cost), not the GPU model cost. Your request always completes.T (minute), H (hourly), D (daily), W (weekly), M (monthly), Q (quarterly), Y (yearly), auto (infer from timestamps). Pass "auto" if you provide timestamps in ISO 8601 format and want the API to detect frequency automatically./v1/validate endpoint will tell you how well the chosen model performs on your specific data length.timestamps array of ISO 8601 strings (e.g. ["2024-01-01", "2024-01-08"]) aligned with your series array. The response forecast.timestamps will then continue from the last observed date at the correct interval. Without timestamps, the response still returns relative step indices.GET /v1/usage endpoint shows your current period, credits_used, credits_remaining, and credits_limit.