QVeris
TECHNICAL INDICATOR CONTRACT

Free RSI API: Data, Limits & Python

Make RSI reproducible by fixing the source series, interval, period, smoothing, timestamp, and evidence.

Free RSI API: Data, Limits & Python

TL;DR

Bounded-oscillator job

Retrieve a 0–100 momentum oscillator for overextension, mean-reversion context, regime analysis, and price-versus-RSI divergence.

Smoothing convention

Preserve lookback, Wilder or alternative smoothing, input price, seed method, interval, adjustment policy, and edge-case behavior.

Strategy boundary

The API should return a measurement; overbought and oversold thresholds belong to the application and vary by trend, volatility, and asset.

Where QVeris helps

QVeris helps agents discover technical-analysis capabilities and inspect their required inputs before calling them.

RSI is a calculation contract

Two APIs can both return “RSI(14)” and still disagree because source prices, interval boundaries, warm-up history, smoothing, timezone, and adjustment rules differ.

Parameter contract

ParameterDecisionEvidence to keep
symbolProvider identifier and venueMapping and asset identity
intervalMinute, hour, day, or another bar windowTimezone and session boundary
periodUsually 14, but not universalExact integer and warm-up requirement
priceClose, adjusted close, or another seriesSource field and adjustment policy
smoothingWilder, EMA-like, or provider-definedFormula or provider documentation
timestampTime assigned to each outputEvent window and provider timezone

Minimum response shape

{
  "symbol": "AAPL",
  "interval": "1day",
  "period": 14,
  "timestamp": "2026-08-06T20:00:00Z",
  "rsi": 58.42,
  "source": "provider-name"
}

API or local calculation

ApproachChoose whenRisk to control
Provider APIYou need a fast, maintained indicator endpointFormula opacity and quota
Local calculationYou control the price series and need reproducibilityData cleaning and implementation tests
Dual calculationThe signal is important enough to cross-checkDefine tolerance and disagreement handling

Free RSI API response fields and parameters

An RSI indicator API returns a momentum oscillator, normally on a 0–100 scale, derived from average gains and losses over a lookback period. Fourteen periods is common, but interval, price series, smoothing, precision, and warm-up behavior differ. Treat each provider’s documentation as authoritative.

Confirm Wilder smoothing or another variant

Many services say “RSI” but use Wilder’s recursive averages, simple rolling averages, or a library-specific seed. Parameter length alone is not enough to reproduce the oscillator.

Test boundary behavior after one-sided moves

Check how the API handles zero average loss, zero average gain, flat prices, and insufficient history. Valid implementations may return 100, 0, 50, or null in specific edge states.

Treat 70 and 30 as context, not universal orders

Overbought and oversold thresholds depend on trend, volatility, interval, and asset. The API should return the measurement; strategy rules belong in your application and must be tested separately.

Preserve price source and completed-bar status

Record close versus adjusted close, interval, lookback, smoothing, timezone, and whether the current bar is final. Divergence analysis is meaningless if price and RSI use different timestamps.

Define divergence without hindsight

Bullish or bearish divergence requires explicit pivot rules, a comparison window, minimum price and RSI separation, and a confirmation time. If the application waits for future bars to confirm a pivot, label the signal at the time it became knowable—not at the earlier turning point—or a backtest will contain look-ahead bias.

Keep intervals independent

A 14-period RSI on one-minute bars is not interchangeable with the same period on hourly or daily bars. Store interval and session with every value, resample from a documented boundary, and do not join multi-timeframe signals until all contributing candles were complete at the decision timestamp.

Choose API output or local calculation deliberately

A direct endpoint is convenient for a few symbols and fixed parameters. Local calculation can be cheaper and more reproducible when you already retrieve OHLCV bars, need many periods, or want exact control over smoothing and seeding. Compare data rights and bar-call costs as part of the decision.

How to compare free technical indicator APIs

RequirementWhat to inspectWhy it mattersFailure signal
Endpoint accessIs RSI included in the free tier, demo, or paid plan?A free key may not unlock every indicator.Pricing and docs disagree.
FieldsRSI value, timestamp, symbol, interval, metadata.Determines whether the response answers the task.Only a chart or opaque score.
ParametersSymbol, interval, time period, and series type.Makes output reproducible and comparable.Undocumented fixed defaults.
Quota & rightsRequest weights, 429 behavior, caching, display, storage.Defines safe polling and permitted use.“Unlimited” without written terms.

Documentation links

Free RSI API options versus calculating RSI locally

A documented RSI endpoint is convenient, but it is not automatically the cheapest or most reproducible choice. If the application already retrieves completed OHLCV bars, calculating RSI locally avoids an extra request per symbol and gives full control over smoothing, seeding, and revisions. A provider endpoint is more attractive when you need only a few values, want one normalized response across asset classes, or do not want to maintain indicator code.

