דלג לתוכן הראשי

Snapshot API

ה-Snapshot API מרנדר גרפים אנליטיים של מטריקות on-chain כתמונות PNG או כגרפיקה וקטורית SVG. שלחו מזהי מטריקות ופרמטרי תצוגה אופציונליים, וקבלו תמונת גרף מרונדרת במלואה, מוכנה להטמעה בדוחות, בלוחות מחוונים או בשיחות עם AI. כרגע נתמכות מטריקות Bitcoin, עם כיסוי רב-רשתי (ETH, TON, TRON) שמתרחב.

נקודות קצה

MethodPathתיאור
GET/v1/chart/snapshotגרפים פשוטים דרך פרמטרי query
POST/v1/chart/snapshotהתאמה אישית מלאה דרך גוף JSON

שתי נקודות הקצה מחזירות image/png כברירת מחדל. עברו ל-SVG (image/svg+xml) או ל-מטא-נתוני JSON (application/json) על ידי הגדרת כותרת הבקשה Accept, או — ב-POST — שדה הגוף format ("png", "svg", "json").

תגובות PNG ו-SVG מוצלחות כוללות כותרת X-Render-Id, כך שניתן לאחזר מחדש את הגרף המרונדר לפי URL בתוך שעה אחת:

פלטנשמר במטמון ב-
PNGhttps://api.blocklens.co/v1/chart/renders/{X-Render-Id}.png
SVGhttps://api.blocklens.co/v1/chart/renders/{X-Render-Id}.svg

אימות

כל הבקשות דורשות מפתח API דרך כותרת Authorization:

Authorization: Bearer YOUR_API_KEY

ראו אימות לפרטים על השגת מפתחות API.

גישה ומגבלות קצב

ה-Snapshot API דורש שכבת Pro או Enterprise. מפתחות בשכבת Demo ו-Free מקבלים 403 Forbidden.

ה-Snapshot API מציית לאותן מגבלות קצב כמו ה-Data API. ראו מגבלות קצב לפרטים.

כאשר מגבלת הקצב חורגת, ה-API מחזיר 429 Too Many Requests עם שדה retry_after.

גישה למטריקות גם היא מוגבלת לפי דרגה: מטריקות דרגה 0 (price, supply, MVRV) זמינות לכל מפתחות Pro+, מטריקות דרגה 1 (SOPR, P&L) דורשות Pro, ומטריקות דרגה 2 (מפות חום של CBD) דורשות Enterprise.


GET /v1/chart/snapshot

יצירת גרף מפרמטרי query. מתאים ביותר לגרפים פשוטים, חד-מטריקתיים או מבוססי-תבנית.

פרמטרים

פרמטרטיפוסברירת מחדלתיאור
metricstring-מזהה מטריקה יחיד (לדוגמה, price, lth_supply). הדדית בלעדי עם metrics ו-template.
metricsstring-מזהי מטריקות מופרדים בפסיקים, מקסימום 6 (לדוגמה, lth_supply,sth_supply). הדדית בלעדי עם metric ו-template.
templatestring-מזהה תבנית מוגדרת מראש. הדדית בלעדי עם metric ו-metrics.
daysinteger365ימי נתונים היסטוריים (7-10000).
start_datestring-תאריך התחלה (YYYY-MM-DD). דורס את days.
end_datestring-תאריך סיום (YYYY-MM-DD). ברירת מחדל היא היום.
stylestringautoסגנון גרף: line, area, bar. מזוהה אוטומטית מרישום המטריקות אם מושמט.
scalestringlinearסקאלת ציר Y: linear או log.
overlaystring-הוספת שכבת-על של מחיר כקו מקווקו עדין בציר הימני (השתמשו ב-price). כרגע מחיר BTC.
widthinteger1200רוחב התמונה בפיקסלים (600-2400).
heightinteger600גובה התמונה בפיקסלים (300-1200).
titlestringautoכותרת הגרף. נוצרת אוטומטית משמות המטריקות אם מושמטת.
themestringlightערכת צבעים: light או dark.

יש לספק בדיוק אחד מתוך metric, metrics או template.

תבניות זמינות

תבניתמטריקות
priceמחיר BTC
price_volumeמחיר + נפח
market_capשווי שוק
holder_supplyהיצע LTH + היצע STH
mvrv_ratioMVRV של LTH + MVRV של STH
realized_priceמחיר ממומש LTH + מחיר ממומש STH
realized_capשווי ממומש LTH + שווי ממומש STH
unrealized_plרווח/הפסד לא ממומש LTH + רווח/הפסד לא ממומש STH
realized_plרווח/הפסד ממומש LTH + רווח/הפסד ממומש STH
soprSOPR של LTH + SOPR של STH
block_heightגובה בלוק

דוגמאות

# Bitcoin example: BTC price, 1 year, line chart
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.blocklens.co/v1/chart/snapshot?metric=price" \
--output price.png

# Bitcoin example: two metrics with area style
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.blocklens.co/v1/chart/snapshot?metrics=lth_supply,sth_supply&style=area&days=730" \
--output supply.png

# Template with dark theme
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.blocklens.co/v1/chart/snapshot?template=mvrv_ratio&theme=dark" \
--output mvrv_dark.png

# Log scale with price overlay
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.blocklens.co/v1/chart/snapshot?metric=lth_supply&scale=log&overlay=price&days=1095" \
--output supply_with_price.png

# Get JSON metadata instead of image
curl -H "Authorization: Bearer YOUR_KEY" \
-H "Accept: application/json" \
"https://api.blocklens.co/v1/chart/snapshot?metric=price" | jq

