curl -X POST "https://api.innova-trading.com/api/external/indicators/my_signals" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"symbol": "EURUSD",
"timeframe": 60,
"indicator_name": "My Trading Signals",
"points": [
{
"time": 1765540800,
"type": "low",
"price": 1.1725,
"label": "BUY",
"color": "#3b82f6",
"shape": "arrowUp",
"size": 2
},
{
"time": 1765540800,
"type": "low",
"price": 1.1700,
"label": "SL",
"color": "#ef4444",
"shape": "square",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1750,
"label": "TP1",
"color": "#22c55e",
"shape": "circle",
"size": 1
}
],
"metadata": {
"signal_type": "BUY",
"strategy": "ICT"
}
}'
import requests
signal = {
"symbol": "EURUSD",
"timeframe": 60,
"indicator_name": "My Trading Signals",
"points": [
{
"time": 1765540800,
"type": "low",
"price": 1.1725,
"label": "BUY",
"color": "#3b82f6",
"shape": "arrowUp",
"size": 2
},
{
"time": 1765540800,
"type": "low",
"price": 1.1700,
"label": "SL",
"color": "#ef4444",
"shape": "square",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1750,
"label": "TP1",
"color": "#22c55e",
"shape": "circle",
"size": 1
}
]
}
response = requests.post(
"https://api.innova-trading.com/api/external/indicators/my_signals",
json=signal,
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
)
const signal = {
symbol: "EURUSD",
timeframe: 60,
indicator_name: "My Trading Signals",
points: [
{
time: 1765540800,
type: "low",
price: 1.1725,
label: "BUY",
color: "#3b82f6",
shape: "arrowUp",
size: 2
},
{
time: 1765540800,
type: "low",
price: 1.17,
label: "SL",
color: "#ef4444",
shape: "square",
size: 1
},
{
time: 1765540800,
type: "high",
price: 1.175,
label: "TP1",
color: "#22c55e",
shape: "circle",
size: 1
}
]
};
const response = await fetch(
"https://api.innova-trading.com/api/external/indicators/my_signals",
{
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify(signal)
}
);
{
"success": true,
"indicator_id": "my_signals",
"points_received": 3,
"symbol": "EURUSD",
"timeframe": 60,
"expires_at": "2025-12-13T12:00:00Z",
"message": "Indicator data stored successfully"
}
{
"error": "validation_error",
"message": "Point 0: type must be 'high' or 'low'",
"point_index": 0
}
External Indicators
Submit Indicator
Submit trading signals to be displayed on the chart
POST
/
api
/
external
/
indicators
/
{indicator_id}
curl -X POST "https://api.innova-trading.com/api/external/indicators/my_signals" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"symbol": "EURUSD",
"timeframe": 60,
"indicator_name": "My Trading Signals",
"points": [
{
"time": 1765540800,
"type": "low",
"price": 1.1725,
"label": "BUY",
"color": "#3b82f6",
"shape": "arrowUp",
"size": 2
},
{
"time": 1765540800,
"type": "low",
"price": 1.1700,
"label": "SL",
"color": "#ef4444",
"shape": "square",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1750,
"label": "TP1",
"color": "#22c55e",
"shape": "circle",
"size": 1
}
],
"metadata": {
"signal_type": "BUY",
"strategy": "ICT"
}
}'
import requests
signal = {
"symbol": "EURUSD",
"timeframe": 60,
"indicator_name": "My Trading Signals",
"points": [
{
"time": 1765540800,
"type": "low",
"price": 1.1725,
"label": "BUY",
"color": "#3b82f6",
"shape": "arrowUp",
"size": 2
},
{
"time": 1765540800,
"type": "low",
"price": 1.1700,
"label": "SL",
"color": "#ef4444",
"shape": "square",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1750,
"label": "TP1",
"color": "#22c55e",
"shape": "circle",
"size": 1
}
]
}
response = requests.post(
"https://api.innova-trading.com/api/external/indicators/my_signals",
json=signal,
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
)
const signal = {
symbol: "EURUSD",
timeframe: 60,
indicator_name: "My Trading Signals",
points: [
{
time: 1765540800,
type: "low",
price: 1.1725,
label: "BUY",
color: "#3b82f6",
shape: "arrowUp",
size: 2
},
{
time: 1765540800,
type: "low",
price: 1.17,
label: "SL",
color: "#ef4444",
shape: "square",
size: 1
},
{
time: 1765540800,
type: "high",
price: 1.175,
label: "TP1",
color: "#22c55e",
shape: "circle",
size: 1
}
]
};
const response = await fetch(
"https://api.innova-trading.com/api/external/indicators/my_signals",
{
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify(signal)
}
);
{
"success": true,
"indicator_id": "my_signals",
"points_received": 3,
"symbol": "EURUSD",
"timeframe": 60,
"expires_at": "2025-12-13T12:00:00Z",
"message": "Indicator data stored successfully"
}
{
"error": "validation_error",
"message": "Point 0: type must be 'high' or 'low'",
"point_index": 0
}
Request
string
required
Unique identifier for your indicator. Use alphanumeric characters and underscores only.Examples:
my_signals, smart_money_v2, inside_bar_detectorBody Parameters
string
required
Trading symbol (e.g.,
EURUSD)integer
required
Timeframe in minutes (1, 5, 15, 60, 240, 1440)
string
required
Human-readable name displayed in the UI
string
default:"1.0"
Version of your indicator
array
required
Array of signal points to display on the chart
Show Point Object
Show Point Object
integer
required
Unix timestamp of the bar. Must match a bar from the /bars endpoint.
string
required
Position relative to the bar:
high- Above the candlesticklow- Below the candlestick
float
required
Price level where the point appears
string
Text label (e.g.,
BUY, SELL, TP1, SL)string
Hex color code (e.g.,
#22c55e for green)string
default:"circle"
Shape:
circle, arrowUp, arrowDown, squareinteger
default:"1"
Size: 1 (small), 2 (medium), 3 (large)
array
Array of horizontal lines to display on the chart (e.g., SL/TP levels that extend across multiple bars)
Show Line Object
Show Line Object
string
required
Unique identifier for the line (e.g.,
signal_001_sl)float
required
Price level where the line is drawn
integer
required
Unix timestamp where the line starts
integer
required
Number of bars the line extends forward
string
Text label (e.g.,
SL, TP1, Entry)string
Hex color code (e.g.,
#ef4444 for red)string
default:"solid"
Line style:
solid, dashed, dottedinteger
default:"1"
Line width: 1, 2, or 3
object
Optional metadata for your indicator (analytics, description, etc.)
Response
boolean
Indicates if the signal was stored successfully
string
The indicator ID
integer
Number of points that were stored
integer
Number of lines that were stored
string
The symbol
integer
The timeframe
string
ISO 8601 datetime when the data will expire (24 hours)
curl -X POST "https://api.innova-trading.com/api/external/indicators/my_signals" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"symbol": "EURUSD",
"timeframe": 60,
"indicator_name": "My Trading Signals",
"points": [
{
"time": 1765540800,
"type": "low",
"price": 1.1725,
"label": "BUY",
"color": "#3b82f6",
"shape": "arrowUp",
"size": 2
},
{
"time": 1765540800,
"type": "low",
"price": 1.1700,
"label": "SL",
"color": "#ef4444",
"shape": "square",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1750,
"label": "TP1",
"color": "#22c55e",
"shape": "circle",
"size": 1
}
],
"metadata": {
"signal_type": "BUY",
"strategy": "ICT"
}
}'
import requests
signal = {
"symbol": "EURUSD",
"timeframe": 60,
"indicator_name": "My Trading Signals",
"points": [
{
"time": 1765540800,
"type": "low",
"price": 1.1725,
"label": "BUY",
"color": "#3b82f6",
"shape": "arrowUp",
"size": 2
},
{
"time": 1765540800,
"type": "low",
"price": 1.1700,
"label": "SL",
"color": "#ef4444",
"shape": "square",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1750,
"label": "TP1",
"color": "#22c55e",
"shape": "circle",
"size": 1
}
]
}
response = requests.post(
"https://api.innova-trading.com/api/external/indicators/my_signals",
json=signal,
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
)
const signal = {
symbol: "EURUSD",
timeframe: 60,
indicator_name: "My Trading Signals",
points: [
{
time: 1765540800,
type: "low",
price: 1.1725,
label: "BUY",
color: "#3b82f6",
shape: "arrowUp",
size: 2
},
{
time: 1765540800,
type: "low",
price: 1.17,
label: "SL",
color: "#ef4444",
shape: "square",
size: 1
},
{
time: 1765540800,
type: "high",
price: 1.175,
label: "TP1",
color: "#22c55e",
shape: "circle",
size: 1
}
]
};
const response = await fetch(
"https://api.innova-trading.com/api/external/indicators/my_signals",
{
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify(signal)
}
);
{
"success": true,
"indicator_id": "my_signals",
"points_received": 3,
"symbol": "EURUSD",
"timeframe": 60,
"expires_at": "2025-12-13T12:00:00Z",
"message": "Indicator data stored successfully"
}
{
"error": "validation_error",
"message": "Point 0: type must be 'high' or 'low'",
"point_index": 0
}
Complete Trading Signal Example
A professional trading signal includes Entry, Stop Loss, and multiple Take Profits:{
"symbol": "EURUSD",
"timeframe": 60,
"indicator_name": "Smart Money Signals",
"points": [
{
"time": 1765540800,
"type": "low",
"price": 1.1725,
"label": "ENTRY",
"color": "#3b82f6",
"shape": "arrowUp",
"size": 2
},
{
"time": 1765540800,
"type": "low",
"price": 1.1695,
"label": "SL",
"color": "#ef4444",
"shape": "square",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1755,
"label": "TP1",
"color": "#22c55e",
"shape": "circle",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1785,
"label": "TP2",
"color": "#22c55e",
"shape": "circle",
"size": 1
},
{
"time": 1765540800,
"type": "high",
"price": 1.1815,
"label": "TP3",
"color": "#22c55e",
"shape": "circle",
"size": 1
}
],
"metadata": {
"signal_type": "BUY",
"entry_price": 1.1725,
"stop_loss": 1.1695,
"risk_pips": 30,
"risk_reward": "1:3",
"strategy": "Order Block + FVG"
}
}
Color Reference
| Use Case | Color | Hex |
|---|---|---|
| Buy / Long | Blue | #3b82f6 |
| Sell / Short | Orange | #f97316 |
| Stop Loss | Red | #ef4444 |
| Take Profit | Green | #22c55e |
| Neutral | Yellow | #eab308 |
Shape Reference
| Shape | Best For |
|---|---|
arrowUp | Buy signals |
arrowDown | Sell signals |
circle | Take profit levels |
square | Stop loss, important levels |
Data expires after 24 hours. Your service should re-submit signals periodically to keep them visible.
You can submit multiple points with the same
time to show Entry, SL, and TPs on the same candle.Using Lines for SL/TP Levels
Lines are perfect for showing Stop Loss and Take Profit levels that extend across multiple bars:{
"symbol": "EURUSD",
"timeframe": 60,
"indicator_name": "Inside Bar Signals",
"points": [
{
"time": 1765540800,
"type": "low",
"price": 1.1725,
"label": "BUY",
"color": "#3b82f6",
"shape": "arrowUp",
"size": 2
}
],
"lines": [
{
"id": "signal_001_sl",
"price": 1.1695,
"start_time": 1765540800,
"bars": 10,
"label": "SL",
"color": "#ef4444",
"style": "dashed",
"width": 1
},
{
"id": "signal_001_tp1",
"price": 1.1755,
"start_time": 1765540800,
"bars": 10,
"label": "TP1",
"color": "#22c55e",
"style": "dotted",
"width": 1
},
{
"id": "signal_001_tp2",
"price": 1.1785,
"start_time": 1765540800,
"bars": 10,
"label": "TP2",
"color": "#10b981",
"style": "dotted",
"width": 1
},
{
"id": "signal_001_tp3",
"price": 1.1815,
"start_time": 1765540800,
"bars": 10,
"label": "TP3",
"color": "#059669",
"style": "dotted",
"width": 1
}
]
}
Line Style Reference
| Style | Best For |
|---|---|
solid | Entry levels, important zones |
dashed | Stop Loss levels |
dotted | Take Profit targets |
Lines vs Points: Use points for markers (arrows, circles) on specific candles. Use lines for horizontal levels that extend across multiple bars (SL/TP zones).
⌘I