Skip to content

Reference

Parameters

Every option the embed accepts, what it does, and a live chart showing it. Anything not on this page is ignored rather than passed through.

Two forms, one set of names

Each option is a data- attribute on the placeholder, or a query parameter on the iframe URL. The names and values are identical either way, so a snippet translates between the two by moving the dashes.

Placeholder + loader
<div class="vp-chart"
     data-symbol="AAPL"
     data-interval="60"
     data-theme="light"></div>
<script src="https://view.verticalprop.com/embed.js" async></script>
The same chart, as a plain iframe
<iframe src="https://view.verticalprop.com/embed?symbol=AAPL&interval=60&theme=light"
        width="100%" height="420" frameborder="0"></iframe>
That second form is for a chart on THIS site. On your own page it has no loader, so there is nothing to answer for the bars, and a third-party frame that brought no datafeed is refused, by design: we ship the chart engine, not the market data. Use the placeholder form above with data-datafeed, and see the datafeed API. It is the commonest way an embed fails on the first try, so it is said beside the snippet rather than left to be discovered.

Reference

ParameterValuesDefaultNotes
symbolA ticker, pair, or venue-qualified pairrequiredThe only required option, and the only one whose absence is an error.
interval1 5 15 30 60 240 1D 1W 1M1DMinutes as bare numbers; D, W, M for the longer frames. With a host datafeed, additional resolutions such as 3 are accepted when declared in onReady().supported_resolutions.
themelight darkdarkCan also be changed after load, see the API page.
typecandles bars line area footprintcandlesfootprint draws order flow per price level and needs a datafeed that supplies it: levels on the bars, a getFootprint method, or subscribeTrades. Without one it draws bars with no cells, never a distribution invented from the candle.
toolbartrue falsefalseThe symbol, interval, indicator and drawing controls. Off suits an article; on suits a page where the chart is the point, and on is also what gives a reader the fx dialog, which is the only door to running their own indicators.
symbolSearchtrue falsetrueShow the built-in pair selector when toolbar is on. Set false if your page has its own selector; setSymbol still works.
legendtrue falsetrueThe OHLC readout in the top-left of the plot.
priceAnimationtrue falsefalseEase the last bar's close, and the last-price line beside it, toward each live tick instead of snapping to it. Off by default, like the library and every other chart it runs on; pass true to turn it on for this embed.
localeA language tagenDisplay only. Never used to build a path or a request.
indicatorsComma-separated listing idsnoneCommunity indicators. Up to five. See the indicators page.
currencyEUR or EUR:EURUSDthe symbol’s ownDraw the chart in another currency. On your own site the rates come from YOUR feed, so name the market after the colon, see the currency page.
calendar0 · 10Draw economic-calendar releases in the time gutter. OFF unless asked for, because a CPI flag is noise on a BTC chart and it is a request we make on your reader’s behalf, see the calendar page.
timezoneEurope/Paristhe instrument’s ownThe clock the time axis is read in. An IANA name — Europe/Paris, America/New_York, UTC — and never an offset like +02:00, which cannot express daylight saving and so is wrong for half the year. Left out, the chart keeps whatever the instrument’s session implies, which is what a 24/7 crypto chart wants. An unreadable value drops and the chart still renders.
sessionsus, or label@HH:mm-HH:mm[@days],…noneTint trading sessions behind the bars. us is the two US equity bands (pre-market 04:00–09:30, after-hours 16:00–20:00); or spell your own, comma-separated, as Asia@00:00-08:00@12345. Hours are read on the symbol’s own clock, so a New York pre-market lands at 04:00 New York rather than 04:00 UTC; days is 0 = Sunday to 6 = Saturday and defaults to weekdays. The chart ships with none, because crypto trades around the clock. Colours are assigned from a fixed set; name them yourself through setSessions.
liveline, or candle,window:900,accent:3b82f6offDraw a live chart instead of the full one: a line or candles whose tip, axis and window ease toward each tick. Bare words pick the mode; key:value pairs set window, accent, value, change, momentum and exaggerate. Same datafeed as the full chart. With no interval it opens on one-minute bars. See the live charts page.
numberFormatauto · standard · european · plain · spacedautoHow every number on the chart is punctuated: standard is 1,234.56, european 1.234,56, plain 1234,56 and spaced 1 234,56. auto is the reader’s own locale, read off their browser, so a German reader of an English article still sees a thousand the way they write one. Pin a preset when the numbers must read one way for everybody.
colorsbg:0b0f19,up:26a69athe theme’s ownRepaint the chart. Roles are bg, text, grid, up, down, crosshair, muted, border, chrome and accent; values are hex, and the # is optional because it opens a fragment in a URL. Anything omitted or misspelled keeps the theme’s colour, see the styling page.
datafeedThe name of a feed your page registeredrequired off-siteAn ATTRIBUTE only, and the loader derives the rest. A chart on a site that is not ours and names no feed renders an explanation instead of drawing our bars, see the datafeed page.
datafeed is the one entry with no query-parameter form. You set data-datafeed="myfeed" and the loader appends the rest to the frame URL itself, a deliberate asymmetry, because a form with a mode flag and a separate name has a state where one is present and the other is not, which is a chart silently drawing our bars under your symbol.
A misspelled OPTION falls back to its default, because a chart that refused to render over a typo would be a blank box on your page. A SYMBOL we cannot load is an error state instead: showing a different instrument under your caption would be worse than showing nothing.

The same options, after the chart has mounted