# Get SVG instead of PNG
curl -H "Authorization: Bearer YOUR_KEY" \
-H "Accept: image/svg+xml" \
"https://api.blocklens.co/v1/chart/snapshot?metric=price" \
--output price.svg

תגובת הצלחה

PNG (ברירת מחדל):

HTTP/1.1 200 OK
Content-Type: image/png
Cache-Control: public, max-age=3600
X-Snapshot-Cache: HIT
X-Snapshot-Render-Ms: 0
X-Render-Id: 0a1b2c3d4e5f6789

<binary PNG data>

SVG (עם Accept: image/svg+xml):

HTTP/1.1 200 OK
Content-Type: image/svg+xml
Cache-Control: public, max-age=3600
X-Snapshot-Cache: MISS
X-Snapshot-Render-Ms: 412
X-Render-Id: 0a1b2c3d4e5f6789
Content-Disposition: attachment; filename="chart.svg"

<svg xmlns="http://www.w3.org/2000/svg" ...>...</svg>

ניתן להשתמש בערך X-Render-Id כדי לאחזר מחדש את אותה תמונה בכתובת /v1/chart/renders/{render_id}.png או /v1/chart/renders/{render_id}.svg למשך עד שעה אחת.


POST /v1/chart/snapshot

התאמה אישית מלאה של הגרף דרך גוף JSON. תומך בעיצוב לפי מטריקה, צירים מותאמים אישית, נוסחאות, קווי ייחוס, אזורי ייחוס ועוד. תוכנן עבור סוכני AI (דרך MCP) ומשתמשים מתקדמים.

גוף הבקשה

ספקו בדיוק מקור נתונים אחד (metric, metrics או template):

{
"metric": "price",

"days": 365,
"start_date": "2025-01-01",
"end_date": "2026-02-23",

"title": "Custom Chart Title",
"width": 1200,
"height": 600,
"theme": "light",
"format": "png",

"style": "line",
"scale": "linear",
"overlay": "price",

"y_axes": [
{"id": "axis-left", "side": "left", "scale": "linear", "format": "number"},
{"id": "axis-right", "side": "right", "scale": "log", "format": "currency"}
],

"formulas": [
{"expression": "sma(m1, 200)", "label": "200-day SMA", "color": "#9333ea", "style": "line"}
],

"reference_lines": [
{"y": 1.0, "stroke": "#9ca3af", "stroke_dasharray": "3 3", "label": "Break-even"}
],
"reference_areas": [
{"y1": 0, "y2": 0.85, "fill": "#16a34a", "fill_opacity": 0.08, "label": "Undervalued"}
]
}

הערה: יש לספק בדיוק אחד מתוך metric, metrics או template.

שדה Metrics

השדה metrics תומך בטיפוסים מעורבים:

// String shorthand
["price", "lth_supply"]

// Full config objects
[{"id": "price", "axis": "right", "style": "line", "color": "#374151"}]

// Mixed
["price", {"id": "lth_supply", "axis": "left", "style": "area"}]

// With params for parameterized metrics
[
{"id": "funding_binance", "params": {"exchange": "binance"}},
{"id": "price"}
]

מטריקות מסוימות דורשות פרמטרים נוספים (לדוגמה, exchange, ticker, id). כללו את האובייקט params מהגדרת המטריקה בעת השימוש במטריקות אלו.

אפשרויות לפי מטריקה

שדהטיפוסתיאור
idstringחובה. מזהה מטריקה מהרישום.
paramsobjectפרמטרים למטריקות פרמטריות (לדוגמה, {"exchange": "binance"}). ראו את הגדרת המטריקה לפרמטרים הנדרשים.
axisleft / rightצד ציר Y. מוקצה אוטומטית אם מושמט.
y_axis_idstringקישור לציר Y ספציפי לפי ID (לדוגמה axis-diff). דורס את axis.
styleline / area / barסגנון גרף. ברירת מחדל מהרישום אם מושמט.
colorstringצבע הקס (לדוגמה, #2563eb). מוקצה אוטומטית אם מושמט.
labelstringתווית תצוגה. משתמש בשם המטריקה אם מושמט.
stroke_widthintegerרוחב קו (0-5). ברירת מחדל: 2. השתמשו ב-0 לעמודות ללא גבולות.
fill_opacityfloatאטימות מילוי (0.0-1.0). לעמודות שקופות, השתמשו בערכים נמוכים כמו 0.2.
stroke_dashstringתבנית מקווקוות (לדוגמה, 5 5).
stack_groupstringמזהה קבוצת ערימה לגרפים מוערמים.
show_in_legendbooleanהאם להציג במקרא הגרף. ברירת מחדל: true.
visiblebooleanהצגה/הסתרה. ברירת מחדל: true.

צירי Y מותאמים אישית

השדה y_axes מגדיר את צירי ה-Y הזמינים למטריקות ולנוסחאות. לכל ציר יש id ייחודי שניתן להתייחס אליו דרך y_axis_id במטריקות או בנוסחאות. ניתן להגדיר יותר משני צירים — לדוגמה, ציר נפרד להפרשים מחושבים:

"y_axes": [
{"id": "axis-left", "side": "left", "scale": "linear", "format": "number"},
{"id": "axis-right", "side": "right", "scale": "log", "format": "currency"},
{"id": "axis-diff", "side": "left", "scale": "linear", "format": "number"}
]
שדהטיפוסתיאור
idstringמזהה ציר ייחודי. מופנה דרך y_axis_id במטריקות/נוסחאות.
sideleft / rightבאיזה צד של הגרף הציר מופיע.
scalelinear / logסקאלת ציר. ברירת מחדל: linear.
formatnumber / currency / percentפורמט מספר לתוויות הציר.
range[number, number]אזור אנכי כ-[from%, to%]. 0 = תחתית, 100 = ראש. ברירת מחדל: גובה מלא. השתמשו לערימת צירים אנכית (לדוגמה נפח ב-20% התחתונים, מחיר ב-80% העליונים).
domain_minnumberהגבלת מינימום קשיחה של התחום. הציר לעולם לא יירד מתחת לערך זה.
domain_maxnumberהגבלת מקסימום קשיחה של התחום. הציר לעולם לא יעלה מעל ערך זה.
no_padding"top" / "bottom" / "both"הסרת הריווח האוטומטי של 10% מהקצוות. שימושי כאשר הגבלת תחום היא גבול קשיח (לדוגמה drawdown המוגבל ב-0).

אם y_axes מושמט, הצירים נוצרים אוטומטית בהתבסס על ערכי ה-axis של המטריקות.

דוגמה: מחיר + נפח עם אזורים אנכיים

ערימת עמודות נפח ב-20% התחתונים והמחיר במרחב הנותר:

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metrics": [
{"id": "price", "style": "line", "color": "#374151", "y_axis_id": "axis-price"},
{"id": "volume", "style": "bar", "color": "#3b82f6", "fill_opacity": 0.3, "stroke_width": 0, "y_axis_id": "axis-vol"}
],
"y_axes": [
{"id": "axis-price", "side": "right", "scale": "log", "format": "currency", "range": [20, 100]},
{"id": "axis-vol", "side": "left", "format": "number", "range": [0, 20], "no_padding": "bottom"}
],
"days": 365,
"title": "BTC Price + Volume (Zoned)"
}' --output price_volume_zones.png

