Skip to main content

Finance (Crypto and exchanges), On-chain figure

One on-chain figure on a trading terminal: a tag and the headline, the figure panel with what is measured, the coin's symbol and network, the figure as sent in a mono face with its unit and period, its change on a chip in the brand's up or down colour and the source and time of the data, the earlier points drawn on the terminal's grid with up to three stats, then how to read it and up to three quick lines, then the button and the brand's analyst. The risk warning and the not-advice line stay on screen throughout. Ten seconds, and one and a half seconds longer per line.

TemplateFinance (Crypto and exchanges), tpl_20eb67de501a
VariantOn-chain figure
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length15 seconds

Example video​

The 1x1 cut of this variant, drawn from its own worked example. Open the video on its own.

What it accepts​

One on-chain figure (active addresses, fees, a hash rate) as sent with its unit and period, its change against an earlier period, an optional line of up to 30 points, up to three stats, the source and its time, then how to read it, up to three quick lines, the button and your analyst. The risk warning and the not-advice line stay on screen. metaData is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the tag, the headline, the figure and its change, the line and its stats, how to read it, the call to action and the risk lines.
clipData.tagtextup to 20 charactersTag: The kind of post, in the block at the top, such as On-chain or Network data.
clipData.stamptextup to 24 charactersStatus: A short status beside the light at the top, such as LIVE or 24/7.
clipData.headlinetextup to 72 charactersHeadline: What the figure says, in a few words.
clipData.symboltextup to 12 charactersSymbol: The coin's ticker symbol, set large on the figure panel, such as BTC.
clipData.networktextup to 40 charactersNetwork: The network in words, under the symbol, such as Bitcoin mainnet.
clipData.metrictextyesup to 32 charactersFigure name: What is measured, on the figure panel's header strip, such as Active addresses.
clipData.figurenumberyes4 decimalsFigure: The on-chain figure, drawn exactly as sent, with the decimals it was sent with.
clipData.unittextup to 12 charactersUnit: The unit after the figure, such as addresses, sat/vB or EH/s.
clipData.periodtextyesup to 48 charactersPeriod of the figure: The period the figure covers or the day it was read, under the figure.
clipData.changenumber4 decimalsChange: The change against the earlier period in the figure's own units, signed: -1250 for a fall. Shown beside the chip when a percentage is sent too.
clipData.changePercentnumber4 decimalsChange in percent: The change against the earlier period in percent, signed: -4.2 for a fall of 4.2%. Shown on the chip in your up or down colour.
clipData.sincetextup to 40 charactersCompared with: The earlier period the change is measured against, after the chip, such as vs the previous 7 days.
clipData.pointslistat least 2, up to 30Points: The figure over earlier periods, oldest first, drawn as a line: 2 to 30 numbers. Leave out to show no line.
clipData.points[]number4 decimalsValue
clipData.chartLabeltextup to 32 charactersChart caption: The caption on the chart panel's header strip, such as Daily, last 30 days.
clipData.statslistup to 3Stats: Up to three figures under the chart, each a short name and its value exactly as you want it shown, such as 30-day high and 815,870.
clipData.stats[]groupStat
clipData.stats[].labeltextup to 20 charactersName: What the figure is, such as 30-day high.
clipData.stats[].valuetextyesup to 20 charactersValue: The figure as it is shown.
clipData.sourcetextyesup to 64 charactersSource of the data: Where the figure comes from, under the figure.
clipData.dataTimetextyesup to 32 charactersTime of the data: When the figure was read, with its time zone.
clipData.readLabeltextup to 32 charactersReading caption: The caption on the reading's header strip, such as How to read it.
clipData.readingtextup to 140 charactersHow to read it: What the figure measures and what it does not, in one or two sentences, in a panel after the chart.
clipData.detailslistup to 3Quick lines: Up to three short lines, each on its own beat after the reading.
clipData.details[]textup to 72 charactersLine
clipData.ctagroupCall to action: The button at the end and the line under it, such as a web address, a handle or a phone number.
clipData.cta.labeltextyesup to 28 charactersButton: What the button says.
clipData.cta.detailtextup to 48 charactersLine under it: An address, a handle, an app, a phone number.
clipData.riskWarningtextyesup to 400 charactersRisk warning: The risk warning your regulator asks for, shown in the risk panel from the first frame to the last. A long warning is set smaller, never cut.
clipData.notAdvicetextyesup to 160 charactersNot advice: The line saying a figure is data and not advice, under the risk warning from the first frame to the last.
clipData.disclaimertextup to 160 charactersSmall print: Any other line that must be shown, above your brand's footer line.
clipData.lookgroupLook: How the clip looks and moves. The same six switches in every format (theme, pace, corners, alignment, logo, logo size). Leave any out for the package's default: the brand's colours, standard pace, square corners, text at the start.
clipData.look.themeenumbrand, light, dark, boldTheme: Brand: your brand's own colours and background. Light or dark: a page tinted with your brand colour. Bold: your brand colour as the page.
clipData.look.paceenumcalm, standard, punchyPace: How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts.
clipData.look.cornersenumsquare, soft, roundCorners: The shape of cards, pictures and buttons.
clipData.look.alignenumstart, centreText alignment: Where the text lines up.
clipData.look.logoenumauto, freeLogo: The style's own: the logo on a small plate so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.
clipData.look.logoSizeenumauto, small, largeLogo size: Standard is the style's own size. Small draws the logo a fifth smaller, with its plate. Large draws it a quarter larger wherever the style has room for it, and at the standard size where it has none.
metaDatagroupMeta data: Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data.
metaData.titletextup to 100 charactersTitle: Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes.
metaData.captionTinytextup to 200 charactersTiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionShorttextup to 500 charactersShort description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionMediumtextup to 1500 charactersMedium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok): Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionLongtextup to 4000 charactersLong description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.hashtagslistup to 15Hashtags: Written without the #. Up to 15, which every platform takes.
metaData.hashtags[]textup to 60 charactersHashtag

