Inverse Head and Shoulders
Category: Chart patterns · Updated November 2026
The TAAPI.IO Inverse Head and Shoulders API returns l1 timestamp, l1 price, h1 timestamp, h1 price values for the Inverse Head and Shoulders indicator as JSON, for crypto pairs and US stocks. Send an exchange, symbol and timeframe to get real-time or historical data, with no candles to download and no calculations to maintain.
| Spec | Value |
|---|---|
| Endpoint | GET https://v2.taapi.io/indicator/inverseheadandshoulders |
| Outputs | l1_timestamp, l1_price, h1_timestamp, h1_price, l2_timestamp, l2_price and more |
| Markets | Binance, Binance Futures, Bybit, Gate.io, Kraken and US stocks |
| Timeframes | 1m to 1w |
| Delivery | REST, bulk and WebSocket |
Get Inverse Head and Shoulders with one API call
This request returns Inverse Head and Shoulders for BTCUSDT on 1-hour Binance candles. Add your API key to run it here.
curl -G https://v2.taapi.io/indicator/inverseheadandshoulders \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "exchange=binance" \ --data-urlencode "symbol=BTCUSDT" \ --data-urlencode "timeframe=1h"
import requests
resp = requests.get(
'https://v2.taapi.io/indicator/inverseheadandshoulders',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
params={'exchange': 'binance', 'symbol': 'BTCUSDT', 'timeframe': '1h'},
)
print(resp.json())const params = new URLSearchParams({"exchange": "binance", "symbol": "BTCUSDT", "timeframe": "1h"});
const res = await fetch(`https://v2.taapi.io/indicator/inverseheadandshoulders?${params}`, {
headers: { Authorization: 'Bearer YOUR_API_KEY' },
});
console.log(await res.json());Inverse Head and Shoulders API response
This response came from the live API on 9 November 2026 for ETHUSDT on 1h candles. Long lists are shortened here.
{
"l1_timestamp": [1792270800],
"l1_price": [2356.79],
"h1_timestamp": [1792292400],
"h1_price": [2425.53],
"l2_timestamp": [1792350000],
"l2_price": [2329],
"h2_timestamp": [1792400400],
"h2_price": [2437.11],
"l3_timestamp": [1792418400],
"l3_price": [2385.18],
"neckline_left_timestamp": [1792292400],
"neckline_left_price": [2425.53],
"neckline_right_timestamp": [1792422000],
"neckline_right_price": [2439.4260000000004],
"neckline_at_l2": [2431.706],
"breakout_occurred": [true],
"is_confirmed": [true],
"breakout_timestamp": [1792422000],
"breakout_price": [2405.3175],
"breakout_neckline_price": [2439.4260000000004],
"projection_price": [2542.1320000000005],
"direction": ["bullish"],
"status": ["confirmed"],
"status_reason": ["breakout_below_neckline"],
"pattern_index": [1],
"timestamp": [1794218400]
}| Field | Type | Description |
|---|---|---|
l1_timestamp | number[] | Unix timestamp of the left shoulder trough (L1). |
l1_price | number[] | Price level at the left shoulder trough (L1). |
h1_timestamp | number[] | Unix timestamp of the first peak (H1) separating the left shoulder from the head. |
h1_price | number[] | Price level at the first peak (H1). |
l2_timestamp | number[] | Unix timestamp of the head trough (L2). |
l2_price | number[] | Price level at the head trough (L2). |
h2_timestamp | number[] | Unix timestamp of the second peak (H2) separating the head from the right shoulder. |
h2_price | number[] | Price level at the second peak (H2). |
l3_timestamp | number[] | Unix timestamp of the right shoulder trough (L3). |
l3_price | number[] | Price level at the right shoulder trough (L3). |
neckline_left_timestamp | number[] | Unix timestamp of the neckline start anchor (H1). |
neckline_left_price | number[] | Price level of the neckline start anchor (H1). |
neckline_right_timestamp | number[] | Timestamp denoting where the neckline extends to on the right. |
neckline_right_price | number[] | The price level of the neckline at the right endpoint. |
neckline_at_l2 | number[] | The calculated price of the neckline directly above the head trough (L2), used to measure pattern height. |
breakout_occurred | boolean[] | Boolean flag (true/false) indicating if price successfully broke above the neckline. |
is_confirmed | boolean[] | Explicit boolean flag (true/false) indicating if the Inverse Head and Shoulders pattern is fully confirmed (synonymous with breakout_occurred). |
breakout_timestamp | number[] | Unix timestamp of the candle that triggered the confirmation breakout. |
breakout_price | number[] | The closing price of the candle that triggered the confirmation breakout. |
breakout_neckline_price | number[] | The specific price of the sloped neckline at the exact moment of the breakout. |
projection_price | number[] | The theoretical upside price target calculated by adding the pattern's height to the breakout neckline price. |
direction | string[] | The inherent bias of the pattern. Always 'bullish' for an Inverse Head and Shoulders. |
status | string[] | The current state of the pattern: 'forming', 'confirmed', or 'invalidated'. |
status_reason | string[] | Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout'). |
pattern_index | number[] | A sequential integer index uniquely identifying this specific pattern instance. |
timestamp | integer[] | Unix time of each candle, in seconds |
Inverse Head and Shoulders API parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
exchange | string | Yes | — | binance, binancefutures, bybit, gateio, kraken or stocks |
symbol | string | Yes | — | Pair or ticker, e.g. BTCUSDT or AAPL |
timeframe | string | Yes | — | 1m 5m 15m 1h 4h 1d 1w |
depth | integer | No | 10 | Lookback and lookforward period for pivot detection. Controls the width of structural swings. |
deviationATR | number | No | 1 | Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR. |
deviationType | string | No | atr | Type of deviation filter to use: 'atr' (Average True Range) or 'percent'. |
source | string | No | wick | Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection. |
heikinashi | boolean | No | True | Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices. |
atrPeriod | integer | No | 14 | The lookback period used for the Average True Range (ATR) calculation if deviationType is 'atr'. |
headProminenceATR | number | No | 1.2 | Minimum required prominence of the head relative to both shoulders, normalized by ATR. |
shoulderToleranceATR | number | No | 1.5 | Maximum allowed price difference between the left and right shoulders, normalized by ATR. |
minDepthATR | number | No | 1 | Minimum depth of the two peaks (H1 and H2), ensuring distinct shoulders. |
symmetryMin | number | No | 0.5 | Minimum ratio of time spent forming the left half vs the right half of the pattern. |
symmetryMax | number | No | 3.5 | Maximum ratio of time spent forming the left half vs the right half of the pattern. |
breakoutLookahead | integer | No | 20 | Number of candles to look ahead after the right shoulder to confirm a breakout. |
necklineBuffer | number | No | 0.2 | ATR-based buffer above the neckline to filter out false breakouts during formation. |
results | integer | No | 1 | Number of values to return, or max |
backtrack | integer | No | 0 | Candles to skip from the most recent |
What is Inverse Head and Shoulders?
Inverse Head and Shoulders is a bullish reversal pattern with three troughs, the middle one lowest, and a neckline joining the peaks. The endpoint returns each trough and peak, the neckline and a projected target.
Inverse Head and Shoulders formula
| Output | Calculation |
|---|---|
| Target | Neckline + (neckline − head) |
How to read Inverse Head and Shoulders in your code
| Signal | Meaning | Condition |
|---|---|---|
| Forming or confirmed | Detection status | status and is_confirmed |
| Breakout | Price closed above the neckline | breakout_occurred is true |
| Target | Measured-move projection | projection_price |
Limitations: Geometric pattern detection depends on pivot settings, so tune deviationATR and depth or lookback values on your own market. A confirmed pattern is not a guaranteed move. Nothing on this page is financial advice.
Read Inverse Head and Shoulders from Python
Use backtrack=1 to read the result as of the last closed candle.
curl -G https://v2.taapi.io/indicator/inverseheadandshoulders \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "exchange=binance" \ --data-urlencode "symbol=BTCUSDT" \ --data-urlencode "timeframe=1h" \ --data-urlencode "backtrack=1"
import requests
resp = requests.get(
'https://v2.taapi.io/indicator/inverseheadandshoulders',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
params={'exchange': 'binance', 'symbol': 'BTCUSDT', 'timeframe': '1h', 'backtrack': 1},
)
data = resp.json()
print(data['l1_timestamp'])Get historical Inverse Head and Shoulders values
Add results to return a series for backtesting or charting. The last element is the most recent candle.
curl -G https://v2.taapi.io/indicator/inverseheadandshoulders \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "exchange=binance" \ --data-urlencode "symbol=BTCUSDT" \ --data-urlencode "timeframe=1h" \ --data-urlencode "results=100"
Get Inverse Head and Shoulders for multiple symbols
Combine Inverse Head and Shoulders with other indicators in one request. Each exchange, symbol and timeframe combination is one construct: Basic allows 1 per request, Pro 3 and Expert 10.
curl -X POST https://v2.taapi.io/bulk \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"constructs": [
{
"id": "btc_1h",
"exchange": "binance",
"symbol": "BTCUSDT",
"timeframe": "1h",
"indicators": [
{
"id": "inverseheadandshoulders",
"indicator": "inverseheadandshoulders"
},
{
"id": "rsi",
"indicator": "rsi"
}
]
}
]
}'Stream Inverse Head and Shoulders in real time
Subscribe over WebSocket to receive new values every 5 seconds while the candle is forming. Streaming supports 1m, 5m, 15m and 1h, and uses interval where REST uses timeframe.
{
"type": "subscribe",
"id": "inverseheadandshoulders",
"exchange": "binance",
"symbol": "BTCUSDT",
"interval": "1m",
"indicator": "inverseheadandshoulders"
}Inverse Head and Shoulders API FAQ
What does the Inverse Head and Shoulders API return?
It returns l1_timestamp, l1_price, h1_timestamp, h1_price, l2_timestamp, l2_price, h2_timestamp, h2_price, l3_timestamp, l3_price, neckline_left_timestamp, neckline_left_price, neckline_right_timestamp, neckline_right_price, neckline_at_l2, breakout_occurred, is_confirmed, breakout_timestamp, breakout_price, breakout_neckline_price, projection_price, direction, status, status_reason, pattern_index, plus a timestamp for the request. Results are JSON.
Is the latest Inverse Head and Shoulders value final?
No. The newest value belongs to the candle still forming and can change until it closes. Add backtrack=1 to read the last closed candle.
Which Inverse Head and Shoulders settings can I change?
You can set depth, deviationATR, deviationType, source, heikinashi, atrPeriod. See the parameters table above for defaults.
Can I get Inverse Head and Shoulders for US stocks?
Yes. Use exchange=stocks with a ticker such as AAPL. US stocks are included on the Pro plan and above.
Related indicators
See the full list of indicators, or start for free.