מה זה מייצר:

  • עמודות הנפח ממלאות את 20% התחתונים של הגרף (range: [0, 20]) ללא ריווח בקצה התחתון
  • המחיר תופס את 80% העליונים (range: [20, 100]) בסקאלה לוגריתמית
  • שתי הסדרות לעולם אינן חופפות, מה שיוצר פריסה מוערמת נקייה

דוגמה: Drawdown עם הגבלת תחום

הגבלת drawdown ב-0 (קצה עליון) כך שהקו נוגע בראש האזור שלו:

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metrics": ["price"],
"formulas": [
{"expression": "drawdown(price)", "label": "Drawdown from ATH", "style": "area", "color": "#dc2626", "fill_opacity": 0.15, "y_axis_id": "axis-dd"}
],
"y_axes": [
{"id": "axis-right", "side": "right", "scale": "log", "format": "currency"},
{"id": "axis-dd", "side": "left", "format": "percent", "domain_max": 0, "no_padding": "top"}
],
"days": 1825,
"title": "BTC Price + Drawdown from ATH"
}' --output drawdown.png

מה זה מייצר:

  • ה-drawdown תמיד ≤ 0, ולכן domain_max: 0 מגביל את הקצה העליון
  • no_padding: "top" מסיר את הריווח האוטומטי של 10% מעל 0, מה שגורם לקו לגעת בראש כאשר ה-drawdown הוא 0%
  • המחיר נמצא בציר הימני בסקאלה לוגריתמית

נוסחאות

