dev-api-ui 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/package.json +40 -0
- package/ui/ThemeProvider.tsx +16 -0
- package/ui/components/ArticlePage.tsx +673 -0
- package/ui/components/AuthPage.tsx +109 -0
- package/ui/components/Callout.tsx +79 -0
- package/ui/components/Chart.tsx +100 -0
- package/ui/components/CodeTabs.tsx +145 -0
- package/ui/components/ComparePage.tsx +364 -0
- package/ui/components/DashboardPage.tsx +773 -0
- package/ui/components/DocsNav.tsx +80 -0
- package/ui/components/Footer.tsx +136 -0
- package/ui/components/HubPage.tsx +529 -0
- package/ui/components/Modal.tsx +412 -0
- package/ui/components/Nav.tsx +162 -0
- package/ui/components/OnThisPage.tsx +56 -0
- package/ui/components/ParamsTable.tsx +86 -0
- package/ui/components/RangeBar.tsx +68 -0
- package/ui/components/SeriesChart.tsx +218 -0
- package/ui/components/SeriesPage.tsx +461 -0
- package/ui/components/StatusMark.tsx +48 -0
- package/ui/components/publictrades/ExternalLink.tsx +37 -0
- package/ui/components/publictrades/FactsCard.tsx +40 -0
- package/ui/components/publictrades/LedgerFooter.tsx +22 -0
- package/ui/components/publictrades/LedgerNav.tsx +78 -0
- package/ui/components/publictrades/Mark.tsx +40 -0
- package/ui/components/publictrades/SourceBlock.tsx +91 -0
- package/ui/components/publictrades/Tape.tsx +164 -0
- package/ui/components/publictrades/ThreeStamps.tsx +47 -0
- package/ui/components/publictrades/types.ts +19 -0
- package/ui/data/series.ts +851 -0
- package/ui/index.ts +50 -0
- package/ui/publictrades.ts +16 -0
- package/ui/themes.css +81 -0
|
@@ -0,0 +1,851 @@
|
|
|
1
|
+
export type RangeEntry = {
|
|
2
|
+
label: string;
|
|
3
|
+
delta: string;
|
|
4
|
+
up: boolean;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export type RelatedEntry = {
|
|
8
|
+
sym: string;
|
|
9
|
+
name: string;
|
|
10
|
+
val: string;
|
|
11
|
+
status: string;
|
|
12
|
+
color: string;
|
|
13
|
+
group: string;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type ReadingEntry = {
|
|
17
|
+
type: string;
|
|
18
|
+
title: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type SeriesData = {
|
|
22
|
+
group: string;
|
|
23
|
+
id: string;
|
|
24
|
+
groupLabel: string;
|
|
25
|
+
eyebrow: string;
|
|
26
|
+
sym: string;
|
|
27
|
+
name: string;
|
|
28
|
+
valueUnit: string;
|
|
29
|
+
deltaNote: string;
|
|
30
|
+
statusLabel: string;
|
|
31
|
+
statusColor: string;
|
|
32
|
+
value: string;
|
|
33
|
+
delta: string;
|
|
34
|
+
deltaColor: string;
|
|
35
|
+
asOf: string;
|
|
36
|
+
sourceName: string;
|
|
37
|
+
endpoint: string;
|
|
38
|
+
endpointDesc: string;
|
|
39
|
+
rate: string;
|
|
40
|
+
latency: string;
|
|
41
|
+
sourceFeeds: string;
|
|
42
|
+
coverage: string;
|
|
43
|
+
frequency: string;
|
|
44
|
+
points?: { time: string; value: number }[];
|
|
45
|
+
line: string;
|
|
46
|
+
area: string;
|
|
47
|
+
areaFill: string;
|
|
48
|
+
axisStart: string;
|
|
49
|
+
axisMid: string;
|
|
50
|
+
axisEnd: string;
|
|
51
|
+
ranges: RangeEntry[];
|
|
52
|
+
related: RelatedEntry[];
|
|
53
|
+
reading: ReadingEntry[];
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const A = '#1F8A5B';
|
|
57
|
+
const D = '#C2453B';
|
|
58
|
+
const W = '#B26B00';
|
|
59
|
+
|
|
60
|
+
// NOTE: All values below are ILLUSTRATIVE PLACEHOLDER data for the design-system
|
|
61
|
+
// showcase (prices, sparklines, ranges, "related", reading lists are fabricated).
|
|
62
|
+
// The fx-eurusd / metals-xauusd / power-pjm-rt stubs predate the others; the
|
|
63
|
+
// remaining series were added so every hub link resolves. Replace with real
|
|
64
|
+
// point-in-time data when the API is wired.
|
|
65
|
+
export const SERIES_DATA: Record<string, SeriesData> = {
|
|
66
|
+
'fx-eurusd': {
|
|
67
|
+
group: 'fx', id: 'eurusd', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
68
|
+
sym: 'EUR/USD', name: 'Euro / US Dollar', valueUnit: '', deltaNote: 'today',
|
|
69
|
+
statusLabel: 'Live', statusColor: A, value: '1.08642', delta: '+0.31%', deltaColor: A,
|
|
70
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
71
|
+
endpoint: '/v1/fx/eurusd',
|
|
72
|
+
endpointDesc: 'Latest EUR/USD spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
73
|
+
rate: '60 / min', latency: '41 ms',
|
|
74
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
75
|
+
line: '0,150 95,140 190,148 285,120 380,128 475,96 570,104 665,70 760,78 855,44 950,36 1040,30',
|
|
76
|
+
area: '0,240 0,150 95,140 190,148 285,120 380,128 475,96 570,104 665,70 760,78 855,44 950,36 1040,30 1040,240',
|
|
77
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
78
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
79
|
+
ranges: [
|
|
80
|
+
{ label: '1D', delta: '+0.1%', up: true }, { label: '7D', delta: '+0.4%', up: true },
|
|
81
|
+
{ label: '1M', delta: '+0.6%', up: true }, { label: '3M', delta: '+1.2%', up: true },
|
|
82
|
+
{ label: '1Y', delta: '+2.4%', up: true }, { label: '5Y', delta: '-3.1%', up: false },
|
|
83
|
+
{ label: 'Max', delta: '+9.8%', up: true },
|
|
84
|
+
],
|
|
85
|
+
related: [
|
|
86
|
+
{ sym: 'GBP/USD', name: 'Sterling / US Dollar', val: '1.27310', status: 'Live', color: A, group: 'fx' },
|
|
87
|
+
{ sym: 'USD/JPY', name: 'US Dollar / Yen', val: '157.21', status: 'Live', color: A, group: 'fx' },
|
|
88
|
+
{ sym: 'USD/CHF', name: 'US Dollar / Franc', val: '0.89204', status: 'Live', color: A, group: 'fx' },
|
|
89
|
+
],
|
|
90
|
+
reading: [
|
|
91
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
92
|
+
{ type: 'Blog', title: 'What "point-in-time" actually means for EUR/USD' },
|
|
93
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
'metals-xauusd': {
|
|
97
|
+
group: 'metals', id: 'xauusd', groupLabel: 'metals', eyebrow: 'Precious metals · spot',
|
|
98
|
+
sym: 'XAU/USD', name: 'Gold / US Dollar', valueUnit: '/oz', deltaNote: 'today',
|
|
99
|
+
statusLabel: 'Delayed 15m', statusColor: D, value: '2,338.40', delta: '-0.62%', deltaColor: D,
|
|
100
|
+
asOf: '2026-06-16 13:45 UTC', sourceName: 'LBMA fixings + COMEX',
|
|
101
|
+
endpoint: '/v1/metals/xauusd',
|
|
102
|
+
endpointDesc: 'Latest gold spot per troy ounce with source feed and timestamp in a TID-23 envelope.',
|
|
103
|
+
rate: '60 / min', latency: '52 ms',
|
|
104
|
+
sourceFeeds: 'LBMA · COMEX', coverage: '1968-01-02 — present', frequency: '1 minute',
|
|
105
|
+
line: '0,40 95,52 190,46 285,72 380,66 475,96 570,90 665,120 760,128 855,150 950,168 1040,176',
|
|
106
|
+
area: '0,240 0,40 95,52 190,46 285,72 380,66 475,96 570,90 665,120 760,128 855,150 950,168 1040,176 1040,240',
|
|
107
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
108
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
109
|
+
ranges: [
|
|
110
|
+
{ label: '1D', delta: '-0.6%', up: false }, { label: '7D', delta: '+0.9%', up: true },
|
|
111
|
+
{ label: '1M', delta: '-1.4%', up: false }, { label: '3M', delta: '+2.1%', up: true },
|
|
112
|
+
{ label: '1Y', delta: '+18.6%', up: true }, { label: '5Y', delta: '+74.2%', up: true },
|
|
113
|
+
{ label: 'Max', delta: '+302%', up: true },
|
|
114
|
+
],
|
|
115
|
+
related: [
|
|
116
|
+
{ sym: 'XAG/USD', name: 'Silver / US Dollar', val: '29.84', status: 'Delayed', color: D, group: 'metals' },
|
|
117
|
+
{ sym: 'XPT/USD', name: 'Platinum / US Dollar', val: '978.50', status: 'Delayed', color: D, group: 'metals' },
|
|
118
|
+
{ sym: 'XPD/USD', name: 'Palladium / US Dollar', val: '912.00', status: 'Delayed', color: D, group: 'metals' },
|
|
119
|
+
],
|
|
120
|
+
reading: [
|
|
121
|
+
{ type: 'Guide', title: 'Spot gold vs futures: which series to query' },
|
|
122
|
+
{ type: 'Blog', title: 'Reading LBMA fixings against COMEX settle' },
|
|
123
|
+
{ type: 'Methodology', title: 'Metals benchmark sources and revisions' },
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
'fx-gbpusd': {
|
|
127
|
+
group: 'fx', id: 'gbpusd', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
128
|
+
sym: 'GBP/USD', name: 'Sterling / US Dollar', valueUnit: '', deltaNote: 'today',
|
|
129
|
+
statusLabel: 'Live', statusColor: A, value: '1.27310', delta: '+0.12%', deltaColor: A,
|
|
130
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
131
|
+
endpoint: '/v1/fx/gbpusd',
|
|
132
|
+
endpointDesc: 'Latest GBP/USD spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
133
|
+
rate: '60 / min', latency: '41 ms',
|
|
134
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
135
|
+
line: '0,145 95,138 190,152 285,125 380,132 475,100 570,108 665,74 760,82 855,48 950,40 1040,34',
|
|
136
|
+
area: '0,240 0,145 95,138 190,152 285,125 380,132 475,100 570,108 665,74 760,82 855,48 950,40 1040,34 1040,240',
|
|
137
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
138
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
139
|
+
ranges: [
|
|
140
|
+
{ label: '1D', delta: '+0.1%', up: true }, { label: '7D', delta: '+0.3%', up: true },
|
|
141
|
+
{ label: '1M', delta: '+0.5%', up: true }, { label: '3M', delta: '+1.0%', up: true },
|
|
142
|
+
{ label: '1Y', delta: '+2.1%', up: true }, { label: '5Y', delta: '-2.8%', up: false },
|
|
143
|
+
{ label: 'Max', delta: '+8.4%', up: true },
|
|
144
|
+
],
|
|
145
|
+
related: [
|
|
146
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
147
|
+
{ sym: 'GBP/JPY', name: 'Sterling / Yen', val: '200.15', status: 'Live', color: A, group: 'fx' },
|
|
148
|
+
{ sym: 'EUR/GBP', name: 'Euro / Sterling', val: '0.85330', status: 'Live', color: A, group: 'fx' },
|
|
149
|
+
],
|
|
150
|
+
reading: [
|
|
151
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
152
|
+
{ type: 'Blog', title: 'What "point-in-time" actually means for GBP/USD' },
|
|
153
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
'fx-usdjpy': {
|
|
157
|
+
group: 'fx', id: 'usdjpy', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
158
|
+
sym: 'USD/JPY', name: 'US Dollar / Yen', valueUnit: '', deltaNote: 'today',
|
|
159
|
+
statusLabel: 'Live', statusColor: A, value: '157.21', delta: '-0.20%', deltaColor: D,
|
|
160
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
161
|
+
endpoint: '/v1/fx/usdjpy',
|
|
162
|
+
endpointDesc: 'Latest USD/JPY spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
163
|
+
rate: '60 / min', latency: '41 ms',
|
|
164
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
165
|
+
line: '0,160 95,152 190,166 285,140 380,148 475,120 570,128 665,90 760,98 855,60 950,52 1040,44',
|
|
166
|
+
area: '0,240 0,160 95,152 190,166 285,140 380,148 475,120 570,128 665,90 760,98 855,60 950,52 1040,44 1040,240',
|
|
167
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
168
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
169
|
+
ranges: [
|
|
170
|
+
{ label: '1D', delta: '-0.2%', up: false }, { label: '7D', delta: '+0.6%', up: true },
|
|
171
|
+
{ label: '1M', delta: '+1.4%', up: true }, { label: '3M', delta: '+3.2%', up: true },
|
|
172
|
+
{ label: '1Y', delta: '+8.6%', up: true }, { label: '5Y', delta: '+22.4%', up: true },
|
|
173
|
+
{ label: 'Max', delta: '+44.1%', up: true },
|
|
174
|
+
],
|
|
175
|
+
related: [
|
|
176
|
+
{ sym: 'EUR/JPY', name: 'Euro / Yen', val: '170.80', status: 'Live', color: A, group: 'fx' },
|
|
177
|
+
{ sym: 'GBP/JPY', name: 'Sterling / Yen', val: '200.15', status: 'Live', color: A, group: 'fx' },
|
|
178
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
179
|
+
],
|
|
180
|
+
reading: [
|
|
181
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
182
|
+
{ type: 'Blog', title: 'USD/JPY carry dynamics and intervention signals' },
|
|
183
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
184
|
+
],
|
|
185
|
+
},
|
|
186
|
+
'fx-usdchf': {
|
|
187
|
+
group: 'fx', id: 'usdchf', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
188
|
+
sym: 'USD/CHF', name: 'US Dollar / Franc', valueUnit: '', deltaNote: 'today',
|
|
189
|
+
statusLabel: 'Live', statusColor: A, value: '0.89204', delta: '+0.05%', deltaColor: A,
|
|
190
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
191
|
+
endpoint: '/v1/fx/usdchf',
|
|
192
|
+
endpointDesc: 'Latest USD/CHF spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
193
|
+
rate: '60 / min', latency: '41 ms',
|
|
194
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
195
|
+
line: '0,148 95,140 190,154 285,122 380,130 475,98 570,106 665,72 760,80 855,46 950,38 1040,32',
|
|
196
|
+
area: '0,240 0,148 95,140 190,154 285,122 380,130 475,98 570,106 665,72 760,80 855,46 950,38 1040,32 1040,240',
|
|
197
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
198
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
199
|
+
ranges: [
|
|
200
|
+
{ label: '1D', delta: '+0.1%', up: true }, { label: '7D', delta: '+0.2%', up: true },
|
|
201
|
+
{ label: '1M', delta: '+0.4%', up: true }, { label: '3M', delta: '+0.8%', up: true },
|
|
202
|
+
{ label: '1Y', delta: '+1.6%', up: true }, { label: '5Y', delta: '-4.2%', up: false },
|
|
203
|
+
{ label: 'Max', delta: '-12.1%', up: false },
|
|
204
|
+
],
|
|
205
|
+
related: [
|
|
206
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
207
|
+
{ sym: 'GBP/USD', name: 'Sterling / US Dollar', val: '1.27310', status: 'Live', color: A, group: 'fx' },
|
|
208
|
+
{ sym: 'USD/CAD', name: 'US Dollar / Canadian Dollar', val: '1.36110', status: 'Live', color: A, group: 'fx' },
|
|
209
|
+
],
|
|
210
|
+
reading: [
|
|
211
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
212
|
+
{ type: 'Blog', title: 'SNB intervention history and CHF safe-haven flows' },
|
|
213
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
214
|
+
],
|
|
215
|
+
},
|
|
216
|
+
'fx-usdcad': {
|
|
217
|
+
group: 'fx', id: 'usdcad', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
218
|
+
sym: 'USD/CAD', name: 'US Dollar / Canadian Dollar', valueUnit: '', deltaNote: 'today',
|
|
219
|
+
statusLabel: 'Live', statusColor: A, value: '1.36110', delta: '-0.08%', deltaColor: D,
|
|
220
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
221
|
+
endpoint: '/v1/fx/usdcad',
|
|
222
|
+
endpointDesc: 'Latest USD/CAD spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
223
|
+
rate: '60 / min', latency: '41 ms',
|
|
224
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
225
|
+
line: '0,152 95,144 190,158 285,128 380,136 475,104 570,112 665,78 760,86 855,52 950,44 1040,38',
|
|
226
|
+
area: '0,240 0,152 95,144 190,158 285,128 380,136 475,104 570,112 665,78 760,86 855,52 950,44 1040,38 1040,240',
|
|
227
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
228
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
229
|
+
ranges: [
|
|
230
|
+
{ label: '1D', delta: '-0.1%', up: false }, { label: '7D', delta: '-0.3%', up: false },
|
|
231
|
+
{ label: '1M', delta: '+0.5%', up: true }, { label: '3M', delta: '+1.1%', up: true },
|
|
232
|
+
{ label: '1Y', delta: '+2.4%', up: true }, { label: '5Y', delta: '+5.8%', up: true },
|
|
233
|
+
{ label: 'Max', delta: '+18.6%', up: true },
|
|
234
|
+
],
|
|
235
|
+
related: [
|
|
236
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
237
|
+
{ sym: 'GBP/USD', name: 'Sterling / US Dollar', val: '1.27310', status: 'Live', color: A, group: 'fx' },
|
|
238
|
+
{ sym: 'AUD/USD', name: 'Australian Dollar / US Dollar', val: '0.66420', status: 'Live', color: A, group: 'fx' },
|
|
239
|
+
],
|
|
240
|
+
reading: [
|
|
241
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
242
|
+
{ type: 'Blog', title: 'Oil prices and CAD: the commodity-currency link' },
|
|
243
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
244
|
+
],
|
|
245
|
+
},
|
|
246
|
+
'fx-audusd': {
|
|
247
|
+
group: 'fx', id: 'audusd', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
248
|
+
sym: 'AUD/USD', name: 'Australian Dollar / US Dollar', valueUnit: '', deltaNote: 'today',
|
|
249
|
+
statusLabel: 'Live', statusColor: A, value: '0.66420', delta: '+0.22%', deltaColor: A,
|
|
250
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
251
|
+
endpoint: '/v1/fx/audusd',
|
|
252
|
+
endpointDesc: 'Latest AUD/USD spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
253
|
+
rate: '60 / min', latency: '41 ms',
|
|
254
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
255
|
+
line: '0,142 95,134 190,148 285,118 380,126 475,94 570,102 665,68 760,76 855,42 950,34 1040,28',
|
|
256
|
+
area: '0,240 0,142 95,134 190,148 285,118 380,126 475,94 570,102 665,68 760,76 855,42 950,34 1040,28 1040,240',
|
|
257
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
258
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
259
|
+
ranges: [
|
|
260
|
+
{ label: '1D', delta: '+0.2%', up: true }, { label: '7D', delta: '+0.5%', up: true },
|
|
261
|
+
{ label: '1M', delta: '+0.9%', up: true }, { label: '3M', delta: '+1.8%', up: true },
|
|
262
|
+
{ label: '1Y', delta: '-1.4%', up: false }, { label: '5Y', delta: '-6.2%', up: false },
|
|
263
|
+
{ label: 'Max', delta: '-14.3%', up: false },
|
|
264
|
+
],
|
|
265
|
+
related: [
|
|
266
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
267
|
+
{ sym: 'GBP/USD', name: 'Sterling / US Dollar', val: '1.27310', status: 'Live', color: A, group: 'fx' },
|
|
268
|
+
{ sym: 'USD/CAD', name: 'US Dollar / Canadian Dollar', val: '1.36110', status: 'Live', color: A, group: 'fx' },
|
|
269
|
+
],
|
|
270
|
+
reading: [
|
|
271
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
272
|
+
{ type: 'Blog', title: 'AUD as a risk proxy: iron ore and RBA rate cycles' },
|
|
273
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
274
|
+
],
|
|
275
|
+
},
|
|
276
|
+
'fx-eurgbp': {
|
|
277
|
+
group: 'fx', id: 'eurgbp', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
278
|
+
sym: 'EUR/GBP', name: 'Euro / Sterling', valueUnit: '', deltaNote: 'today',
|
|
279
|
+
statusLabel: 'Live', statusColor: A, value: '0.85330', delta: '+0.18%', deltaColor: A,
|
|
280
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
281
|
+
endpoint: '/v1/fx/eurgbp',
|
|
282
|
+
endpointDesc: 'Latest EUR/GBP spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
283
|
+
rate: '60 / min', latency: '41 ms',
|
|
284
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
285
|
+
line: '0,144 95,136 190,150 285,120 380,128 475,96 570,104 665,70 760,78 855,44 950,36 1040,30',
|
|
286
|
+
area: '0,240 0,144 95,136 190,150 285,120 380,128 475,96 570,104 665,70 760,78 855,44 950,36 1040,30 1040,240',
|
|
287
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
288
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
289
|
+
ranges: [
|
|
290
|
+
{ label: '1D', delta: '+0.2%', up: true }, { label: '7D', delta: '+0.4%', up: true },
|
|
291
|
+
{ label: '1M', delta: '+0.7%', up: true }, { label: '3M', delta: '+1.2%', up: true },
|
|
292
|
+
{ label: '1Y', delta: '+0.8%', up: true }, { label: '5Y', delta: '-3.4%', up: false },
|
|
293
|
+
{ label: 'Max', delta: '-8.2%', up: false },
|
|
294
|
+
],
|
|
295
|
+
related: [
|
|
296
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
297
|
+
{ sym: 'GBP/USD', name: 'Sterling / US Dollar', val: '1.27310', status: 'Live', color: A, group: 'fx' },
|
|
298
|
+
{ sym: 'EUR/JPY', name: 'Euro / Yen', val: '170.80', status: 'Live', color: A, group: 'fx' },
|
|
299
|
+
],
|
|
300
|
+
reading: [
|
|
301
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
302
|
+
{ type: 'Blog', title: 'EUR/GBP: post-Brexit range compression and breakout signals' },
|
|
303
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
304
|
+
],
|
|
305
|
+
},
|
|
306
|
+
'fx-eurjpy': {
|
|
307
|
+
group: 'fx', id: 'eurjpy', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
308
|
+
sym: 'EUR/JPY', name: 'Euro / Yen', valueUnit: '', deltaNote: 'today',
|
|
309
|
+
statusLabel: 'Live', statusColor: A, value: '170.80', delta: '+0.09%', deltaColor: A,
|
|
310
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
311
|
+
endpoint: '/v1/fx/eurjpy',
|
|
312
|
+
endpointDesc: 'Latest EUR/JPY spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
313
|
+
rate: '60 / min', latency: '41 ms',
|
|
314
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
315
|
+
line: '0,155 95,147 190,161 285,131 380,139 475,107 570,115 665,80 760,88 855,55 950,47 1040,40',
|
|
316
|
+
area: '0,240 0,155 95,147 190,161 285,131 380,139 475,107 570,115 665,80 760,88 855,55 950,47 1040,40 1040,240',
|
|
317
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
318
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
319
|
+
ranges: [
|
|
320
|
+
{ label: '1D', delta: '+0.1%', up: true }, { label: '7D', delta: '+0.5%', up: true },
|
|
321
|
+
{ label: '1M', delta: '+1.6%', up: true }, { label: '3M', delta: '+4.0%', up: true },
|
|
322
|
+
{ label: '1Y', delta: '+11.2%', up: true }, { label: '5Y', delta: '+28.6%', up: true },
|
|
323
|
+
{ label: 'Max', delta: '+52.4%', up: true },
|
|
324
|
+
],
|
|
325
|
+
related: [
|
|
326
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
327
|
+
{ sym: 'USD/JPY', name: 'US Dollar / Yen', val: '157.21', status: 'Live', color: A, group: 'fx' },
|
|
328
|
+
{ sym: 'GBP/JPY', name: 'Sterling / Yen', val: '200.15', status: 'Live', color: A, group: 'fx' },
|
|
329
|
+
],
|
|
330
|
+
reading: [
|
|
331
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
332
|
+
{ type: 'Blog', title: 'EUR/JPY carry trade mechanics and unwind risk' },
|
|
333
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
334
|
+
],
|
|
335
|
+
},
|
|
336
|
+
'fx-gbpjpy': {
|
|
337
|
+
group: 'fx', id: 'gbpjpy', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
338
|
+
sym: 'GBP/JPY', name: 'Sterling / Yen', valueUnit: '', deltaNote: 'today',
|
|
339
|
+
statusLabel: 'Live', statusColor: A, value: '200.15', delta: '-0.14%', deltaColor: D,
|
|
340
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
341
|
+
endpoint: '/v1/fx/gbpjpy',
|
|
342
|
+
endpointDesc: 'Latest GBP/JPY spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
343
|
+
rate: '60 / min', latency: '41 ms',
|
|
344
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
345
|
+
line: '0,158 95,150 190,164 285,136 380,144 475,112 570,120 665,84 760,92 855,58 950,50 1040,42',
|
|
346
|
+
area: '0,240 0,158 95,150 190,164 285,136 380,144 475,112 570,120 665,84 760,92 855,58 950,50 1040,42 1040,240',
|
|
347
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
348
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
349
|
+
ranges: [
|
|
350
|
+
{ label: '1D', delta: '-0.1%', up: false }, { label: '7D', delta: '+0.7%', up: true },
|
|
351
|
+
{ label: '1M', delta: '+2.0%', up: true }, { label: '3M', delta: '+5.2%', up: true },
|
|
352
|
+
{ label: '1Y', delta: '+14.4%', up: true }, { label: '5Y', delta: '+34.8%', up: true },
|
|
353
|
+
{ label: 'Max', delta: '+68.2%', up: true },
|
|
354
|
+
],
|
|
355
|
+
related: [
|
|
356
|
+
{ sym: 'GBP/USD', name: 'Sterling / US Dollar', val: '1.27310', status: 'Live', color: A, group: 'fx' },
|
|
357
|
+
{ sym: 'USD/JPY', name: 'US Dollar / Yen', val: '157.21', status: 'Live', color: A, group: 'fx' },
|
|
358
|
+
{ sym: 'EUR/JPY', name: 'Euro / Yen', val: '170.80', status: 'Live', color: A, group: 'fx' },
|
|
359
|
+
],
|
|
360
|
+
reading: [
|
|
361
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
362
|
+
{ type: 'Blog', title: 'GBP/JPY volatility and the "widow-maker" reputation' },
|
|
363
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
364
|
+
],
|
|
365
|
+
},
|
|
366
|
+
'fx-usdmxn': {
|
|
367
|
+
group: 'fx', id: 'usdmxn', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
368
|
+
sym: 'USD/MXN', name: 'US Dollar / Mexican Peso', valueUnit: '', deltaNote: 'today',
|
|
369
|
+
statusLabel: 'Delayed', statusColor: W, value: '18.4200', delta: '+0.40%', deltaColor: A,
|
|
370
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
371
|
+
endpoint: '/v1/fx/usdmxn',
|
|
372
|
+
endpointDesc: 'Latest USD/MXN spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
373
|
+
rate: '60 / min', latency: '41 ms',
|
|
374
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
375
|
+
line: '0,135 95,128 190,142 285,110 380,118 475,88 570,96 665,62 760,70 855,38 950,30 1040,24',
|
|
376
|
+
area: '0,240 0,135 95,128 190,142 285,110 380,118 475,88 570,96 665,62 760,70 855,38 950,30 1040,24 1040,240',
|
|
377
|
+
areaFill: 'rgba(178,107,0,.07)',
|
|
378
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
379
|
+
ranges: [
|
|
380
|
+
{ label: '1D', delta: '+0.4%', up: true }, { label: '7D', delta: '+1.2%', up: true },
|
|
381
|
+
{ label: '1M', delta: '+2.8%', up: true }, { label: '3M', delta: '+4.6%', up: true },
|
|
382
|
+
{ label: '1Y', delta: '-8.2%', up: false }, { label: '5Y', delta: '-18.4%', up: false },
|
|
383
|
+
{ label: 'Max', delta: '+204%', up: true },
|
|
384
|
+
],
|
|
385
|
+
related: [
|
|
386
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
387
|
+
{ sym: 'USD/BRL', name: 'US Dollar / Brazilian Real', val: '5.3800', status: 'Delayed', color: W, group: 'fx' },
|
|
388
|
+
{ sym: 'USD/INR', name: 'US Dollar / Indian Rupee', val: '83.4500', status: 'Live', color: A, group: 'fx' },
|
|
389
|
+
],
|
|
390
|
+
reading: [
|
|
391
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
392
|
+
{ type: 'Blog', title: 'MXN carry and the Banxico rate cycle' },
|
|
393
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
394
|
+
],
|
|
395
|
+
},
|
|
396
|
+
'fx-usdbrl': {
|
|
397
|
+
group: 'fx', id: 'usdbrl', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
398
|
+
sym: 'USD/BRL', name: 'US Dollar / Brazilian Real', valueUnit: '', deltaNote: 'today',
|
|
399
|
+
statusLabel: 'Delayed', statusColor: W, value: '5.3800', delta: '-0.55%', deltaColor: D,
|
|
400
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
401
|
+
endpoint: '/v1/fx/usdbrl',
|
|
402
|
+
endpointDesc: 'Latest USD/BRL spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
403
|
+
rate: '60 / min', latency: '41 ms',
|
|
404
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
405
|
+
line: '0,138 95,130 190,144 285,114 380,122 475,90 570,98 665,65 760,73 855,40 950,32 1040,26',
|
|
406
|
+
area: '0,240 0,138 95,130 190,144 285,114 380,122 475,90 570,98 665,65 760,73 855,40 950,32 1040,26 1040,240',
|
|
407
|
+
areaFill: 'rgba(178,107,0,.07)',
|
|
408
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
409
|
+
ranges: [
|
|
410
|
+
{ label: '1D', delta: '-0.6%', up: false }, { label: '7D', delta: '-1.4%', up: false },
|
|
411
|
+
{ label: '1M', delta: '+2.2%', up: true }, { label: '3M', delta: '+5.8%', up: true },
|
|
412
|
+
{ label: '1Y', delta: '+14.6%', up: true }, { label: '5Y', delta: '+32.4%', up: true },
|
|
413
|
+
{ label: 'Max', delta: '+812%', up: true },
|
|
414
|
+
],
|
|
415
|
+
related: [
|
|
416
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
417
|
+
{ sym: 'USD/MXN', name: 'US Dollar / Mexican Peso', val: '18.4200', status: 'Delayed', color: W, group: 'fx' },
|
|
418
|
+
{ sym: 'USD/INR', name: 'US Dollar / Indian Rupee', val: '83.4500', status: 'Live', color: A, group: 'fx' },
|
|
419
|
+
],
|
|
420
|
+
reading: [
|
|
421
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
422
|
+
{ type: 'Blog', title: 'BRL volatility and fiscal risk premia in EM FX' },
|
|
423
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
424
|
+
],
|
|
425
|
+
},
|
|
426
|
+
'fx-usdinr': {
|
|
427
|
+
group: 'fx', id: 'usdinr', groupLabel: 'fx', eyebrow: 'Foreign exchange · spot',
|
|
428
|
+
sym: 'USD/INR', name: 'US Dollar / Indian Rupee', valueUnit: '', deltaNote: 'today',
|
|
429
|
+
statusLabel: 'Live', statusColor: A, value: '83.4500', delta: '+0.06%', deltaColor: A,
|
|
430
|
+
asOf: '2026-06-16 14:02 UTC', sourceName: 'ECB reference + EBS spot',
|
|
431
|
+
endpoint: '/v1/fx/usdinr',
|
|
432
|
+
endpointDesc: 'Latest USD/INR spot — value, ts, source, and point_in_time in a TID-23 envelope.',
|
|
433
|
+
rate: '60 / min', latency: '41 ms',
|
|
434
|
+
sourceFeeds: 'ECB ref · EBS spot', coverage: '1999-01-04 — present', frequency: 'tick (sub-second)',
|
|
435
|
+
line: '0,140 95,132 190,146 285,116 380,124 475,92 570,100 665,66 760,74 855,41 950,33 1040,27',
|
|
436
|
+
area: '0,240 0,140 95,132 190,146 285,116 380,124 475,92 570,100 665,66 760,74 855,41 950,33 1040,27 1040,240',
|
|
437
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
438
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
439
|
+
ranges: [
|
|
440
|
+
{ label: '1D', delta: '+0.1%', up: true }, { label: '7D', delta: '+0.2%', up: true },
|
|
441
|
+
{ label: '1M', delta: '+0.4%', up: true }, { label: '3M', delta: '+1.0%', up: true },
|
|
442
|
+
{ label: '1Y', delta: '+1.8%', up: true }, { label: '5Y', delta: '+8.6%', up: true },
|
|
443
|
+
{ label: 'Max', delta: '+182%', up: true },
|
|
444
|
+
],
|
|
445
|
+
related: [
|
|
446
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
447
|
+
{ sym: 'USD/MXN', name: 'US Dollar / Mexican Peso', val: '18.4200', status: 'Delayed', color: W, group: 'fx' },
|
|
448
|
+
{ sym: 'USD/BRL', name: 'US Dollar / Brazilian Real', val: '5.3800', status: 'Delayed', color: W, group: 'fx' },
|
|
449
|
+
],
|
|
450
|
+
reading: [
|
|
451
|
+
{ type: 'Guide', title: 'How to backfill FX rates without look-ahead bias' },
|
|
452
|
+
{ type: 'Blog', title: 'RBI managed float: reading INR intervention signals' },
|
|
453
|
+
{ type: 'Methodology', title: 'How Console reconciles ECB and EBS quotes' },
|
|
454
|
+
],
|
|
455
|
+
},
|
|
456
|
+
'metals-xagusd': {
|
|
457
|
+
group: 'metals', id: 'xagusd', groupLabel: 'metals', eyebrow: 'Precious metals · spot',
|
|
458
|
+
sym: 'XAG/USD', name: 'Silver / US Dollar', valueUnit: '/oz', deltaNote: 'today',
|
|
459
|
+
statusLabel: 'Delayed', statusColor: W, value: '29.84', delta: '+0.44%', deltaColor: A,
|
|
460
|
+
asOf: '2026-06-16 13:45 UTC', sourceName: 'LBMA fixings + COMEX',
|
|
461
|
+
endpoint: '/v1/metals/xagusd',
|
|
462
|
+
endpointDesc: 'Latest silver spot per troy ounce with source feed and timestamp in a TID-23 envelope.',
|
|
463
|
+
rate: '60 / min', latency: '52 ms',
|
|
464
|
+
sourceFeeds: 'LBMA · COMEX', coverage: '1968-01-02 — present', frequency: '1 minute',
|
|
465
|
+
line: '0,50 95,62 190,56 285,82 380,76 475,106 570,100 665,130 760,138 855,158 950,176 1040,184',
|
|
466
|
+
area: '0,240 0,50 95,62 190,56 285,82 380,76 475,106 570,100 665,130 760,138 855,158 950,176 1040,184 1040,240',
|
|
467
|
+
areaFill: 'rgba(178,107,0,.07)',
|
|
468
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
469
|
+
ranges: [
|
|
470
|
+
{ label: '1D', delta: '+0.4%', up: true }, { label: '7D', delta: '+1.2%', up: true },
|
|
471
|
+
{ label: '1M', delta: '-0.8%', up: false }, { label: '3M', delta: '+4.2%', up: true },
|
|
472
|
+
{ label: '1Y', delta: '+24.6%', up: true }, { label: '5Y', delta: '+88.2%', up: true },
|
|
473
|
+
{ label: 'Max', delta: '+412%', up: true },
|
|
474
|
+
],
|
|
475
|
+
related: [
|
|
476
|
+
{ sym: 'XAU/USD', name: 'Gold / US Dollar', val: '2,338.40', status: 'Delayed 15m', color: D, group: 'metals' },
|
|
477
|
+
{ sym: 'XPT/USD', name: 'Platinum / US Dollar', val: '978.50', status: 'Delayed', color: W, group: 'metals' },
|
|
478
|
+
{ sym: 'XPD/USD', name: 'Palladium / US Dollar', val: '912.00', status: 'Delayed', color: W, group: 'metals' },
|
|
479
|
+
],
|
|
480
|
+
reading: [
|
|
481
|
+
{ type: 'Guide', title: 'Spot gold vs futures: which series to query' },
|
|
482
|
+
{ type: 'Blog', title: 'Silver dual-demand: monetary vs industrial drivers' },
|
|
483
|
+
{ type: 'Methodology', title: 'Metals benchmark sources and revisions' },
|
|
484
|
+
],
|
|
485
|
+
},
|
|
486
|
+
'metals-xptusd': {
|
|
487
|
+
group: 'metals', id: 'xptusd', groupLabel: 'metals', eyebrow: 'Precious metals · spot',
|
|
488
|
+
sym: 'XPT/USD', name: 'Platinum / US Dollar', valueUnit: '/oz', deltaNote: 'today',
|
|
489
|
+
statusLabel: 'Delayed', statusColor: W, value: '978.50', delta: '+1.02%', deltaColor: A,
|
|
490
|
+
asOf: '2026-06-16 13:45 UTC', sourceName: 'LBMA fixings + COMEX',
|
|
491
|
+
endpoint: '/v1/metals/xptusd',
|
|
492
|
+
endpointDesc: 'Latest platinum spot per troy ounce with source feed and timestamp in a TID-23 envelope.',
|
|
493
|
+
rate: '60 / min', latency: '52 ms',
|
|
494
|
+
sourceFeeds: 'LBMA · COMEX', coverage: '1968-01-02 — present', frequency: '1 minute',
|
|
495
|
+
line: '0,55 95,68 190,60 285,88 380,80 475,112 570,106 665,136 760,144 855,164 950,182 1040,190',
|
|
496
|
+
area: '0,240 0,55 95,68 190,60 285,88 380,80 475,112 570,106 665,136 760,144 855,164 950,182 1040,190 1040,240',
|
|
497
|
+
areaFill: 'rgba(178,107,0,.07)',
|
|
498
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
499
|
+
ranges: [
|
|
500
|
+
{ label: '1D', delta: '+1.0%', up: true }, { label: '7D', delta: '+2.4%', up: true },
|
|
501
|
+
{ label: '1M', delta: '+1.8%', up: true }, { label: '3M', delta: '+6.2%', up: true },
|
|
502
|
+
{ label: '1Y', delta: '-4.8%', up: false }, { label: '5Y', delta: '-28.4%', up: false },
|
|
503
|
+
{ label: 'Max', delta: '-12.6%', up: false },
|
|
504
|
+
],
|
|
505
|
+
related: [
|
|
506
|
+
{ sym: 'XAU/USD', name: 'Gold / US Dollar', val: '2,338.40', status: 'Delayed 15m', color: D, group: 'metals' },
|
|
507
|
+
{ sym: 'XAG/USD', name: 'Silver / US Dollar', val: '29.84', status: 'Delayed', color: W, group: 'metals' },
|
|
508
|
+
{ sym: 'XPD/USD', name: 'Palladium / US Dollar', val: '912.00', status: 'Delayed', color: W, group: 'metals' },
|
|
509
|
+
],
|
|
510
|
+
reading: [
|
|
511
|
+
{ type: 'Guide', title: 'Spot gold vs futures: which series to query' },
|
|
512
|
+
{ type: 'Blog', title: 'Platinum supply concentration and auto-catalyst demand' },
|
|
513
|
+
{ type: 'Methodology', title: 'Metals benchmark sources and revisions' },
|
|
514
|
+
],
|
|
515
|
+
},
|
|
516
|
+
'metals-xpdusd': {
|
|
517
|
+
group: 'metals', id: 'xpdusd', groupLabel: 'metals', eyebrow: 'Precious metals · spot',
|
|
518
|
+
sym: 'XPD/USD', name: 'Palladium / US Dollar', valueUnit: '/oz', deltaNote: 'today',
|
|
519
|
+
statusLabel: 'Delayed', statusColor: W, value: '912.00', delta: '-0.18%', deltaColor: D,
|
|
520
|
+
asOf: '2026-06-16 13:45 UTC', sourceName: 'LBMA fixings + COMEX',
|
|
521
|
+
endpoint: '/v1/metals/xpdusd',
|
|
522
|
+
endpointDesc: 'Latest palladium spot per troy ounce with source feed and timestamp in a TID-23 envelope.',
|
|
523
|
+
rate: '60 / min', latency: '52 ms',
|
|
524
|
+
sourceFeeds: 'LBMA · COMEX', coverage: '1968-01-02 — present', frequency: '1 minute',
|
|
525
|
+
line: '0,48 95,60 190,54 285,80 380,74 475,104 570,98 665,128 760,136 855,155 950,172 1040,180',
|
|
526
|
+
area: '0,240 0,48 95,60 190,54 285,80 380,74 475,104 570,98 665,128 760,136 855,155 950,172 1040,180 1040,240',
|
|
527
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
528
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
529
|
+
ranges: [
|
|
530
|
+
{ label: '1D', delta: '-0.2%', up: false }, { label: '7D', delta: '-1.0%', up: false },
|
|
531
|
+
{ label: '1M', delta: '-2.4%', up: false }, { label: '3M', delta: '-8.6%', up: false },
|
|
532
|
+
{ label: '1Y', delta: '-22.4%', up: false }, { label: '5Y', delta: '-62.8%', up: false },
|
|
533
|
+
{ label: 'Max', delta: '+284%', up: true },
|
|
534
|
+
],
|
|
535
|
+
related: [
|
|
536
|
+
{ sym: 'XAU/USD', name: 'Gold / US Dollar', val: '2,338.40', status: 'Delayed 15m', color: D, group: 'metals' },
|
|
537
|
+
{ sym: 'XAG/USD', name: 'Silver / US Dollar', val: '29.84', status: 'Delayed', color: W, group: 'metals' },
|
|
538
|
+
{ sym: 'XPT/USD', name: 'Platinum / US Dollar', val: '978.50', status: 'Delayed', color: W, group: 'metals' },
|
|
539
|
+
],
|
|
540
|
+
reading: [
|
|
541
|
+
{ type: 'Guide', title: 'Spot gold vs futures: which series to query' },
|
|
542
|
+
{ type: 'Blog', title: 'Palladium and the ICE-vehicle transition timeline' },
|
|
543
|
+
{ type: 'Methodology', title: 'Metals benchmark sources and revisions' },
|
|
544
|
+
],
|
|
545
|
+
},
|
|
546
|
+
'metals-xaueur': {
|
|
547
|
+
group: 'metals', id: 'xaueur', groupLabel: 'metals', eyebrow: 'Precious metals · spot',
|
|
548
|
+
sym: 'XAU/EUR', name: 'Gold / Euro', valueUnit: '/oz', deltaNote: 'today',
|
|
549
|
+
statusLabel: 'Delayed', statusColor: W, value: '2,153.90', delta: '-0.31%', deltaColor: D,
|
|
550
|
+
asOf: '2026-06-16 13:45 UTC', sourceName: 'LBMA fixings + COMEX',
|
|
551
|
+
endpoint: '/v1/metals/xaueur',
|
|
552
|
+
endpointDesc: 'Latest gold spot per troy ounce in EUR with source feed and timestamp in a TID-23 envelope.',
|
|
553
|
+
rate: '60 / min', latency: '52 ms',
|
|
554
|
+
sourceFeeds: 'LBMA · COMEX · ECB ref', coverage: '1999-01-04 — present', frequency: '1 minute',
|
|
555
|
+
line: '0,42 95,54 190,48 285,74 380,68 475,98 570,92 665,122 760,130 855,152 950,170 1040,178',
|
|
556
|
+
area: '0,240 0,42 95,54 190,48 285,74 380,68 475,98 570,92 665,122 760,130 855,152 950,170 1040,178 1040,240',
|
|
557
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
558
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
559
|
+
ranges: [
|
|
560
|
+
{ label: '1D', delta: '-0.3%', up: false }, { label: '7D', delta: '+0.7%', up: true },
|
|
561
|
+
{ label: '1M', delta: '-1.0%', up: false }, { label: '3M', delta: '+1.8%', up: true },
|
|
562
|
+
{ label: '1Y', delta: '+16.4%', up: true }, { label: '5Y', delta: '+68.6%', up: true },
|
|
563
|
+
{ label: 'Max', delta: '+284%', up: true },
|
|
564
|
+
],
|
|
565
|
+
related: [
|
|
566
|
+
{ sym: 'XAU/USD', name: 'Gold / US Dollar', val: '2,338.40', status: 'Delayed 15m', color: D, group: 'metals' },
|
|
567
|
+
{ sym: 'XAU/GBP', name: 'Gold / Sterling', val: '1,838.20', status: 'Delayed', color: W, group: 'metals' },
|
|
568
|
+
{ sym: 'EUR/USD', name: 'Euro / US Dollar', val: '1.08642', status: 'Live', color: A, group: 'fx' },
|
|
569
|
+
],
|
|
570
|
+
reading: [
|
|
571
|
+
{ type: 'Guide', title: 'Spot gold vs futures: which series to query' },
|
|
572
|
+
{ type: 'Blog', title: 'Gold priced in euros: ECB policy and EUR/USD drag' },
|
|
573
|
+
{ type: 'Methodology', title: 'Metals benchmark sources and revisions' },
|
|
574
|
+
],
|
|
575
|
+
},
|
|
576
|
+
'metals-xaugbp': {
|
|
577
|
+
group: 'metals', id: 'xaugbp', groupLabel: 'metals', eyebrow: 'Precious metals · spot',
|
|
578
|
+
sym: 'XAU/GBP', name: 'Gold / Sterling', valueUnit: '/oz', deltaNote: 'today',
|
|
579
|
+
statusLabel: 'Delayed', statusColor: W, value: '1,838.20', delta: '-0.48%', deltaColor: D,
|
|
580
|
+
asOf: '2026-06-16 13:45 UTC', sourceName: 'LBMA fixings + COMEX',
|
|
581
|
+
endpoint: '/v1/metals/xaugbp',
|
|
582
|
+
endpointDesc: 'Latest gold spot per troy ounce in GBP with source feed and timestamp in a TID-23 envelope.',
|
|
583
|
+
rate: '60 / min', latency: '52 ms',
|
|
584
|
+
sourceFeeds: 'LBMA · COMEX · ECB ref', coverage: '1999-01-04 — present', frequency: '1 minute',
|
|
585
|
+
line: '0,44 95,56 190,50 285,76 380,70 475,100 570,94 665,124 760,132 855,154 950,172 1040,180',
|
|
586
|
+
area: '0,240 0,44 95,56 190,50 285,76 380,70 475,100 570,94 665,124 760,132 855,154 950,172 1040,180 1040,240',
|
|
587
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
588
|
+
axisStart: 'May 17', axisMid: 'Jun 1', axisEnd: 'Jun 16',
|
|
589
|
+
ranges: [
|
|
590
|
+
{ label: '1D', delta: '-0.5%', up: false }, { label: '7D', delta: '+0.6%', up: true },
|
|
591
|
+
{ label: '1M', delta: '-1.2%', up: false }, { label: '3M', delta: '+2.0%', up: true },
|
|
592
|
+
{ label: '1Y', delta: '+17.8%', up: true }, { label: '5Y', delta: '+72.4%', up: true },
|
|
593
|
+
{ label: 'Max', delta: '+306%', up: true },
|
|
594
|
+
],
|
|
595
|
+
related: [
|
|
596
|
+
{ sym: 'XAU/USD', name: 'Gold / US Dollar', val: '2,338.40', status: 'Delayed 15m', color: D, group: 'metals' },
|
|
597
|
+
{ sym: 'XAU/EUR', name: 'Gold / Euro', val: '2,153.90', status: 'Delayed', color: W, group: 'metals' },
|
|
598
|
+
{ sym: 'GBP/USD', name: 'Sterling / US Dollar', val: '1.27310', status: 'Live', color: A, group: 'fx' },
|
|
599
|
+
],
|
|
600
|
+
reading: [
|
|
601
|
+
{ type: 'Guide', title: 'Spot gold vs futures: which series to query' },
|
|
602
|
+
{ type: 'Blog', title: 'Gold in sterling: BoE policy and GBP/USD cross-effects' },
|
|
603
|
+
{ type: 'Methodology', title: 'Metals benchmark sources and revisions' },
|
|
604
|
+
],
|
|
605
|
+
},
|
|
606
|
+
'power-caiso-rt': {
|
|
607
|
+
group: 'power', id: 'caiso-rt', groupLabel: 'power', eyebrow: 'Wholesale power · real-time LMP',
|
|
608
|
+
sym: 'CAISO-RT', name: 'CAISO SP15 real-time', valueUnit: '$/MWh', deltaNote: 'vs prior interval',
|
|
609
|
+
statusLabel: 'Live', statusColor: A, value: '52.40', delta: '+7.22%', deltaColor: A,
|
|
610
|
+
asOf: '2026-06-16 14:00 UTC', sourceName: 'CAISO OASIS',
|
|
611
|
+
endpoint: '/v1/power/caiso-rt',
|
|
612
|
+
endpointDesc: 'Latest CAISO SP15 real-time LMP in $/MWh.',
|
|
613
|
+
rate: '600 / min', latency: '88 ms',
|
|
614
|
+
sourceFeeds: 'CAISO OASIS', coverage: '2005-04-01 — present', frequency: '5 minutes',
|
|
615
|
+
line: '0,115 95,90 190,145 285,75 380,155 475,65 570,135 665,55 760,145 855,85 950,125 1040,68',
|
|
616
|
+
area: '0,240 0,115 95,90 190,145 285,75 380,155 475,65 570,135 665,55 760,145 855,85 950,125 1040,68 1040,240',
|
|
617
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
618
|
+
axisStart: '08:00', axisMid: '12:00', axisEnd: '14:00',
|
|
619
|
+
ranges: [
|
|
620
|
+
{ label: '1D', delta: '+7.2%', up: true }, { label: '7D', delta: '-4.6%', up: false },
|
|
621
|
+
{ label: '1M', delta: '+18.2%', up: true }, { label: '3M', delta: '+6.4%', up: true },
|
|
622
|
+
{ label: '1Y', delta: '-14.8%', up: false }, { label: '5Y', delta: '+12.2%', up: true },
|
|
623
|
+
{ label: 'Max', delta: '+64%', up: true },
|
|
624
|
+
],
|
|
625
|
+
related: [
|
|
626
|
+
{ sym: 'PJM-RT', name: 'PJM Real-Time LMP', val: '38.21', status: 'Degraded', color: W, group: 'power' },
|
|
627
|
+
{ sym: 'ERCOT-RT', name: 'ERCOT Houston real-time', val: '29.95', status: 'Live', color: A, group: 'power' },
|
|
628
|
+
{ sym: 'CAISO-DA', name: 'CAISO SP15 day-ahead', val: '48.60', status: 'Live', color: A, group: 'power' },
|
|
629
|
+
],
|
|
630
|
+
reading: [
|
|
631
|
+
{ type: 'Guide', title: 'Working with 5-minute ISO LMP feeds' },
|
|
632
|
+
{ type: 'Blog', title: 'CAISO solar curtailment and real-time price spikes' },
|
|
633
|
+
{ type: 'Methodology', title: 'Power LMP coverage and node mapping' },
|
|
634
|
+
],
|
|
635
|
+
},
|
|
636
|
+
'power-ercot-rt': {
|
|
637
|
+
group: 'power', id: 'ercot-rt', groupLabel: 'power', eyebrow: 'Wholesale power · real-time LMP',
|
|
638
|
+
sym: 'ERCOT-RT', name: 'ERCOT Houston real-time', valueUnit: '$/MWh', deltaNote: 'vs prior interval',
|
|
639
|
+
statusLabel: 'Live', statusColor: A, value: '29.95', delta: '-1.80%', deltaColor: D,
|
|
640
|
+
asOf: '2026-06-16 14:00 UTC', sourceName: 'ERCOT settlement point prices',
|
|
641
|
+
endpoint: '/v1/power/ercot-rt',
|
|
642
|
+
endpointDesc: 'Latest ERCOT Houston Hub real-time settlement point price in $/MWh.',
|
|
643
|
+
rate: '600 / min', latency: '88 ms',
|
|
644
|
+
sourceFeeds: 'ERCOT SPP', coverage: '2005-04-01 — present', frequency: '5 minutes',
|
|
645
|
+
line: '0,118 95,93 190,148 285,78 380,158 475,68 570,138 665,58 760,148 855,88 950,128 1040,70',
|
|
646
|
+
area: '0,240 0,118 95,93 190,148 285,78 380,158 475,68 570,138 665,58 760,148 855,88 950,128 1040,70 1040,240',
|
|
647
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
648
|
+
axisStart: '08:00', axisMid: '12:00', axisEnd: '14:00',
|
|
649
|
+
ranges: [
|
|
650
|
+
{ label: '1D', delta: '-1.8%', up: false }, { label: '7D', delta: '-8.2%', up: false },
|
|
651
|
+
{ label: '1M', delta: '+8.4%', up: true }, { label: '3M', delta: '-2.6%', up: false },
|
|
652
|
+
{ label: '1Y', delta: '-28.4%', up: false }, { label: '5Y', delta: '+4.8%', up: true },
|
|
653
|
+
{ label: 'Max', delta: '+42%', up: true },
|
|
654
|
+
],
|
|
655
|
+
related: [
|
|
656
|
+
{ sym: 'PJM-RT', name: 'PJM Real-Time LMP', val: '38.21', status: 'Degraded', color: W, group: 'power' },
|
|
657
|
+
{ sym: 'CAISO-RT', name: 'CAISO SP15 real-time', val: '52.40', status: 'Live', color: A, group: 'power' },
|
|
658
|
+
{ sym: 'MISO-RT', name: 'MISO Indiana hub', val: '34.18', status: 'Degraded', color: W, group: 'power' },
|
|
659
|
+
],
|
|
660
|
+
reading: [
|
|
661
|
+
{ type: 'Guide', title: 'Working with 5-minute ISO LMP feeds' },
|
|
662
|
+
{ type: 'Blog', title: 'ERCOT scarcity pricing and ORDC adders' },
|
|
663
|
+
{ type: 'Methodology', title: 'Power LMP coverage and node mapping' },
|
|
664
|
+
],
|
|
665
|
+
},
|
|
666
|
+
'power-miso-rt': {
|
|
667
|
+
group: 'power', id: 'miso-rt', groupLabel: 'power', eyebrow: 'Wholesale power · real-time LMP',
|
|
668
|
+
sym: 'MISO-RT', name: 'MISO Indiana hub', valueUnit: '$/MWh', deltaNote: 'vs prior interval',
|
|
669
|
+
statusLabel: 'Degraded', statusColor: W, value: '34.18', delta: '+2.50%', deltaColor: A,
|
|
670
|
+
asOf: '2026-06-16 14:00 UTC', sourceName: 'MISO API',
|
|
671
|
+
endpoint: '/v1/power/miso-rt',
|
|
672
|
+
endpointDesc: 'Latest MISO Indiana Hub real-time LMP in $/MWh.',
|
|
673
|
+
rate: '600 / min', latency: '88 ms',
|
|
674
|
+
sourceFeeds: 'MISO API', coverage: '2005-04-01 — present', frequency: '5 minutes',
|
|
675
|
+
line: '0,122 95,97 190,152 285,82 380,162 475,72 570,142 665,62 760,152 855,92 950,132 1040,74',
|
|
676
|
+
area: '0,240 0,122 95,97 190,152 285,82 380,162 475,72 570,142 665,62 760,152 855,92 950,132 1040,74 1040,240',
|
|
677
|
+
areaFill: 'rgba(178,107,0,.07)',
|
|
678
|
+
axisStart: '08:00', axisMid: '12:00', axisEnd: '14:00',
|
|
679
|
+
ranges: [
|
|
680
|
+
{ label: '1D', delta: '+2.5%', up: true }, { label: '7D', delta: '-5.4%', up: false },
|
|
681
|
+
{ label: '1M', delta: '+10.8%', up: true }, { label: '3M', delta: '-1.8%', up: false },
|
|
682
|
+
{ label: '1Y', delta: '-18.6%', up: false }, { label: '5Y', delta: '+6.4%', up: true },
|
|
683
|
+
{ label: 'Max', delta: '+48%', up: true },
|
|
684
|
+
],
|
|
685
|
+
related: [
|
|
686
|
+
{ sym: 'PJM-RT', name: 'PJM Real-Time LMP', val: '38.21', status: 'Degraded', color: W, group: 'power' },
|
|
687
|
+
{ sym: 'ERCOT-RT', name: 'ERCOT Houston real-time', val: '29.95', status: 'Live', color: A, group: 'power' },
|
|
688
|
+
{ sym: 'NYISO-RT', name: 'NYISO Zone J real-time', val: '45.80', status: 'Live', color: A, group: 'power' },
|
|
689
|
+
],
|
|
690
|
+
reading: [
|
|
691
|
+
{ type: 'Guide', title: 'Working with 5-minute ISO LMP feeds' },
|
|
692
|
+
{ type: 'Blog', title: 'MISO congestion components and import/export flows' },
|
|
693
|
+
{ type: 'Methodology', title: 'Power LMP coverage and node mapping' },
|
|
694
|
+
],
|
|
695
|
+
},
|
|
696
|
+
'power-nyiso-rt': {
|
|
697
|
+
group: 'power', id: 'nyiso-rt', groupLabel: 'power', eyebrow: 'Wholesale power · real-time LMP',
|
|
698
|
+
sym: 'NYISO-RT', name: 'NYISO Zone J real-time', valueUnit: '$/MWh', deltaNote: 'vs prior interval',
|
|
699
|
+
statusLabel: 'Live', statusColor: A, value: '45.80', delta: '+9.10%', deltaColor: A,
|
|
700
|
+
asOf: '2026-06-16 14:00 UTC', sourceName: 'NYISO API',
|
|
701
|
+
endpoint: '/v1/power/nyiso-rt',
|
|
702
|
+
endpointDesc: 'Latest NYISO Zone J (NYC) real-time LMP in $/MWh.',
|
|
703
|
+
rate: '600 / min', latency: '88 ms',
|
|
704
|
+
sourceFeeds: 'NYISO API', coverage: '2005-04-01 — present', frequency: '5 minutes',
|
|
705
|
+
line: '0,116 95,91 190,146 285,76 380,156 475,66 570,136 665,56 760,146 855,86 950,126 1040,69',
|
|
706
|
+
area: '0,240 0,116 95,91 190,146 285,76 380,156 475,66 570,136 665,56 760,146 855,86 950,126 1040,69 1040,240',
|
|
707
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
708
|
+
axisStart: '08:00', axisMid: '12:00', axisEnd: '14:00',
|
|
709
|
+
ranges: [
|
|
710
|
+
{ label: '1D', delta: '+9.1%', up: true }, { label: '7D', delta: '-3.8%', up: false },
|
|
711
|
+
{ label: '1M', delta: '+22.4%', up: true }, { label: '3M', delta: '+8.6%', up: true },
|
|
712
|
+
{ label: '1Y', delta: '-10.2%', up: false }, { label: '5Y', delta: '+16.8%', up: true },
|
|
713
|
+
{ label: 'Max', delta: '+72%', up: true },
|
|
714
|
+
],
|
|
715
|
+
related: [
|
|
716
|
+
{ sym: 'PJM-RT', name: 'PJM Real-Time LMP', val: '38.21', status: 'Degraded', color: W, group: 'power' },
|
|
717
|
+
{ sym: 'CAISO-RT', name: 'CAISO SP15 real-time', val: '52.40', status: 'Live', color: A, group: 'power' },
|
|
718
|
+
{ sym: 'MISO-RT', name: 'MISO Indiana hub', val: '34.18', status: 'Degraded', color: W, group: 'power' },
|
|
719
|
+
],
|
|
720
|
+
reading: [
|
|
721
|
+
{ type: 'Guide', title: 'Working with 5-minute ISO LMP feeds' },
|
|
722
|
+
{ type: 'Blog', title: 'NYISO Zone J congestion and transmission constraints' },
|
|
723
|
+
{ type: 'Methodology', title: 'Power LMP coverage and node mapping' },
|
|
724
|
+
],
|
|
725
|
+
},
|
|
726
|
+
'power-spp-rt': {
|
|
727
|
+
group: 'power', id: 'spp-rt', groupLabel: 'power', eyebrow: 'Wholesale power · real-time LMP',
|
|
728
|
+
sym: 'SPP-RT', name: 'SPP South hub real-time', valueUnit: '$/MWh', deltaNote: 'vs prior interval',
|
|
729
|
+
statusLabel: 'Live', statusColor: A, value: '27.40', delta: '-3.20%', deltaColor: D,
|
|
730
|
+
asOf: '2026-06-16 14:00 UTC', sourceName: 'SPP API',
|
|
731
|
+
endpoint: '/v1/power/spp-rt',
|
|
732
|
+
endpointDesc: 'Latest SPP South Hub real-time LMP in $/MWh.',
|
|
733
|
+
rate: '600 / min', latency: '88 ms',
|
|
734
|
+
sourceFeeds: 'SPP API', coverage: '2005-04-01 — present', frequency: '5 minutes',
|
|
735
|
+
line: '0,124 95,99 190,154 285,84 380,164 475,74 570,144 665,64 760,154 855,94 950,134 1040,76',
|
|
736
|
+
area: '0,240 0,124 95,99 190,154 285,84 380,164 475,74 570,144 665,64 760,154 855,94 950,134 1040,76 1040,240',
|
|
737
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
738
|
+
axisStart: '08:00', axisMid: '12:00', axisEnd: '14:00',
|
|
739
|
+
ranges: [
|
|
740
|
+
{ label: '1D', delta: '-3.2%', up: false }, { label: '7D', delta: '-9.6%', up: false },
|
|
741
|
+
{ label: '1M', delta: '+6.2%', up: true }, { label: '3M', delta: '-4.8%', up: false },
|
|
742
|
+
{ label: '1Y', delta: '-24.6%', up: false }, { label: '5Y', delta: '+2.4%', up: true },
|
|
743
|
+
{ label: 'Max', delta: '+38%', up: true },
|
|
744
|
+
],
|
|
745
|
+
related: [
|
|
746
|
+
{ sym: 'PJM-RT', name: 'PJM Real-Time LMP', val: '38.21', status: 'Degraded', color: W, group: 'power' },
|
|
747
|
+
{ sym: 'MISO-RT', name: 'MISO Indiana hub', val: '34.18', status: 'Degraded', color: W, group: 'power' },
|
|
748
|
+
{ sym: 'ERCOT-RT', name: 'ERCOT Houston real-time', val: '29.95', status: 'Live', color: A, group: 'power' },
|
|
749
|
+
],
|
|
750
|
+
reading: [
|
|
751
|
+
{ type: 'Guide', title: 'Working with 5-minute ISO LMP feeds' },
|
|
752
|
+
{ type: 'Blog', title: 'SPP wind generation and negative pricing episodes' },
|
|
753
|
+
{ type: 'Methodology', title: 'Power LMP coverage and node mapping' },
|
|
754
|
+
],
|
|
755
|
+
},
|
|
756
|
+
'power-pjm-da': {
|
|
757
|
+
group: 'power', id: 'pjm-da', groupLabel: 'power', eyebrow: 'Wholesale power · day-ahead LMP',
|
|
758
|
+
sym: 'PJM-DA', name: 'PJM Day-Ahead LMP', valueUnit: '$/MWh', deltaNote: 'vs prior day',
|
|
759
|
+
statusLabel: 'Live', statusColor: A, value: '36.80', delta: '-0.90%', deltaColor: D,
|
|
760
|
+
asOf: '2026-06-16 13:00 UTC', sourceName: 'PJM day-ahead market',
|
|
761
|
+
endpoint: '/v1/power/pjm-da',
|
|
762
|
+
endpointDesc: 'Latest PJM day-ahead locational marginal price at the Western hub, in $/MWh.',
|
|
763
|
+
rate: '600 / min', latency: '88 ms',
|
|
764
|
+
sourceFeeds: 'PJM DAM', coverage: '2005-04-01 — present', frequency: 'hourly',
|
|
765
|
+
line: '0,119 95,94 190,149 285,79 380,159 475,69 570,139 665,59 760,149 855,89 950,129 1040,71',
|
|
766
|
+
area: '0,240 0,119 95,94 190,149 285,79 380,159 475,69 570,139 665,59 760,149 855,89 950,129 1040,71 1040,240',
|
|
767
|
+
areaFill: 'rgba(194,69,59,.07)',
|
|
768
|
+
axisStart: 'Hour 1', axisMid: 'Hour 12', axisEnd: 'Hour 24',
|
|
769
|
+
ranges: [
|
|
770
|
+
{ label: '1D', delta: '-0.9%', up: false }, { label: '7D', delta: '-5.2%', up: false },
|
|
771
|
+
{ label: '1M', delta: '+9.4%', up: true }, { label: '3M', delta: '-2.8%', up: false },
|
|
772
|
+
{ label: '1Y', delta: '-19.6%', up: false }, { label: '5Y', delta: '+7.2%', up: true },
|
|
773
|
+
{ label: 'Max', delta: '+52%', up: true },
|
|
774
|
+
],
|
|
775
|
+
related: [
|
|
776
|
+
{ sym: 'PJM-RT', name: 'PJM Real-Time LMP', val: '38.21', status: 'Degraded', color: W, group: 'power' },
|
|
777
|
+
{ sym: 'CAISO-DA', name: 'CAISO SP15 day-ahead', val: '48.60', status: 'Live', color: A, group: 'power' },
|
|
778
|
+
{ sym: 'NYISO-RT', name: 'NYISO Zone J real-time', val: '45.80', status: 'Live', color: A, group: 'power' },
|
|
779
|
+
],
|
|
780
|
+
reading: [
|
|
781
|
+
{ type: 'Guide', title: 'Working with 5-minute ISO LMP feeds' },
|
|
782
|
+
{ type: 'Blog', title: 'Day-ahead vs real-time spread as a congestion signal' },
|
|
783
|
+
{ type: 'Methodology', title: 'Power LMP coverage and node mapping' },
|
|
784
|
+
],
|
|
785
|
+
},
|
|
786
|
+
'power-caiso-da': {
|
|
787
|
+
group: 'power', id: 'caiso-da', groupLabel: 'power', eyebrow: 'Wholesale power · day-ahead LMP',
|
|
788
|
+
sym: 'CAISO-DA', name: 'CAISO SP15 day-ahead', valueUnit: '$/MWh', deltaNote: 'vs prior day',
|
|
789
|
+
statusLabel: 'Live', statusColor: A, value: '48.60', delta: '+1.40%', deltaColor: A,
|
|
790
|
+
asOf: '2026-06-16 13:00 UTC', sourceName: 'CAISO OASIS day-ahead',
|
|
791
|
+
endpoint: '/v1/power/caiso-da',
|
|
792
|
+
endpointDesc: 'Latest CAISO SP15 day-ahead LMP in $/MWh.',
|
|
793
|
+
rate: '600 / min', latency: '88 ms',
|
|
794
|
+
sourceFeeds: 'CAISO OASIS DAM', coverage: '2005-04-01 — present', frequency: 'hourly',
|
|
795
|
+
line: '0,117 95,92 190,147 285,77 380,157 475,67 570,137 665,57 760,147 855,87 950,127 1040,70',
|
|
796
|
+
area: '0,240 0,117 95,92 190,147 285,77 380,157 475,67 570,137 665,57 760,147 855,87 950,127 1040,70 1040,240',
|
|
797
|
+
areaFill: 'rgba(31,138,91,.07)',
|
|
798
|
+
axisStart: 'Hour 1', axisMid: 'Hour 12', axisEnd: 'Hour 24',
|
|
799
|
+
ranges: [
|
|
800
|
+
{ label: '1D', delta: '+1.4%', up: true }, { label: '7D', delta: '-3.2%', up: false },
|
|
801
|
+
{ label: '1M', delta: '+14.6%', up: true }, { label: '3M', delta: '+4.8%', up: true },
|
|
802
|
+
{ label: '1Y', delta: '-12.4%', up: false }, { label: '5Y', delta: '+10.6%', up: true },
|
|
803
|
+
{ label: 'Max', delta: '+58%', up: true },
|
|
804
|
+
],
|
|
805
|
+
related: [
|
|
806
|
+
{ sym: 'CAISO-RT', name: 'CAISO SP15 real-time', val: '52.40', status: 'Live', color: A, group: 'power' },
|
|
807
|
+
{ sym: 'PJM-DA', name: 'PJM Day-Ahead LMP', val: '36.80', status: 'Live', color: A, group: 'power' },
|
|
808
|
+
{ sym: 'NYISO-RT', name: 'NYISO Zone J real-time', val: '45.80', status: 'Live', color: A, group: 'power' },
|
|
809
|
+
],
|
|
810
|
+
reading: [
|
|
811
|
+
{ type: 'Guide', title: 'Working with 5-minute ISO LMP feeds' },
|
|
812
|
+
{ type: 'Blog', title: 'CAISO day-ahead solar over-supply and negative pricing' },
|
|
813
|
+
{ type: 'Methodology', title: 'Power LMP coverage and node mapping' },
|
|
814
|
+
],
|
|
815
|
+
},
|
|
816
|
+
'power-pjm-rt': {
|
|
817
|
+
group: 'power', id: 'pjm-rt', groupLabel: 'power', eyebrow: 'Wholesale power · real-time LMP',
|
|
818
|
+
sym: 'PJM-RT', name: 'PJM Real-Time LMP', valueUnit: '$/MWh', deltaNote: 'vs prior interval',
|
|
819
|
+
statusLabel: 'Degraded', statusColor: W, value: '38.21', delta: '+4.10%', deltaColor: A,
|
|
820
|
+
asOf: '2026-06-16 14:00 UTC', sourceName: 'PJM EMS dispatch',
|
|
821
|
+
endpoint: '/v1/power/pjm-rt',
|
|
822
|
+
endpointDesc: 'Latest PJM real-time locational marginal price at the Western hub, in $/MWh.',
|
|
823
|
+
rate: '600 / min', latency: '88 ms',
|
|
824
|
+
sourceFeeds: 'PJM EMS', coverage: '2005-04-01 — present', frequency: '5 minutes',
|
|
825
|
+
line: '0,120 95,96 190,150 285,80 380,160 475,70 570,140 665,60 760,150 855,90 950,130 1040,72',
|
|
826
|
+
area: '0,240 0,120 95,96 190,150 285,80 380,160 475,70 570,140 665,60 760,150 855,90 950,130 1040,72 1040,240',
|
|
827
|
+
areaFill: 'rgba(178,107,0,.07)',
|
|
828
|
+
axisStart: '08:00', axisMid: '12:00', axisEnd: '14:00',
|
|
829
|
+
ranges: [
|
|
830
|
+
{ label: '1D', delta: '+4.1%', up: true }, { label: '7D', delta: '-6.8%', up: false },
|
|
831
|
+
{ label: '1M', delta: '+12.4%', up: true }, { label: '3M', delta: '-3.2%', up: false },
|
|
832
|
+
{ label: '1Y', delta: '-22.0%', up: false }, { label: '5Y', delta: '+8.5%', up: true },
|
|
833
|
+
{ label: 'Max', delta: '+58%', up: true },
|
|
834
|
+
],
|
|
835
|
+
related: [
|
|
836
|
+
{ sym: 'CAISO-RT', name: 'CAISO SP15 real-time', val: '52.40', status: 'Live', color: A, group: 'power' },
|
|
837
|
+
{ sym: 'ERCOT-RT', name: 'ERCOT Houston real-time', val: '29.95', status: 'Live', color: A, group: 'power' },
|
|
838
|
+
{ sym: 'MISO-RT', name: 'MISO Indiana hub', val: '34.18', status: 'Degraded', color: W, group: 'power' },
|
|
839
|
+
],
|
|
840
|
+
reading: [
|
|
841
|
+
{ type: 'Guide', title: 'Working with 5-minute ISO LMP feeds' },
|
|
842
|
+
{ type: 'Blog', title: 'Why PJM real-time prices spike, and how we flag it' },
|
|
843
|
+
{ type: 'Methodology', title: 'Power LMP coverage and node mapping' },
|
|
844
|
+
],
|
|
845
|
+
},
|
|
846
|
+
};
|
|
847
|
+
|
|
848
|
+
export function getSeriesData(group: string, slug: string): SeriesData | null {
|
|
849
|
+
const key = `${group}-${slug}`;
|
|
850
|
+
return SERIES_DATA[key] ?? null;
|
|
851
|
+
}
|