locales carries other languages: under each language code, the parts of clipData and metaData that differ, laid over the default, so a language with no copy still renders.

A picture is always a file from your media library: media:// followed by its id or its name. Anything the table does not list is refused, and so is anything over its limit, with a 400 schema_validation error that names the field.

Ask Reelwire for the whole JSON Schema, the document your content is checked against, without signing in:

curl "https://app.reelwire.io/v1/formats/template/tpl_20eb67de501a?variant=On-chain%20figure&version=1.0.0"

Delivery JSON​

Your own system sends this to one of your streams, POST /v1/stream, and every channel listening to that stream draws it with its template. data is the document described above; a stream with an empty field map passes it to the template unchanged. Try it first on POST /v1/stream/validate, which answers the same without publishing anything. Streams and feeds explains the rest, including how to map a document of your own shape instead.

{
"streamId": "st_your_stream_id",
"eventId": "01M2SQMKK3G1NVFXV31DCBVB95",
"occurredAt": "2026-09-23T07:00:00Z",
"locale": "en",
"data": {
"clipData": {
"tag": "On-chain",
"stamp": "Live",
"headline": "Bitcoin network activity climbs to a three-month high",
"symbol": "BTC",
"network": "Bitcoin mainnet",
"metric": "Active addresses",
"figure": 812455,
"unit": "addresses",
"period": "daily average, 17 Oct 2026",
"change": 41237,
"changePercent": 5.35,
"since": "vs the previous 7 days",
"points": [
768120,
771455,
765980,
774310,
779925,
772840,
781205,
786640,
779110,
790375,
795820,
788450,
797210,
802655,
796030,
801480,
808915,
803260,
799745,
806120,
811380,
804590,
809275,
813940,
807655,
810230,
815870,
809410,
811025,
812455
],
"chartLabel": "Daily, last 30 days",
"stats": [
{
"label": "30-day high",
"value": "815,870"
},
{
"label": "30-day low",
"value": "765,980"
},
{
"label": "30-day average",
"value": "792,410"
}
],
"source": "Halcyon Exchange node and indexer, Bitcoin mainnet",
"dataTime": "18 Oct 2026, 14:32 UTC",
"readLabel": "How to read it",
"reading": "Active addresses count the addresses that sent or received bitcoin that day, which is not the same as people",
"details": [
"One person can use many addresses",
"Exchanges move many coins between their own addresses",
"A busy network does not predict a price"
],
"cta": {
"label": "See the on-chain data",
"detail": "halcyon.example/onchain"
},
"riskWarning": "Don't invest unless you're prepared to lose all the money you invest. This is a high-risk investment and you should not expect to be protected if something goes wrong.",
"notAdvice": "On-chain figures are data for information only, not investment advice or a recommendation to buy or sell.",
"disclaimer": "",
"look": {
"logo": "auto",
"pace": "standard",
"align": "start",
"theme": "brand",
"corners": "square",
"logoSize": "auto"
}
},
"metaData": {
"title": "Bitcoin active addresses reach 812,455, up 5.35% in a week",
"captionTiny": "Bitcoin active addresses: 812,455 (daily average), up 5.35% on the previous 7 days. Crypto is high risk: you could lose all you invest.",
"captionShort": "Bitcoin active addresses reached 812,455 as a daily average on 17 Oct 2026, up 5.35% on the previous 7 days. Source: our node and indexer, read 18 Oct 2026, 14:32 UTC. Data for information only, not advice. Don't invest unless you're prepared to lose all the money you invest.",
"captionMedium": "Bitcoin active addresses reached 812,455 as a daily average on 17 Oct 2026, up 41,237 or 5.35% on the previous 7 days. Over 30 days it ranged from 765,980 to 815,870. Active addresses count the addresses that sent or received bitcoin, which is not the same as people. Source: our Bitcoin node and indexer, read 18 Oct 2026, 14:32 UTC. On-chain figures are data for information only, not investment advice. Don't invest unless you're prepared to lose all the money you invest. This is a high-risk investment and you should not expect to be protected if something goes wrong.",
"captionLong": "Bitcoin active addresses reached 812,455 as a daily average on 17 Oct 2026, up 41,237 or 5.35% on the previous 7 days. Over the last 30 days the figure ranged from 765,980 to 815,870, with a 30-day average of 792,410. Active addresses count the addresses that sent or received bitcoin that day. One person can use many addresses and exchanges move many coins between their own, so the figure is not a count of people, and a busy network does not predict a price. Source: our Bitcoin node and indexer, read 18 Oct 2026, 14:32 UTC. On-chain figures are data for information only, not investment advice or a recommendation to buy or sell. Don't invest unless you're prepared to lose all the money you invest. This is a high-risk investment and you should not expect to be protected if something goes wrong.",
"hashtags": [
"bitcoin",
"onchain",
"btc",
"crypto",
"blockchaindata"
]
}
}
}

The delivery names no version: which build draws it is the channel's choice, the newest of its variant or the one it is pinned to. eventId is a ULID you make once per event: sending the same one again changes nothing. occurredAt is when the thing happened, not when you sent it. locale is the language of the text in data, and data.locales carries other languages beside it.