השדה formulas מאפשר להגדיר סדרות מחושבות הנגזרות מהמטריקות שלכם. נוסחאות יכולות להפנות למטריקות לפי ה-id שלהן (לדוגמה lth_supply) או לפי אינדקס מיקומי (m1, m2 וכו', בהתבסס על הסדר במערך metrics).

"formulas": [
{
"expression": "lth_supply - shift(lth_supply, 30)",
"label": "LTH 30d Change",
"color": "#16a34a",
"style": "bar",
"y_axis_id": "axis-diff",
"fill_opacity": 0.2,
"stroke_width": 0
}
]

פונקציות נתמכות (30 בסך הכול):

ממוצעים נעים וסטטיסטיקה מתגלגלת

פונקציהתחבירתיאור
smasma(series, period)ממוצע נע פשוט
emaema(series, period)ממוצע נע מעריכי
medianmedian(series, period)חציון מתגלגל
sumsum(series, period)סכום מתגלגל
stdstd(series, period)סטיית תקן מתגלגלת

מצטבר

פונקציהתחבירתיאור
cumsumcumsum(series)סכום מצטבר מתרחב
cummeancummean(series)ממוצע מצטבר מתרחב
cummediancummedian(series)חציון מצטבר מתרחב
cumstdcumstd(series)סטיית תקן מצטברת מתרחבת
cummaxcummax(series)מקסימום מצטבר כל-הזמני
cummincummin(series)מינימום מצטבר כל-הזמני

שינויים

פונקציהתחבירתיאור
percent_changepercent_change(series, period)שינוי באחוזים (עשרוני: 0.20 = +20%)
diffdiff(series, period)שינוי בערך מוחלט

מתמטיקה

פונקציהתחבירתיאור
absabs(series)ערך מוחלט
powpow(series, n)העלאה בחזקת n
loglog(series)לוגריתם בבסיס 10
roundround(series, digits)עיגול ל-N מקומות עשרוניים
maxmax(a, b, ...)מקסימום נקודתי
minmin(a, b, ...)מינימום נקודתי

אינדיקטורים טכניים

פונקציהתחבירתיאור
rsirsi(series, period)מדד עוצמה יחסית (0-100)
corrcorr(s1, s2, period)מתאם פירסון (-1 עד 1)
drawdowndrawdown(series)Drawdown מ-ATH (עשרוני שלילי)

סיכון ותשואה

פונקציהתחבירתיאור
mean_returnmean_return(series, period)תשואה ממוצעת מתגלגלת שנתית
realized_volrealized_vol(series, period)תנודתיות ממומשת שנתית
sharpe_ratio_arithmeticsharpe_ratio_arithmetic(series, period)יחס Sharpe (אריתמטי)
sharpe_ratio_geometricsharpe_ratio_geometric(series, period)יחס Sharpe (גיאומטרי)

מניפולציה של סדרות

פונקציהתחבירתיאור
shiftshift(series, period)הזזת הסדרה ב-N תקופות
ifif(a, "op", b, then, else)תנאי (op: =, !=, >, >=, <, <=)

אופרטורים

אריתמטי: +, -, *, / קיבוץ: (, )

הפניות

  • מטריקות לפי שם: lth_supply + sth_supply — השתמשו במזהי מטריקות ישירות
  • מטריקות לפי מיקום: m1 + m2 — הפניות מיקומיות (m1 = המטריקה הראשונה, m2 = השנייה וכו')
  • נוסחאות אחרות: f1 * 2 — הפניה לנוסחאות קודמות (f1 = הנוסחה הראשונה וכו')
  • נוסחאות מחושבות לפי הסדר, כך ש-f2 יכולה להפנות ל-f1, אך לא להפך.

אפשרויות נוסחה:

שדהטיפוסתיאור
expressionstringחובה. ביטוי נוסחה המשתמש במזהי מטריקות או בהפניות מיקומיות (m1, m2).
labelstringחובה. תווית תצוגה למקרא.
colorstringצבע הקס. מוקצה אוטומטית אם מושמט.
styleline / area / barסגנון גרף. ברירת מחדל: line.
y_axis_idstringקישור לציר Y ספציפי לפי ID (לדוגמה axis-diff). דורס את axis.
axisleft / rightצד ציר Y. ברירת מחדל: left. מתעלם אם y_axis_id מוגדר.
fill_opacityfloatאטימות מילוי (0.0-1.0). לעמודות שקופות, השתמשו בערכים נמוכים כמו 0.2.
stroke_widthintegerרוחב קו (0-5). השתמשו ב-0 לעמודות ללא גבולות.
stroke_dashstringתבנית מקווקוות (לדוגמה, 6 3).
stack_groupstringמזהה קבוצת ערימה לערימת מספר סדרות נוסחה.

קווי ייחוס ואזורי ייחוס

קווי ייחוס מוסיפים קווי הנחיה אופקיים להדגשת ערכים ספציפיים (לדוגמה break-even ב-1.0, סף קנייתיות יתר). אזורי ייחוס מוסיפים אזורים מוצללים להדגשת טווחי ערכים (לדוגמה אזור תמחור חסר, רצועות דמויות Bollinger). שניהם תומכים בערכים סטטיים ובנוסחאות דינמיות באמצעות אותו מנוע נוסחאות כמו השדה formulas.

אפשרויות קו ייחוס

שדהטיפוסתיאור
ynumberערך Y סטטי.
y_formulastringביטוי נוסחה ל-Y דינמי (לדוגמה "sma(m1, 200)"). משתמש באותו מנוע כמו formulas.
y_axis_idstringמזהה ציר Y (ברירת מחדל לציר השמאלי הראשון).
strokestringצבע הקס של הקו (ברירת מחדל: #9ca3af).
stroke_dasharraystringתבנית מקווקוות, לדוגמה "3 3" למקווקו.
labelstringטקסט תווית.

ספקו אחד מתוך y (סטטי) או y_formula (דינמי), לא את שניהם. מקסימום 10 קווי ייחוס לגרף.

אפשרויות אזור ייחוס

שדהטיפוסתיאור
y1numberגבול Y תחתון סטטי.
y2numberגבול Y עליון סטטי.
y1_formulastringנוסחה לגבול תחתון דינמי.
y2_formulastringנוסחה לגבול עליון דינמי.
y_axis_idstringמזהה ציר Y (ברירת מחדל לציר השמאלי הראשון).
fillstringצבע הקס של המילוי (ברירת מחדל: #3b82f6).
fill_opacitynumberאטימות מילוי 0–1 (ברירת מחדל: 0.1).
labelstringטקסט תווית.

ספקו גבולות סטטיים (y1/y2) או מבוססי-נוסחה (y1_formula/y2_formula) — ניתן לשלב ביניהם (לדוגמה y1 סטטי עם y2_formula דינמי). מקסימום 10 אזורי ייחוס לגרף.

דוגמה: MVRV עם אזורי ערך

הוספת אזור תמחור חסר ירוק (0–0.85), אזור תמחור יתר אדום (8–100) וקו break-even מקווקו ב-1.0:

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metric": "mvrv",
"days": 1825,
"title": "MVRV Ratio — Value Zones",
"reference_lines": [
{"y": 1.0, "stroke": "#9ca3af", "stroke_dasharray": "3 3", "label": "Break-even"}
],
"reference_areas": [
{"y1": 0, "y2": 0.85, "fill": "#16a34a", "fill_opacity": 0.08, "label": "Undervalued"},
{"y1": 8, "y2": 100, "fill": "#dc2626", "fill_opacity": 0.08, "label": "Overvalued"}
]
}' --output mvrv_zones.png

דוגמה: רצועה מבוססת-נוסחה

יצירת רצועה דמוית Bollinger סביב הנוסחה הראשונה (מעטפת של ±10%):

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metrics": ["price"],
"days": 365,
"formulas": [
{"expression": "sma(m1, 50)", "label": "50-day SMA", "color": "#2563eb", "style": "line"}
],
"reference_areas": [
{"y1_formula": "f1 * 0.9", "y2_formula": "f1 * 1.1", "fill": "#2563eb", "fill_opacity": 0.06, "label": "±10% Band"}
],
"reference_lines": [
{"y_formula": "sma(m1, 200)", "stroke": "#9333ea", "stroke_dasharray": "6 3", "label": "200-day SMA"}
]
}' --output price_bands.png

פורמט פלט

השדה format שולט בפלט:

פורמטContent-Typeתיאור
png (ברירת מחדל)image/pngתמונת גרף מרוסטרת
svgimage/svg+xmlגרפיקה וקטורית (ניתנת לשינוי קנה מידה, להטמעה)
jsonapplication/jsonמטא-נתוני גרף (ללא רינדור)

לחלופין, השתמשו בכותרת Accept:

  • Accept: image/png - PNG (ברירת מחדל)
  • Accept: image/svg+xml - SVG
  • Accept: application/json - מטא-נתוני JSON

תגובת מטא-נתוני JSON

כאשר format=json או Accept: application/json:

{
"success": true,
"title": "BTC Price",
"metrics": [{"id": "price", "label": "BTC Price"}],
"days": 365,
"start_date": null,
"end_date": null,
"theme": "light",
"width": 1200,
"height": 600,
"formulas": [],
"data_points": 365,
"cached": false,
"render_time_ms": 0
}

דוגמאות

# POST with single metric
curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"metric": "price", "days": 365}' \
--output price.png

# Multi-metric with custom styling
curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metrics": [
{"id": "price", "axis": "right", "style": "line", "color": "#374151"},
{"id": "lth_supply", "axis": "left", "style": "area", "color": "#2563eb"}
],
"days": 730,
"title": "BTC Price vs LTH Supply",
"theme": "dark"
}' \
--output chart.png

