Snapshot API
ה-Snapshot API מרנדר גרפים אנליטיים של מטריקות on-chain כתמונות PNG או כגרפיקה וקטורית SVG. שלחו מזהי מטריקות ופרמטרי תצוגה אופציונליים, וקבלו תמונת גרף מרונדרת במלואה, מוכנה להטמעה בדוחות, בלוחות מחוונים או בשיחות עם AI. כרגע נתמכות מטריקות Bitcoin, עם כיסוי רב-רשתי (ETH, TON, TRON) שמתרחב.
נקודות קצה
| Method | Path | תיאור |
|---|---|---|
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 בתוך שעה אחת:
| פלט | נשמר במטמון ב- |
|---|---|
| PNG | https://api.blocklens.co/v1/chart/renders/{X-Render-Id}.png |
| SVG | https://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. מתאים ביותר לגרפים פשוטים, חד-מטריקתיים או מבוססי-תבנית.
פרמטרים
| פרמטר | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
metric | string | - | מזהה מטריקה יחיד (לדוגמה, price, lth_supply). הדדית בלעדי עם metrics ו-template. |
metrics | string | - | מזהי מטריקות מופרדים בפסיקים, מקסימום 6 (לדוגמה, lth_supply,sth_supply). הדדית בלעדי עם metric ו-template. |
template | string | - | מזהה תבנית מוגדרת מראש. הדדית בלעדי עם metric ו-metrics. |
days | integer | 365 | ימי נתונים היסטוריים (7-10000). |
start_date | string | - | תאריך התחלה (YYYY-MM-DD). דורס את days. |
end_date | string | - | תאריך סיום (YYYY-MM-DD). ברירת מחדל היא היום. |
style | string | auto | סגנון גרף: line, area, bar. מזוהה אוטומטית מרישום המטריקות אם מושמט. |
scale | string | linear | סקאלת ציר Y: linear או log. |
overlay | string | - | הוספת שכבת-על של מחיר כקו מקווקו עדין בציר הימני (השתמשו ב-price). כרגע מחיר BTC. |
width | integer | 1200 | רוחב התמונה בפיקסלים (600-2400). |
height | integer | 600 | גובה התמונה בפיקסלים (300-1200). |
title | string | auto | כותרת הגרף. נוצרת אוטומטית משמות המטריקות אם מושמטת. |
theme | string | light | ערכת צבעים: light או dark. |
יש לספק בדיוק אחד מתוך metric, metrics או template.
תבניות זמינות
| תבנית | מטריקות |
|---|---|
price | מחיר BTC |
price_volume | מחיר + נפח |
market_cap | שווי שוק |
holder_supply | היצע LTH + היצע STH |
mvrv_ratio | MVRV של LTH + MVRV של STH |
realized_price | מחיר ממומש LTH + מחיר ממומש STH |
realized_cap | שווי ממומש LTH + שווי ממומש STH |
unrealized_pl | רווח/הפסד לא ממומש LTH + רווח/הפסד לא ממומש STH |
realized_pl | רווח/הפסד ממומש LTH + רווח/הפסד ממומש STH |
sopr | SOPR של 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 מהגדרת המטריקה בעת השימוש במטריקות אלו.
אפשרויות לפי מטריקה
| שדה | טיפוס | תיאור |
|---|---|---|
id | string | חובה. מזהה מטריקה מהרישום. |
params | object | פרמטרים למטריקות פרמטריות (לדוגמה, {"exchange": "binance"}). ראו את הגדרת המטריקה לפרמטרים הנדרשים. |
axis | left / right | צד ציר Y. מוקצה אוטומטית אם מושמט. |
y_axis_id | string | קישור לציר Y ספציפי לפי ID (לדוגמה axis-diff). דורס את axis. |
style | line / area / bar | סגנון גרף. ברירת מחדל מהרישום אם מושמט. |
color | string | צבע הקס (לדוגמה, #2563eb). מוקצה אוטומטית אם מושמט. |
label | string | תווית תצוגה. משתמש בשם המטריקה אם מושמט. |
stroke_width | integer | רוחב קו (0-5). ברירת מחדל: 2. השתמשו ב-0 לעמודות ללא גבולות. |
fill_opacity | float | אטימות מילוי (0.0-1.0). לעמודות שקופות, השתמשו בערכים נמוכים כמו 0.2. |
stroke_dash | string | תבנית מקווקוות (לדוגמה, 5 5). |
stack_group | string | מזהה קבוצת ערימה לגרפים מוערמים. |
show_in_legend | boolean | האם להציג במקרא הגרף. ברירת מחדל: true. |
visible | boolean | הצגה/הסתרה. ברירת מחדל: 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"}
]
| שדה | טיפוס | תיאור |
|---|---|---|
id | string | מזהה ציר ייחודי. מופנה דרך y_axis_id במטריקות/נוסחאות. |
side | left / right | באיזה צד של הגרף הציר מופיע. |
scale | linear / log | סקאלת ציר. ברירת מחדל: linear. |
format | number / currency / percent | פורמט מספר לתוויות הציר. |
range | [number, number] | אזור אנכי כ-[from%, to%]. 0 = תחתית, 100 = ראש. ברירת מחדל: גובה מלא. השתמשו לערימת צירים אנכית (לדוגמה נפח ב-20% התחתונים, מחיר ב-80% העליונים). |
domain_min | number | הגבלת מינימום קשיחה של התחום. הציר לעולם לא יירד מתחת לערך זה. |
domain_max | number | הגבלת מקסימום קשיחה של התחום. הציר לעולם לא יעלה מעל ערך זה. |
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 בסך הכול):
ממוצעים נעים וסטטיסטיקה מתגלגלת
| פונקציה | תחביר | תיאור |
|---|---|---|
sma | sma(series, period) | ממוצע נע פשוט |
ema | ema(series, period) | ממוצע נע מעריכי |
median | median(series, period) | חציון מתגלגל |
sum | sum(series, period) | סכום מתגלגל |
std | std(series, period) | סטיית תקן מתגלגלת |
מצטבר
| פונקציה | תחביר | תיאור |
|---|---|---|
cumsum | cumsum(series) | סכום מצטבר מתרחב |
cummean | cummean(series) | ממוצע מצטבר מתרחב |
cummedian | cummedian(series) | חציון מצטבר מתרחב |
cumstd | cumstd(series) | סטיית תקן מצטברת מתרחבת |
cummax | cummax(series) | מקסימום מצטבר כל-הזמני |
cummin | cummin(series) | מינימום מצטבר כל-הזמני |
שינויים
| פונקציה | תחביר | תיאור |
|---|---|---|
percent_change | percent_change(series, period) | שינוי באחוזים (עשרוני: 0.20 = +20%) |
diff | diff(series, period) | שינוי בערך מוחלט |
מתמטיקה
| פונקציה | תחביר | תיאור |
|---|---|---|
abs | abs(series) | ערך מוחלט |
pow | pow(series, n) | העלאה בחזקת n |
log | log(series) | לוגריתם בבסיס 10 |
round | round(series, digits) | עיגול ל-N מקומות עשרוניים |
max | max(a, b, ...) | מקסימום נקודתי |
min | min(a, b, ...) | מינימום נקודתי |
אינדיקטורים טכניים
| פונקציה | תחביר | תיאור |
|---|---|---|
rsi | rsi(series, period) | מדד עוצמה יחסית (0-100) |
corr | corr(s1, s2, period) | מתאם פירסון (-1 עד 1) |
drawdown | drawdown(series) | Drawdown מ-ATH (עשרוני שלילי) |
סיכון ותשואה
| פונקציה | תחביר | תיאור |
|---|---|---|
mean_return | mean_return(series, period) | תשואה ממוצעת מתגלגלת שנתית |
realized_vol | realized_vol(series, period) | תנודתיות ממומשת שנתית |
sharpe_ratio_arithmetic | sharpe_ratio_arithmetic(series, period) | יחס Sharpe (אריתמטי) |
sharpe_ratio_geometric | sharpe_ratio_geometric(series, period) | יחס Sharpe (גיאומטרי) |
מניפולציה של סדרות
| פונקציה | תחביר | תיאור |
|---|---|---|
shift | shift(series, period) | הזזת הסדרה ב-N תקופות |
if | if(a, "op", b, then, else) | תנאי (op: =, !=, >, >=, <, <=) |
אופרטורים
אריתמטי: +, -, *, /
קיבוץ: (, )
הפניות
- מטריקות לפי שם:
lth_supply + sth_supply— השתמשו במזהי מטריקות ישירות - מטריקות לפי מיקום:
m1 + m2— הפניות מיקומיות (m1 = המטריקה הראשונה, m2 = השנייה וכו') - נוסחאות אחרות:
f1 * 2— הפניה לנוסחאות קודמות (f1 = הנוסחה הראשונה וכו') - נוסחאות מחושבות לפי הסדר, כך ש-f2 יכולה להפנות ל-f1, אך לא להפך.
אפשרויות נוסחה:
| שדה | טיפוס | תיאור |
|---|---|---|
expression | string | חובה. ביטוי נוסחה המשתמש במזהי מטריקות או בהפניות מיקומיות (m1, m2). |
label | string | חובה. תווית תצוגה למקרא. |
color | string | צבע הקס. מוקצה אוטומטית אם מושמט. |
style | line / area / bar | סגנון גרף. ברירת מחדל: line. |
y_axis_id | string | קישור לציר Y ספציפי לפי ID (לדוגמה axis-diff). דורס את axis. |
axis | left / right | צד ציר Y. ברירת מחדל: left. מתעלם אם y_axis_id מוגדר. |
fill_opacity | float | אטימות מילוי (0.0-1.0). לעמודות שקופות, השתמשו בערכים נמוכים כמו 0.2. |
stroke_width | integer | רוחב קו (0-5). השתמשו ב-0 לעמודות ללא גבולות. |
stroke_dash | string | תבנית מקווקוות (לדוגמה, 6 3). |
stack_group | string | מזהה קבוצת ערימה לערימת מספר סדרות נוסחה. |
קווי ייחוס ואזורי ייחוס
קווי ייחוס מוסיפים קווי הנחיה אופקיים להדגשת ערכים ספציפיים (לדוגמה break-even ב-1.0, סף קנייתיות יתר). אזורי ייחוס מוסיפים אזורים מוצללים להדגשת טווחי ערכים (לדוגמה אזור תמחור חסר, רצועות דמויות Bollinger). שניהם תומכים בערכים סטטיים ובנוסחאות דינמיות באמצעות אותו מנוע נוסחאות כמו השדה formulas.
אפשרויות קו ייחוס
| שדה | טיפוס | תיאור |
|---|---|---|
y | number | ערך Y סטטי. |
y_formula | string | ביטוי נוסחה ל-Y דינמי (לדוגמה "sma(m1, 200)"). משתמש באותו מנוע כמו formulas. |
y_axis_id | string | מזהה ציר Y (ברירת מחדל לציר השמאלי הראשון). |
stroke | string | צבע הקס של הקו (ברירת מחדל: #9ca3af). |
stroke_dasharray | string | תבנית מקווקוות, לדוגמה "3 3" למקווקו. |
label | string | טקסט תווית. |
ספקו אחד מתוך y (סטטי) או y_formula (דינמי), לא את שניהם. מקסימום 10 קווי ייחוס לגרף.
אפשרויות אזור ייחוס
| שדה | טיפוס | תיאור |
|---|---|---|
y1 | number | גבול Y תחתון סטטי. |
y2 | number | גבול Y עליון סטטי. |
y1_formula | string | נוסחה לגבול תחתון דינמי. |
y2_formula | string | נוסחה לגבול עליון דינמי. |
y_axis_id | string | מזהה ציר Y (ברירת מחדל לציר השמאלי הראשון). |
fill | string | צבע הקס של המילוי (ברירת מחדל: #3b82f6). |
fill_opacity | number | אטימות מילוי 0–1 (ברירת מחדל: 0.1). |
label | string | טקסט תווית. |
ספקו גבולות סטטיים (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 | תמונת גרף מרוסטרת |
svg | image/svg+xml | גרפיקה וקטורית (ניתנת לשינוי קנה מידה, להטמעה) |
json | application/json | מטא-נתוני גרף (ללא רינדור) |
לחלופין, השתמשו בכותרת Accept:
Accept: image/png- PNG (ברירת מחדל)Accept: image/svg+xml- SVGAccept: 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_id | string | - | מזהה מפת חום (לדוגמה, cost-basis-distribution) |
heatmap_period | string | 1y | פרק זמן: 3m, 6m, 1y, 2y, 3y, 5y, all |
heatmap_color_scale | string | viridis | סקאלת צבעים: viridis, plasma, inferno, magma, cividis |
heatmap_y_scale | string | linear | סקאלת ציר Y: linear או log |
theme | string | light | ערכת צבעים: light או dark |
title | string | auto | כותרת הגרף |
width | integer | 1200 | רוחב התמונה בפיקסלים |
height | integer | 600 | גובה התמונה בפיקסלים |
דוגמה
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_1…cycle_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 → ATH | cycle_ath_* | מחיר מאונדקס לשיא כל-הזמני של המחזור — כל סדרה מתחילה ב-1.0 בתאריך ה-ATH ונמשכת עד ה-ATH הבא. | endpoint: "cycle-performance?type=ath" |
| Halving → halving | cycle_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_1 | 2011-11-18 | 2011-11-18 → 2015-01-14 |
cycle_low_2 | 2015-01-14 | 2015-01-14 → 2018-12-15 |
cycle_low_3 | 2018-12-15 | 2018-12-15 → 2022-11-21 |
cycle_low_4 | 2022-11-21 | 2022-11-21 → today (current cycle) |
cycle_ath_1 | 2011-06-11 | 2011-06-11 → 2013-11-30 |
cycle_ath_2 | 2013-11-30 | 2013-11-30 → 2017-12-17 |
cycle_ath_3 | 2017-12-17 | 2017-12-17 → 2021-11-10 |
cycle_ath_4 | 2021-11-10 | 2021-11-10 → 2025-10-06 |
cycle_ath_5 | 2025-10-06 | 2025-10-06 → today (current cycle) |
cycle_halving_1 | 2012-11-28 | 2012-11-28 → 2016-07-09 |
cycle_halving_2 | 2016-07-09 | 2016-07-09 → 2020-05-11 |
cycle_halving_3 | 2020-05-11 | 2020-05-11 → 2024-04-20 |
cycle_halving_4 | 2024-04-20 | 2024-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 הוא תאריך לוח שנה. |
metrics | array | required | 1–6 מזהי מטריקות מחזור מאותה משפחת עוגן. מחרוזות או אובייקטים ({id, color, style, label, stroke_width, fill_opacity, show_in_legend, y_axis_id}). |
days | integer | 365 | מגביל את היסט היום המקסימלי המרונדר (טווח ציר 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_legend | boolean | true | האם המטריקה מופיעה במקרא הגרף |
ברירות מחדל חכמות
ה-Snapshot API משתמש בברירות מחדל אינטליגנטיות כדי שתוכלו לקבל גרפים נראים מצוין עם תצורה מינימלית:
| פרמטר | כיצד נקבעת ברירת המחדל |
|---|---|
| סגנון גרף | מרישום המטריקות (chart_types[0]) |
| צבע | מרישום המטריקות, ולאחר מכן סבב פלטה |
| צד ציר Y | המטריקה הראשונה משמאל; מטריקות באותו פורמט חולקות ציר; פורמט שונה מימין |
| סקאלת ציר Y | linear (דרסו עם 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 (וקטור).
פרמטרים
| פרמטר | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
metric | string | - | מזהה מטריקה יחיד |
metrics | array | - | מספר מטריקות (מחרוזות או אובייקטים) |
template | string | - | מזהה תבנית |
days | integer | 365 | ימי היסטוריה |
start_date | string | - | תאריך התחלה (YYYY-MM-DD) |
end_date | string | - | תאריך סיום (YYYY-MM-DD) |
overlay | price | - | הוספת שכבת-על של מחיר (כרגע BTC) |
theme | light / dark | light | ערכת צבעים |
width | integer | 1200 | רוחב תמונה |
height | integer | 600 | גובה תמונה |
title | string | auto | כותרת הגרף |
style | line / area / bar | auto | סגנון גרף |
scale | linear / log | linear | סקאלת ציר Y |
format | png / svg / json | png | פורמט פלט: png (תמונת רסטר), svg (תמונה וקטורית, משתנה קנה מידה ללא איבוד איכות), או json (מטא-נתונים בלבד — ללא רינדור) |
y_axes | array | - | צירי Y מותאמים אישית עם אזורים (ראו צירי Y מותאמים אישית) |
x_axis | date / day_offset | date | מצב ציר X. השתמשו ב-day_offset עבור שכבות-על של ביצועי מחזור — כל המטריקות ב-metrics חייבות להיות מאותה משפחת מחזור. |
heatmap_id | cost-basis-distribution | - | רינדור מפת חום במקום גרף קווי (ראו רינדור מפות חום). הדדית בלעדי עם metric / metrics / template. |
heatmap_period | 3m / 6m / 1y / 2y / 3y / 5y / all | 1y | חלון חלוקה לסלים של מפת חום. |
heatmap_color_scale | viridis / plasma / inferno / magma / cividis | viridis | פלטת צבעים של מפת חום. |
heatmap_y_scale | linear / log | linear | סקאלת ציר Y של סלי מחיר במפת חום. |
params | object | - | פרמטרים לכל קריאה עבור מטריקות פרמטריות (לדוגמה { "exchange": "binance" }, { "ticker": "IBIT" }, { "entity": "tesla" }). |
reference_lines | array | - | קווי ייחוס אופקיים (ראו קווי ייחוס ואזורי ייחוס) |
reference_areas | array | - | אזורי ייחוס מוצללים (ראו קווי ייחוס ואזורי ייחוס) |
דוגמאות שימוש
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)