Option to testDocumented capabilityBest fitFree-tier question
Alpha Vantage RSIThe official RSI function accepts symbol, interval, period, and series type, supports equities plus FX or crypto symbols, and returns JSON or CSV.A few direct indicator lookups across several asset classes with explicit parameters.A free API key is available, but freshness, request limits, underlying bar entitlement, and commercial use must be checked for the intended interval.
Twelve Data RSITwelve Data documents a dedicated RSI endpoint for a specified instrument and period within its technical-indicator API family.Applications already using Twelve Data symbols and time-series conventions for multiple markets.Verify whether RSI is included in the current free plan, its credit weight, batch behavior, available intervals, and source-market delay.
Financial Modeling Prep RSIFMP publishes a stable Relative Strength Index endpoint under its technical-indicators API.Teams that already use FMP security identifiers and want indicator output beside other financial datasets.Do not infer access from the public documentation page. Confirm the current subscription tier, historical depth, interval coverage, quota, and data license.
Local calculation from OHLCVCompute gains and losses from a controlled close series, seed the initial averages, and apply Wilder's recursive smoothing under your own versioned implementation.Large universes, many parameter sets, research reproducibility, and workflows that already license the source bars.The bars are not automatically free to store or redistribute. Preserve their source, adjustment policy, completed-bar state, and license.

Use a numerical fixture to prove two RSI implementations agree

Save at least 40 completed closes containing a flat segment, a one-direction run, a gap, and one adjusted-price event. Request a 14-period close-based RSI from the provider, then recalculate the same timestamps locally. Compare the first non-null timestamp, seed window, rounding, and every later value within a documented tolerance. If disagreement begins only after a corporate action or session gap, investigate the price series and adjustment rules before blaming the formula.

Decision rule: use the direct API when it passes the fixture, its quota covers the complete polling workload, and its bar rights match the product. Calculate locally when the same licensed OHLCV already powers several indicators or when exact reproducibility matters more than one-call convenience.

RSI API for Python: a safe integration path

Use a small local implementation as a numerical fixture for the provider response. The function below applies Wilder’s recursive smoothing, preserves the warm-up rows as None, and defines the flat, all-gain, and all-loss boundaries explicitly.

def wilder_rsi(closes: list[float], period: int = 14) -> list[float | None]:
    if period < 2:
        raise ValueError("period must be at least 2")
    if any(value is None or value <= 0 for value in closes):
        raise ValueError("closes must contain positive completed-bar values")
    if len(closes) < period + 1:
        return [None] * len(closes)

    changes = [current - previous for previous, current in zip(closes, closes[1:])]
    gains = [max(change, 0.0) for change in changes]
    losses = [max(-change, 0.0) for change in changes]
    average_gain = sum(gains[:period]) / period
    average_loss = sum(losses[:period]) / period
    values: list[float | None] = [None] * period

    def score(gain: float, loss: float) -> float:
        if gain == 0 and loss == 0:
            return 50.0
        if loss == 0:
            return 100.0
        if gain == 0:
            return 0.0
        relative_strength = gain / loss
        return 100.0 - (100.0 / (1.0 + relative_strength))

    values.append(score(average_gain, average_loss))
    for gain, loss in zip(gains[period:], losses[period:]):
        average_gain = ((period - 1) * average_gain + gain) / period
        average_loss = ((period - 1) * average_loss + loss) / period
        values.append(score(average_gain, average_loss))
    return values

Compare like with like. Run the fixture on the provider’s exact completed close series and compare only after matching interval, session, timezone, adjustment mode, period, seed, and rounding. A different first non-null timestamp usually indicates a seed or warm-up difference—not random numerical noise.

1. Confirm symbol, asset class, and interval

Resolve the instrument and venue first, then choose a supported interval such as daily or one hour. Do not assume the same ticker maps across providers.

2. Send one documented RSI request

Use the provider’s official HTTP or Python example with an API key stored on the server. Inspect the unmodified JSON before writing a mapper.

3. Normalize RSI JSON data

Parse timestamps with timezone awareness, convert numeric strings safely, preserve null warm-up values, and map the RSI value and calculation metadata explicitly.

4. Add rate-limit handling and caching

Respect request weights, back off after 429 responses, cache by completed-bar cadence, and retain provider, parameters, and retrieval timestamps.

5. Recalculate a fixed RSI fixture

Save a short close-price series with flat, rising, falling, and missing intervals. Reproduce the provider's seed and smoothing method independently, compare warm-up rows and timestamps, and set an explicit numeric tolerance. Include one corporate-action date when adjusted stock prices are supported.

6. Monitor for stale or revised values

Track source-bar age, completed-candle status, null rate, quota use, schema changes, and disagreement with the fixture. If the latest RSI is stale or a historical revision changes a prior signal, expose that state rather than silently carrying a value forward.

Inspect the RSI tool contract

Inspect symbols, intervals, calculation parameters, output schema, and provider identity before calling. Continue with QVeris RSI tool details, then confirm the calling contract in the QVeris REST API reference.

Free RSI API FAQ

Is there a free API for RSI data?

Yes. Some providers offer free tiers or demos for pre-calculated RSI. Check the current pricing and endpoint documentation because a free key may exclude the RSI function.

What does an RSI API return?

A useful response normally includes timestamps and RSI values, plus metadata for symbol, interval, series type, and time period. Inspect ordering, precision, and null warm-up rows.

How do I get RSI data in Python?

Send an authenticated HTTP request with a symbol and interval, parse the JSON, convert numeric strings safely, preserve timestamps, and handle rate limits and errors.

Can I get real-time RSI data from a free API?

Possibly, but source-market entitlements and free-plan rules vary. Verify the underlying bar timestamp and documented delay instead of inferring freshness from response speed.

Free RSI API: Data, Limits & Python | QVeris Guides