# SVG output
curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"template": "mvrv_ratio", "format": "svg"}' \
--output mvrv.svg

# JSON metadata
curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"metric": "price", "format": "json"}' | jq

רינדור מפות חום

ה-Snapshot API יכול לרנדר גרפי מפות חום למטריקות מבוססות-התפלגות כמו Cost Basis Distribution. מפות חום משתמשות בקבוצת פרמטרים נפרדת מגרפי מטריקות סטנדרטיים.

פרמטרים של מפת חום

פרמטרטיפוסברירת מחדלתיאור
heatmap_idstring-מזהה מפת חום (לדוגמה, cost-basis-distribution)
heatmap_periodstring1yפרק זמן: 3m, 6m, 1y, 2y, 3y, 5y, all
heatmap_color_scalestringviridisסקאלת צבעים: viridis, plasma, inferno, magma, cividis
heatmap_y_scalestringlinearסקאלת ציר Y: linear או log
themestringlightערכת צבעים: light או dark
titlestringautoכותרת הגרף
widthinteger1200רוחב התמונה בפיקסלים
heightinteger600גובה התמונה בפיקסלים

דוגמה

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"heatmap_id": "cost-basis-distribution",
"heatmap_period": "1y",
"heatmap_color_scale": "viridis",
"heatmap_y_scale": "log",
"theme": "dark",
"title": "Cost Basis Distribution"
}' --output cbd_heatmap.png