Every parameter here is read once, when the frame loads. Several have a live equivalent through the loader, and the table below identifies which. A page that only ever renders markup can ignore it, and a page whose chart changes needs nothing else.

ParameterAfter mountNotes
symbolchart.setSymbol(s)Keeps drawings and indicators, because it changes state rather than remounting.
intervalchart.setInterval(v)
themechart.setTheme(t)Set the attribute too, or a reader on the other theme sees one frame of the wrong ground.
typechart.setChartType(t)
colorschart.setStyle({ … })Same ten role names. Merges, and outlives a setTheme.
toolbarnoThe widget builds its chrome at construction, so this decides what EXISTS rather than what is shown.
legendnoSame reason.
calendarnoSame reason, though the reader can switch the marks off from the chart's own menu.
currencynoThe picker in the toolbar is the reader's way to change it.
indicatorsnoCommunity indicators are re-synced on a timer, so a takedown reaches an open chart; the LIST is fixed at mount.
localeno
numberFormatchart.setNumberFormat(f)Same five names. auto returns to the reader's locale.
sessionschart.setSessions(b)Takes full band objects with a colour and an optional timezone, which the URL grammar cannot carry. Replaces the set; [] clears it.
livenoIt decides which chart the frame builds. chart.setSymbol and chart.setTheme still work on a live chart; the other methods drive the full chart only and are refused.
datafeednoThe chart consumes its feed at construction, so register the feed before the frame requests it. The order of the two script tags is what matters.
One capability has no parameter equivalent: adding a button of your own to the toolbar. It requires code by design, because a query string is written by whoever framed the page, and a control that reports presses is only useful to somebody who wrote the other end of it.

symbol

The instrument to draw. Four shapes resolve, and the chart picks the venue from the shape rather than asking you to name one:

ShapeExampleResolves to
AAPLAAPL, NVDA, TSLAUS equities
BTC-USDTBTC-USDT, ETH-USDTOKX spot
BINANCE:BTCUSDTor HL:BTCA named venue
^GSPC^GSPC, ^VIX, GC=F, EURUSD=XIndices, futures, FX
symbol=AAPL, a US equity.
symbol=^GSPC, an index. The caret is part of the ticker.

interval

The bar size the chart opens on. With toolbar on, the reader can change it; with the toolbar off, this is the only interval they will see.

interval=60 (hourly)
interval=1W (weekly)

With datafeed=host, the opening interval and chart.setInterval()use the host datafeed's onReady().supported_resolutions. For example, declare ["1", "3", "5"] to use data-interval="3" orchart.setInterval("3"). Unsupported opening intervals report a data error; unsupported commands reject without changing the interval. If the feed omits the list, the default intervals above apply.

Keep toolbar=true and set symbolSearch=0 in the iframe URL, or data-symbolSearch="false" on the loader element, to hide only the built-in pair selector. Your own selector can still call chart.setSymbol().

Your selector and a three-minute host chart
<div class="vp-chart"
  data-symbol="BTC-USDCX"
  data-datafeed="titan"
  data-toolbar="true"
  data-symbolSearch="false"
  data-interval="3"></div>

theme

Two themes, and no automatic matching of the reader’s system setting, an embed sits inside your page, so it should follow YOUR design rather than their OS. If your site has a theme toggle, send setTheme when it flips.

theme=dark (default)
theme=light

type

Five chart types. candles and bars show the full range of each period; line and area show closes only, which reads better at small sizes and in a column of prose. footprint is the fifth and is not drawn below: it shows volume per price level inside each bar, which only exists when your datafeed supplies order flow, so on the first-party feed these panels use it would be four charts and an empty one. See order flow for the three ways to feed it.

type=candles
type=bars
type=line
type=area

The same instrument and window, drawn four ways.

numberFormat

How every number is punctuated. Leave it out and the chart follows the reader’s own locale, which is usually right: an English article read from Berlin shows 1.234,56 to the person in Berlin. Pin a preset when the numbers must read one way for everybody, and read the price scale to see the difference.

numberFormat=standard (1,234.56)
numberFormat=european (1.234,56)

sessions

Tinted bands behind the bars marking a venue’s sessions. us gives the two US equity bands; anything else is spelled label@HH:mm-HH:mm, comma-separated, with an optional @days such as @12345, the weekdays it applies to as digits. Hours are read on the instrument’s own clock, and a band whose end is at or before its start wraps midnight, so Overnight@22:00-06:00 is an eight-hour band. Absent, no bands are drawn.

sessions=us on a US equity: pre-market and after-hours tinted behind the 15-minute bars.

toolbar and legend

Both off is the smallest honest chart: a price series, an axis, and the attribution mark. Both on is close to the full terminal experience. Most articles want the first; a “live prices” page usually wants the second.

toolbar=true with the legend left on, the reader can change symbol, interval and chart type, and add indicators.

Preparing the snippet…

Both off. Nothing but the series, and the mark, which is not optional.

Preparing the snippet…

Height and width

The chart always fills its container’s width. Height is yours to set: with the loader, data-height is the STARTING height and the frame then reports what it would like, so the chart is never letterboxed. Without the loader, the height you put on the <iframe> is final.

Below about 200px the chart drops its axis labels to keep the series legible, and below roughly 320px wide the drawing rail is hidden automatically, a phone should spend its width on candles, not on a column of tools nobody uses with a thumb.

Unknown parameters

Anything not in the table above is dropped by the loader and ignored by the chart. That is a deliberate allowlist rather than an oversight: it means a parameter cannot be smuggled through to something that was never reviewed, and it is what makes the attribution mark structural rather than a default somebody can turn off.