הערה: פרמטרים של מפת חום (heatmap_id וכו') הם הדדית בלעדיים עם פרמטרי מטריקות סטנדרטיים (metric, metrics, template). מטריקות מפת חום דורשות שכבת Enterprise.

מקרא סקאלת הצבעים כלול בתמונה המרונדרת, ומציג את טווח הערכים הממופה לפלטת הצבעים הנבחרת.


גרפי שכבת-על של ביצועי מחזור

גרפי ביצועי מחזור מציבים מספר מחזורי Bitcoin על אותו ציר X כדי שתוכלו להשוות ביניהם באופן ישיר. במקום לשרטט מול תאריכי לוח שנה, מחיר כל מחזור מאונדקס לאירוע העוגן שלו (שפל מחזור, ATH או halving) ומשורטט מול ימים מאז אותו עוגן.

הפעילו את מצב שכבת-העל על ידי הגדרת x_axis: "day_offset" בבקשת POST /v1/chart/snapshot ואספקת מטריקות מחזור במערך metrics. המרנדר משתמש בשדה day_offset בכל נקודת נתונים במקום ב-date, כך שכל המחזורים מתחילים ביום 0 בציר X.

תוויות הסימון מציגות תאריכי לוח שנה מהמחזור האחרון של המשפחה הנבחרת. לדוגמה, שכבת-על של ATH (cycle_ath_1cycle_ath_5) מעוגנת ב-2025-10-06 והסימונים מציגים Oct '25, Jan '26, Apr '26 וכו' — לא Day 0, Day 90, Day 180. מחזורים אחרים באותו גרף מיושרים לאותם מיקומים בציר X, כך שערך בסימון Apr '26 ב-cycle_ath_3 משמעו "מה ש-BTC עשה 182 ימים לתוך מחזור 2017". מספור ימים מופיע מחדש כברירת מחדל חלופית רק אם ה-backend אינו יכול לקבוע את העוגן.

סוגי עוגן

שלוש משפחות של מטריקות מחזור זמינות, אחת לכל אירוע עוגן:

עוגןקידומת מזהה מטריקהתיאוררמז לנקודת קצה
שפל מחזור → שפל הבאcycle_low_*מחיר מאונדקס לתחתית המחזור — כל סדרה מתחילה ב-1.0 בתאריך השפל ונמשכת עד השפל של המחזור הבא.endpoint: "cycle-performance?type=low"
ATH → ATHcycle_ath_*מחיר מאונדקס לשיא כל-הזמני של המחזור — כל סדרה מתחילה ב-1.0 בתאריך ה-ATH ונמשכת עד ה-ATH הבא.endpoint: "cycle-performance?type=ath"
Halving → halvingcycle_halving_*מחיר מאונדקס לבלוק ה-halving — כל סדרה מתחילה ב-1.0 בתאריך ה-halving ונמשכת עד ה-halving הבא.endpoint: "cycle-performance?type=halving"

בתוך משפחת עוגן, כל מחזור הוא אותה צורת נתונים — אינדקס שמתחיל ב-1.0 ועוקב אחר price(t) / price(anchor) עד אירוע העוגן הבא (או, עבור המחזור הנוכחי, עד היום). זה מה שהופך את השוואת שכבת-העל למשמעותית: ערך של 5.0 ביום 200 של cycle_ath_3 משמעו "BTC היה פי 5 מה-ATH של 2017, 200 ימים לאחר אותו ATH".

כל מטריקות המחזור הזמינות

מזהה מטריקהתאריך עוגןעוגן → תאריך סיום
cycle_low_12011-11-182011-11-18 → 2015-01-14
cycle_low_22015-01-142015-01-14 → 2018-12-15
cycle_low_32018-12-152018-12-15 → 2022-11-21
cycle_low_42022-11-212022-11-21 → today (current cycle)
cycle_ath_12011-06-112011-06-11 → 2013-11-30
cycle_ath_22013-11-302013-11-30 → 2017-12-17
cycle_ath_32017-12-172017-12-17 → 2021-11-10
cycle_ath_42021-11-102021-11-10 → 2025-10-06
cycle_ath_52025-10-062025-10-06 → today (current cycle)
cycle_halving_12012-11-282012-11-28 → 2016-07-09
cycle_halving_22016-07-092016-07-09 → 2020-05-11
cycle_halving_32020-05-112020-05-11 → 2024-04-20
cycle_halving_42024-04-202024-04-20 → today (current cycle)
כללי ולידציה
  • כל המטריקות ב-metrics חייבות להגיע מאותה משפחת עוגן. ערבוב של cycle_ath_* עם cycle_low_* (או כל דבר מחוץ ל-daily_cycle_performance) מחזיר 400 invalid_params.
  • הדגל x_axis: "day_offset" תקף רק עבור מטריקות מחזור — שילובו עם כל מטריקה אחרת מחזיר 400 invalid_params.
  • המגבלה הסטנדרטית של "מקסימום 6 מטריקות לגרף" חלה — בחרו עד 6 מחזורים לכל שכבת-על.

פרמטרים של ביצועי מחזור

בנוסף לכל פרמטרי הגרף הסטנדרטיים (days, width, height, theme, scale, format, title, y_axes, reference_lines, reference_areas, formulas וכו'), מצב שכבת-העל של מחזור משתמש בשדות אלו:

שדהטיפוסברירת מחדלתיאור
x_axis"date" / "day_offset""date"הגדירו ל-"day_offset" כדי להפעיל את שכבת-העל של המחזור. אחרת ציר X הוא תאריך לוח שנה.
metricsarrayrequired1–6 מזהי מטריקות מחזור מאותה משפחת עוגן. מחרוזות או אובייקטים ({id, color, style, label, stroke_width, fill_opacity, show_in_legend, y_axis_id}).
daysinteger365מגביל את היסט היום המקסימלי המרונדר (טווח ציר X, לא ימי לוח שנה). הגדירו ל-1500 כדי לראות ~4 שנים לכל מחזור.
scale"linear" / "log""linear"סקאלה לוגריתמית היא כמעט תמיד מה שתרצו — מכפילי מחזור מוקדמים יכולים להיות 100×–500×, מה שאינו קריא בסקאלה לינארית.
theme"light" / "dark""light"ערכת dark היא ברירת המחדל של לוח המחוונים לגרפים אלו.

קווי ייחוס (reference_lines) שימושיים במיוחד בגרפי שכבת-על — לדוגמה קו אופקי ב-y: 1.0 מסמן את רמת העוגן, y: 2.0 מסמן "פי 2 מהעוגן" וכן הלאה.

דוגמה: שכבת-על מעוגנת-ATH (צבעים מותאמים אישית לכל מחזור)

מתכון זה תואם את גרף "Price Performance Since ATH" של לוח המחוונים — חמישה מחזורים, כל אחד בצבע נבדל, על ציר לוגריתמי.

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metrics": [
{"id": "cycle_ath_1", "color": "#8b5cf6", "label": "2011 ATH cycle"},
{"id": "cycle_ath_2", "color": "#3b82f6", "label": "2013 ATH cycle"},
{"id": "cycle_ath_3", "color": "#22c55e", "label": "2017 ATH cycle"},
{"id": "cycle_ath_4", "color": "#f59e0b", "label": "2021 ATH cycle"},
{"id": "cycle_ath_5", "color": "#ef4444", "label": "2025 ATH cycle (current)"}
],
"x_axis": "day_offset",
"scale": "log",
"y_axes": [
{"id": "left", "side": "left", "scale": "log", "format": "number"}
],
"reference_lines": [
{"y": 1.0, "stroke": "#9ca3af", "stroke_dasharray": "3 3", "label": "ATH = 1.0"}
],
"days": 1500,
"theme": "dark",
"title": "Price Performance Since ATH"
}' --output cycle_ath.png

דוגמה: שכבת-על של שפל מחזור (צורה מקוצרת)

להשוואה מהירה ללא עיצוב לפי מחזור, העבירו את מזהי המטריקות כמחרוזות פשוטות — הצבעים מגיעים אוטומטית מפלטת הרישום.

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metrics": ["cycle_low_1", "cycle_low_2", "cycle_low_3", "cycle_low_4"],
"x_axis": "day_offset",
"scale": "log",
"days": 1500,
"title": "Price Since Cycle Low"
}' --output cycle_low.png

דוגמה: שכבת-על מעוגנת-halving

אותה צורה, ארבעה מחזורים מעוגנים בכל אירוע halving.

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metrics": [
"cycle_halving_1", "cycle_halving_2", "cycle_halving_3", "cycle_halving_4"
],
"x_axis": "day_offset",
"scale": "log",
"days": 1500,
"theme": "dark",
"title": "Price Since Halving"
}' --output cycle_halving.png

מקבילה בכלי MCP

מסוכן AI המחובר לשרת MCP, אותו גרף הוא קריאת כלי אחת:

render_chart({
metrics: [
{ id: "cycle_ath_1", color: "#8b5cf6" },
{ id: "cycle_ath_2", color: "#3b82f6" },
{ id: "cycle_ath_3", color: "#22c55e" },
{ id: "cycle_ath_4", color: "#f59e0b" },
{ id: "cycle_ath_5", color: "#ef4444" }
],
x_axis: "day_offset",
scale: "log",
days: 1500,
theme: "dark",
title: "Price Performance Since ATH"
})

שרת ה-MCP מקבל את אותו enum של x_axis, אותם מזהי מטריקות, ואותם כללי ולידציה כמו ה-HTTP API.


בקרת מקרא לפי מטריקה

השתמשו ב-show_in_legend באובייקטי תצורה של מטריקות בודדות כדי לשלוט אם מטריקה מופיעה במקרא הגרף. זה שימושי כאשר משלבים סדרות רבות שבהן חלק הן קווי הקשר/רקע.

{
"metrics": [
{"id": "price", "show_in_legend": true},
{"id": "sma_200", "show_in_legend": false}
]
}
שדהטיפוסברירת מחדלתיאור
show_in_legendbooleantrueהאם המטריקה מופיעה במקרא הגרף

ברירות מחדל חכמות

ה-Snapshot API משתמש בברירות מחדל אינטליגנטיות כדי שתוכלו לקבל גרפים נראים מצוין עם תצורה מינימלית:

פרמטרכיצד נקבעת ברירת המחדל
סגנון גרףמרישום המטריקות (chart_types[0])
צבעמרישום המטריקות, ולאחר מכן סבב פלטה
צד ציר Yהמטריקה הראשונה משמאל; מטריקות באותו פורמט חולקות ציר; פורמט שונה מימין
סקאלת ציר Ylinear (דרסו עם scale=log)
טווח זמןמבוסס-קטגוריה: 365 ימים ל-price/valuation/profit, 730 ל-supply, 180 ל-blockchain
כותרתמטריקה יחידה: שם המטריקה. מרובות: "Name1 vs Name2"
גודל תמונה1200 x 600 פיקסלים
ערכת נושאlight

תגובות שגיאה

כל השגיאות מחזירות JSON:

// 400 Bad Request
{"success": false, "error": "invalid_params", "message": "Exactly one of 'metric', 'metrics', or 'template' must be provided"}

// 401 Unauthorized
{"success": false, "error": "unauthorized", "message": "API key required"}

// 403 Forbidden
{"success": false, "error": "insufficient_tier", "message": "Metric 'lth_sopr' requires Pro tier", "upgrade_url": "https://blocklens.co/pricing"}

// 429 Rate Limited
{"success": false, "error": "rate_limited", "message": "Snapshot rate limit exceeded. Max 60 per hour for pro tier.", "retry_after": 120}

// 504 Timeout
{"success": false, "error": "render_timeout", "message": "Chart rendering timed out after 20.0s. Try a shorter date range."}

כלי MCP: render_chart

שרת ה-MCP של Blocklens כולל כלי render_chart המאפשר לסוכני AI ליצור תמונות גרף ישירות בשיחות. הכלי קורא ל-Snapshot API ומחזיר את התמונה inline כ-PNG (רסטר) או כ-SVG (וקטור).

פרמטרים

פרמטרטיפוסברירת מחדלתיאור
metricstring-מזהה מטריקה יחיד
metricsarray-מספר מטריקות (מחרוזות או אובייקטים)
templatestring-מזהה תבנית
daysinteger365ימי היסטוריה
start_datestring-תאריך התחלה (YYYY-MM-DD)
end_datestring-תאריך סיום (YYYY-MM-DD)
overlayprice-הוספת שכבת-על של מחיר (כרגע BTC)
themelight / darklightערכת צבעים
widthinteger1200רוחב תמונה
heightinteger600גובה תמונה
titlestringautoכותרת הגרף
styleline / area / barautoסגנון גרף
scalelinear / loglinearסקאלת ציר Y
formatpng / svg / jsonpngפורמט פלט: png (תמונת רסטר), svg (תמונה וקטורית, משתנה קנה מידה ללא איבוד איכות), או json (מטא-נתונים בלבד — ללא רינדור)
y_axesarray-צירי Y מותאמים אישית עם אזורים (ראו צירי Y מותאמים אישית)
x_axisdate / day_offsetdateמצב ציר X. השתמשו ב-day_offset עבור שכבות-על של ביצועי מחזור — כל המטריקות ב-metrics חייבות להיות מאותה משפחת מחזור.
heatmap_idcost-basis-distribution-רינדור מפת חום במקום גרף קווי (ראו רינדור מפות חום). הדדית בלעדי עם metric / metrics / template.
heatmap_period3m / 6m / 1y / 2y / 3y / 5y / all1yחלון חלוקה לסלים של מפת חום.
heatmap_color_scaleviridis / plasma / inferno / magma / cividisviridisפלטת צבעים של מפת חום.
heatmap_y_scalelinear / loglinearסקאלת ציר Y של סלי מחיר במפת חום.
paramsobject-פרמטרים לכל קריאה עבור מטריקות פרמטריות (לדוגמה { "exchange": "binance" }, { "ticker": "IBIT" }, { "entity": "tesla" }).
reference_linesarray-קווי ייחוס אופקיים (ראו קווי ייחוס ואזורי ייחוס)
reference_areasarray-אזורי ייחוס מוצללים (ראו קווי ייחוס ואזורי ייחוס)

דוגמאות שימוש

User: "Show me the MVRV ratio for the last 2 years"
Agent calls: render_chart({ template: "mvrv_ratio", days: 730 })
-> Returns PNG image inline

User: "Chart BTC price vs LTH supply"
Agent calls: render_chart({
metrics: [
{ id: "price", axis: "right" },
{ id: "lth_supply", axis: "left", style: "area" }
],
days: 365
})
-> Returns PNG image inline

User: "Is there capitulation? Show SOPR"
Agent calls: render_chart({ template: "sopr", days: 180, overlay: "price" })
-> Returns PNG image inline

User: "Render the MVRV chart as SVG so I can embed it in a slide deck"
Agent calls: render_chart({ template: "mvrv_ratio", format: "svg" })
-> Returns the chart inline as image/svg+xml and a /chart/renders/{id}.svg URL

תצורת MCP

הוסיפו לתצורת Claude Desktop או Cursor שלכם כדי לאפשר רינדור גרפים:

{
"mcpServers": {
"blocklens": {
"command": "npx",
"args": ["-y", "blocklens-mcp-server"],
"env": {
"BLOCKLENS_API_KEY": "your_api_key_here"
}
}
}
}

ראו שרת MCP להוראות הגדרה מלאות.


דוגמה מתקדמת: גרף היצע LTH

דוגמה זו משכפלת את הגרף המלא של Long-Term Holder Supply מלוח המחוונים של Blocklens — שתי מטריקות, שתי סדרות נוסחה מחושבות ושלושה צירי Y:

curl -X POST "https://api.blocklens.co/v1/chart/snapshot" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metrics": [
{"id": "price", "label": "BTC Price", "style": "line", "color": "#6b7280", "axis": "right", "fill_opacity": 0, "stroke_width": 1},
{"id": "lth_supply", "label": "LTH Supply", "style": "line", "color": "#2563eb", "axis": "left", "stroke_width": 2}
],
"y_axes": [
{"id": "axis-left", "side": "left", "scale": "linear"},
{"id": "axis-right", "side": "right", "scale": "log"},
{"id": "axis-diff", "side": "left", "scale": "linear"}
],
"formulas": [
{"expression": "max(lth_supply - shift(lth_supply, 30), 0)", "label": "LTH 30d+ diff", "color": "#16a34a", "style": "bar", "y_axis_id": "axis-diff", "fill_opacity": 0.2, "stroke_width": 0},
{"expression": "min(0, lth_supply - shift(lth_supply, 30))", "label": "LTH 30d- diff", "color": "#dc2626", "style": "bar", "y_axis_id": "axis-diff", "fill_opacity": 0.2, "stroke_width": 0}
],
"days": 730,
"title": "Long-Term Holder Supply"
}' --output lth_supply.png

מה זה מייצר:

  • מחיר BTC — קו אפור בציר הימני (סקאלה לוגריתמית)
  • היצע LTH — קו כחול בציר השמאלי (לינארי)
  • צבירה חיובית ל-30 ימים — עמודות ירוקות שקופות-למחצה בציר axis-diff נפרד
  • חלוקה ל-30 ימים — עמודות אדומות שקופות-למחצה באותו ציר axis-diff

טכניקות מפתח שנעשה בהן שימוש:

  • shift(lth_supply, 30) מחשב את ערך ההסתכלות לאחור של 30 ימים
  • max(..., 0) ו-min(0, ...) מפצלים שינויים חיוביים ושליליים לסדרות נפרדות
  • y_axis_id: "axis-diff" מקשר את שתי עמודות הנוסחה לציר ייעודי בלתי תלוי בצירי המטריקות הראשיים
  • fill_opacity: 0.2 + stroke_width: 0 יוצרים עמודות שקופות עדינות וללא גבולות

תבניות גרף

תצורות גרף מלאות (כולל מטריקות, נוסחאות, צירים ועיצוב) זמינות כתבניות מגובות-בסיס-נתונים דרך:

GET /api/lab/templates

תבניות אלו יכולות לשמש כייחוס לבניית גופי בקשת POST משלכם. כל תבנית מכילה את התצורה המלאה המייצרת גרף ספציפי בלוח המחוונים של Blocklens.


סימן מים

כל תמונות הגרף המרונדרות כוללות סימן מים של blocklens.co והודעת זכויות יוצרים. הדבר חל על פורמטי הפלט PNG ו-SVG כאחד.


מטמון

תמונות snapshot מרונדרות נשמרות במטמון למשך שעה אחת ב-Redis. התנהגות המטמון:

  • תצורות גרף זהות מחזירות תוצאות מהמטמון באופן מיידי
  • מפתח המטמון נגזר מתצורת הגרף המלאה (מטריקות, צירים, טווח זמן, ערכת נושא, גודל) בתוספת פורמט הפלט — וריאנטי PNG ו-SVG של אותו גרף נשמרים במטמון באופן עצמאי
  • כותרת התגובה X-Snapshot-Cache מציינת HIT או MISS
  • כותרת X-Snapshot-Render-Ms מציגה את זמן הרינדור (0 בפגיעות מטמון)
  • קבצים מרונדרים נשמרים גם בדיסק תחת /v1/chart/renders/{render_id}.png ו-/v1/chart/renders/{render_id}.svg למשך שעה אחת, כך שכתובות הגרף המוחזרות בכותרת X-Render-Id נשארות נגישות
  • גרפים פופולריים מחוממים מראש לאחר כל עדכון נתונים יומי (05:00 UTC)