LOCKED v1 CONTRACT (Base Mainnet) - The public v1 matrix schema (schemaVersion 1.0.0) is frozen. Self-serve x402 settlement runs against Base mainnet.
MyPivots x402 Pay-Per-Call API Reference
Customer-facing integration guide and reference catalog for the MyPivots Daily Notes v1 Matrix API, supporting both self-serve x402 USDC micropayments and licensed partner Bearer API keys.
1. Overview & Getting Started
MyPivots provides high-precision pivot points, daily price bars, and technical indicators across futures, equities, cash indices, forex, and crypto. The Daily Notes v1 Matrix API provides programmatic access for licensed data partners, autonomous trading agents, backtesters, and financial tools.
Quick-Start Integration Flow
- Choose your symbols using canonical namespaced identifiers (fut:, stk:, idx:, fx:, crypto:) and your target ISO-8601 dates (YYYY-MM-DD), up to 100 cells (symbols × dates <= 100) per call.
- Licensed Partners: send POST /api/v1/dailynotes/query with Authorization: Bearer mp_live_<keyId>_<secret> to receive the HTTP 200 matrix response immediately.
- Self-Serve x402 Agents: send POST /api/v1/dailynotes/query without payment headers to receive an HTTP 402 challenge quoting totalAtomic and disclosing any partialCells, then retry the same POST with X-PAYMENT: <base64> signed for totalAtomic.
- Parse the deterministic cells[] array (returned in exact symbols × dates request order), branching on cell.status ("full" | "partial" | "missing").
Standard Public Symbol Namespaces
| Prefix | Asset Class | Format & Notes | Examples |
|---|---|---|---|
fut: | Futures | Futures contracts in compact root + expiry month code + 2-digit year format (no space in the query ID; display ticker in data.ticker includes a space, e.g. "NQ Z26"). | fut:NQZ26, fut:ESZ26, fut:CLF27 |
stk: | Stocks & ETFs | US equities and exchange-traded funds (ETFs). | stk:AAPL, stk:SPY, stk:MSFT |
idx: | Cash Indices | Cash market indices. | idx:SP500, idx:VIX, idx:DJI |
fx: | Forex & Metals | Spot foreign exchange currency pairs and precious metals. | fx:EURUSD, fx:USDJPY, fx:XAUUSD |
crypto: | Crypto | Cryptocurrency spot pairs. | crypto:BTCUSD, crypto:ETHUSD |
2. Authentication (Self-Serve x402 & Licensed Partner Keys)
Dual authentication support: (1) Self-serve HTTP-native x402 micropayments via EIP-3009 USDC transfer authorizations (no account required), and (2) Licensed partner Bearer API keys (Authorization: Bearer mp_live_...) under a commercial agreement.
Send a POST /api/v1/dailynotes/query request without an X-PAYMENT header to receive an HTTP 402 Payment Required challenge. The challenge quotes the exact atomic USDC amount (maxAmountRequired = totalAtomic) for all billable cells in accepts[0], includes the billing breakdown (missing cells are free), and discloses any partial warm-up cells in partialCells before you sign payment. If every requested cell resolves to status "missing" (0 billable cells), the endpoint returns HTTP 200 OK immediately without requiring payment.
To fulfill the challenge, construct an x402 payment payload containing an EIP-3009 transferWithAuthorization signature for the quoted USDC amount on the specified network, base64-encode the JSON payload, and resend the identical POST request with the X-PAYMENT: <base64> header.
The server verifies and settles the authorization via the x402 facilitator. Upon settlement, the endpoint returns HTTP 200 OK with the requested matrix cells, X-ENTITLEMENT: granted, and a base64-encoded X-PAYMENT-RESPONSE header containing the on-chain settlement receipt and transaction hash.
Paid entitlements are recorded per (payerWallet, symbol, tradingDate). When the same wallet re-requests previously purchased cells with an X-PAYMENT header identifying that wallet, already-entitled cells are not charged again: if all requested billable cells are already entitled, the response returns immediately with X-ENTITLEMENT: active and the latest payload (including any subsequent data corrections); if a batch mixes entitled and new cells, only the unentitled delta is charged.
Licensed data partners authenticate by sending an HTTP Authorization header with their assigned Bearer key: Authorization: Bearer mp_live_<keyId>_<secret>. Active keys with the daily-notes:read scope bypass the HTTP 402 payment flow and receive HTTP 200 OK with X-ENTITLEMENT: partner. If a key is missing, malformed, revoked, past its rotation grace period, or sent from an IP outside its configured allowlist, the middleware logs the event and falls through to the standard x402 challenge.
Each partner API key enforces a sliding-window rate limit (default 60 requests per minute, or the custom limit negotiated in the partner agreement). Requests exceeding the per-key limit receive HTTP 429 Too Many Requests with a Retry-After header specifying the number of seconds to wait before retrying.
Partner keys can be rotated with a configurable grace window. During the grace period, both the newly issued key and the retiring key remain active so partner integrations can roll over credentials with zero downtime. Raw keys are displayed once at issuance or rotation and only their SHA-256 hash is stored.
Partner keys support an optional comma-separated IPv4/IPv6 address or CIDR allowlist (for example, 203.0.113.0/24,198.51.100.10). When an IP allowlist is configured on a key, requests must originate from an allowlisted address.
3. Per-Cell Pricing, Warm-Up Rule & Batch Pagination
FLAT $0.01 / CELLFlat per-cell pricing ($0.01 = 10,000 atomic USDC) for self-serve x402 calls. Every resolved cell with status "full" or "partial" bills at $0.01 USDC; cells with status "missing" (unknown symbol or date prior to symbol inception) are free ($0.00).
Warm-Up / Partial Cell Rule
A cell requires at least 200 historical trading bars to compute every indicator (such as the 200-day SMA) and receive status: "full". When a symbol has between 1 and 199 trading bars on or before the requested date (for example, a newly listed futures contract or recent IPO), the cell is returned with status: "partial", a coverage block ({ barsAvailable, firstAvailableDate }), and null for only those higher-order indicators whose lookback window exceeds barsAvailable. Before you pay, the HTTP 402 challenge discloses all partial cells in partialCells (including perSymbolCounts, barsAvailable, and the exact nullIndicators list).
100-Cell Batch Cap & Pagination Guidance
Each POST /api/v1/dailynotes/query call accepts at most 100 cells (symbols.length × dates.length <= 100). Requests exceeding 100 cells are rejected with HTTP 400 before payment. Bulk and backtest callers should partition larger date ranges or symbol universes into chunks of <= 100 cells per request (for example, 5 symbols × 20 trading dates per page, or 1 symbol × 100 trading dates per page) and iterate sequentially or in parallel within rate limits.
Licensed Partner Access
Organizations seeking flat-rate commercial access, high-throughput rate limits, or enterprise data licensing can provision a Partner Bearer API key under a negotiated Data Licensing Agreement. License terms are tailored to usage volume and integration scope — please reach out via the Contact Us page (/help/contact) or email [email protected] for partner licensing inquiries.
Cell Pricing Schedule
| Tier | Batch Limit (Cells) | Rate Type | Price / Cell (USD) | Price / Cell (Atomic micro-USDC) |
|---|---|---|---|---|
| Standard Billable Cell (Full or Partial) | 1 – 100 cells | Flat Rate | $0.010 | 10,000 units |
Worked Pricing Examples
Single lookup: fetch complete Daily Notes for fut:NQZ26 on 2026-09-24.
Mixed matrix: query fut:NQZ26 (full), stk:NEWCO (partial warm-up), and stk:UNKNOWN (missing).
Maximum batch page: fetch 20 trading days across 5 symbols in a single 100-cell request.
4. API Endpoints
Reference documentation for the locked v1 Daily Notes matrix endpoint. OpenAPI 3 specification available at /api/openapi.json.
/api/v1/dailynotes/queryQuery Daily Notes Matrix (OHLCV, Pivot Points, Moving Averages, Stats & Oscillators)
Executes a matrix query across requested namespaced symbols and calendar dates (symbols × dates, up to 100 cells per call). Each cell resolves non-trading days to the nearest prior trading day and returns OHLCV bars, Classic/Woodie/Camarilla/DeMark pivot points (daily & weekly), Fibonacci extensions and retracements, Fisher pivots, Toby Crabel patterns, 6 moving averages (SMA 5–200), 8 volatility/range windows (5–120d), trend indicators (ADX, Ichimoku), oscillators (RSI, MACD, Stochastic, StochRSI, CCI, ROC, Williams %R, Ultimate Oscillator, Bull/Bear Power), volatility/volume metrics (Bollinger Bands, ATR %, Historical Volatility, Relative Volume, 52-Week High/Low, multi-window Performance), and a composite Technical Summary.
Request Body Fields (JSON)
| Field | Type | Requirement | Description | Example |
|---|---|---|---|---|
dates | string[] (YYYY-MM-DD) | Required | Non-empty array of ISO-8601 calendar dates (YYYY-MM-DD). Non-trading days resolve backward to the nearest prior trading session (reported in tradingDate). | ["2026-09-23", "2026-09-24"] |
symbols | string[] | Required | Non-empty array of namespaced public symbol IDs matching ^[a-z]+:[A-Za-z0-9_.-]+$ (e.g. fut:NQZ26, stk:AAPL, idx:VIX, fx:EURUSD, crypto:BTCUSD). Total cells (symbols.length × dates.length) must not exceed 100. | ["fut:NQZ26", "stk:AAPL"] |
HTTP Headers
| Header Name | Scope | Description | Example |
|---|---|---|---|
Authorization | Request | Licensed partner Bearer API key (mp_live_<8-hex-id>_<secret>). When valid and active, skips the x402 payment flow and returns X-ENTITLEMENT: partner. | Bearer mp_live_a1b2c3d4_0123456789abcdef0123456789abcdef0123456789abcdef |
Retry-After | Response | Returned on HTTP 429 Too Many Requests responses; specifies the number of seconds to wait before retrying. | 60 |
X-ENTITLEMENT | Response | Indicates entitlement status on 200 responses: "granted" for newly settled x402 payments, "active" for free re-downloads by an already-entitled wallet, or "partner" for licensed Bearer API key requests. | granted |
X-PAYMENT | Request | Base64-encoded x402 payment authorization payload fulfilling the HTTP 402 challenge requirements. | eyJ4NDA...base64 |
X-PAYMENT-RESPONSE | Response | Base64-encoded on-chain facilitator settlement receipt returned on successful x402 payment verification or entitlement re-download. | eyJzdWNj...base64 |
Sample 402 Payment Challenge
HTTP 402 Payment RequiredChallenge returned with HTTP 402 when an unpaid request is received. Discloses exact billing totals (missing cells excluded) and a partialCells summary listing per-symbol counts, available bars, and which indicators will be null before the buyer pays.
{
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"description": "Access to MyPivots Daily Notes data",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxAmountRequired": "20000",
"maxTimeoutSeconds": 60,
"mimeType": "application/json",
"network": "base",
"payTo": "0x6eee1521fed0f44b3af264c0d7818693cba7de28",
"resource": "https://www.mypivots.com/api/v1/dailynotes/query",
"scheme": "exact"
}
],
"billing": {
"billableCells": 2,
"freeCells": 1,
"pricePerCellAtomic": "10000",
"totalAtomic": "20000"
},
"error": "X-PAYMENT header is required",
"partialCells": {
"cells": [
{
"barsAvailable": 45,
"dateRequested": "2026-09-24",
"firstAvailableDate": "2026-07-20",
"nullIndicators": [
"movingAverages.ma50",
"movingAverages.ma100",
"movingAverages.ma200",
"stats.60d",
"stats.80d",
"stats.100d",
"stats.120d",
"performance.d63",
"ichimoku",
"performance.d126"
],
"symbol": "stk:NEWCO",
"tradingDate": "2026-09-24"
}
],
"perSymbolCounts": {
"stk:NEWCO": 1
},
"totalPartialCells": 1
},
"x402Version": 1
}Response Schema (DailyNotesQueryResponse)
Locked v1 matrix response envelope containing schemaVersion, atomic-USDC billing breakdown, and ordered cells array (symbols × dates).
| Field | Type | Description |
|---|---|---|
billing | DailyNotesBilling | Audits the micropayment settlement: pricePerCellAtomic ("10000"), billableCells, freeCells, and totalAtomic. |
cells | DailyNoteCell[] | Cells returned in exact request order (symbols × dates), discriminated by status ("full" | "partial" | "missing"). |
schemaVersion | string | Semantic version of the public v1 data contract (e.g. "1.0.0"). |
TypeScript Type Definitions
DailyNotesQueryRequestRequest JSON body accepted by POST /api/v1/dailynotes/query.export interface DailyNotesQueryRequest {
/**
* Non-empty array of ISO calendar dates (YYYY-MM-DD).
*/
readonly dates: readonly string[];
/**
* Non-empty array of namespaced public symbol IDs (e.g. 'fut:NQZ26', 'stk:AAPL').
* Total cells (symbols.length * dates.length) must not exceed 100.
*/
readonly symbols: readonly string[];
}DailyNotesQueryResponseLocked v1 HTTP 200 matrix response payload returned by POST /api/v1/dailynotes/query.export interface DailyNotesQueryResponse {
readonly billing: DailyNotesBilling;
readonly cells: readonly DailyNoteCell[];
readonly schemaVersion: string;
}
export type DailyNoteCell =
| DailyNoteFullCell
| DailyNotePartialCell
| DailyNoteMissingCell;
export interface DailyNoteFullCell {
readonly data: DailyNoteData;
readonly dateRequested: string;
readonly status: 'full';
readonly symbol: string;
readonly tradingDate: string;
}
export interface DailyNotePartialCell {
readonly coverage: {
readonly barsAvailable: number;
readonly firstAvailableDate: string;
};
readonly data: DailyNoteData;
readonly dateRequested: string;
readonly status: 'partial';
readonly symbol: string;
readonly tradingDate: string;
}
export interface DailyNoteMissingCell {
readonly data: null;
readonly dateRequested: string;
readonly reason: string;
readonly status: 'missing';
readonly symbol: string;
readonly tradingDate: string | null;
}DailyNotesBillingBilling breakdown included in both HTTP 402 challenges and HTTP 200 responses.export interface DailyNotesBilling {
/**
* Count of served cells with status 'full' or 'partial'.
*/
readonly billableCells: number;
/**
* Count of served cells with status 'missing' (billed at 0 atomic USDC).
*/
readonly freeCells: number;
/**
* Flat per-cell price in atomic USDC ('10000' = $0.01 USDC).
*/
readonly pricePerCellAtomic: string;
/**
* Exact integer string: billableCells * pricePerCellAtomic.
*/
readonly totalAtomic: string;
}X402PaymentChallengeHTTP 402 challenge response structure with upfront billing and partial-cell disclosure.export interface X402PaymentChallenge {
readonly accepts: readonly X402PaymentRequirement[];
readonly billing: DailyNotesBilling;
readonly error: string;
readonly partialCells: {
readonly cells: readonly {
readonly barsAvailable: number;
readonly dateRequested: string;
readonly firstAvailableDate: string;
readonly nullIndicators: readonly string[];
readonly symbol: string;
readonly tradingDate: string;
}[];
readonly perSymbolCounts: Record<string, number>;
readonly totalPartialCells: number;
};
readonly x402Version: number;
}Example Request & Response
curl -X POST "https://www.mypivots.com/api/v1/dailynotes/query" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-PAYMENT: <base64-encoded-payment-authorization>" \
-d '{
"dates": [
"2026-09-24"
],
"symbols": [
"fut:NQZ26",
"stk:NEWCO",
"stk:UNKNOWN"
]
}'curl -X POST "https://www.mypivots.com/api/v1/dailynotes/query" \
-H "Accept: application/json" \
-H "Authorization: Bearer mp_live_a1b2c3d4_<partner-secret>" \
-H "Content-Type: application/json" \
-d '{
"dates": [
"2026-09-24"
],
"symbols": [
"fut:NQZ26",
"stk:NEWCO",
"stk:UNKNOWN"
]
}'{
"billing": {
"billableCells": 2,
"freeCells": 1,
"pricePerCellAtomic": "10000",
"totalAtomic": "20000"
},
"cells": [
{
"data": {
"adx": {
"adx": 28.4,
"dx": 31.2,
"minusDi": 14.1,
"params": {
"period": 14
},
"plusDi": 26.8
},
"atrPercent": {
"params": {
"period": 14
},
"value": 1.18
},
"bollingerBands": {
"bandwidth": 3.62,
"lower": 19550,
"middle": 19910.25,
"params": {
"multiplier": 2,
"period": 20
},
"upper": 20270.5
},
"bullBearPower": {
"bearPower": 45.5,
"bullPower": 235.75,
"params": {
"period": 13
}
},
"cci": {
"params": {
"period": 20
},
"value": 112.4
},
"crabel": [
{
"pattern": "NR",
"value": true
},
{
"pattern": "NR4",
"value": false
},
{
"pattern": "NR5",
"value": false
},
{
"pattern": "NR7",
"value": false
},
{
"pattern": "WS",
"value": false
},
{
"pattern": "WS4",
"value": false
},
{
"pattern": "WS5",
"value": false
},
{
"pattern": "WS7",
"value": false
},
{
"pattern": "ID",
"value": false
},
{
"pattern": "OD",
"value": false
},
{
"pattern": "IDnr4",
"value": false
},
{
"pattern": "2BNR",
"value": false
},
{
"pattern": "3BNR",
"value": false
},
{
"pattern": "4BNR",
"value": false
},
{
"pattern": "8BNR",
"value": false
},
{
"pattern": "Bear Hook",
"value": false
},
{
"pattern": "Bull Hook",
"value": false
},
{
"pattern": "Stretch",
"stretchValue": 68.25,
"value": true
}
],
"fibonacci": [
{
"level": "4.250",
"type": "extension",
"value": 21089.63
},
{
"level": "2.618",
"type": "extension",
"value": 20779.44
},
{
"level": "1.618",
"type": "extension",
"value": 20588.68
},
{
"level": "1.000",
"type": "extension",
"value": 20471
},
{
"level": "0.618",
"type": "extension",
"value": 20398.24
},
{
"level": "HIGH",
"type": "high",
"value": 20280.5
},
{
"level": "0.618",
"type": "retracement",
"value": 20207.74
},
{
"level": "0.500",
"type": "retracement",
"value": 20185.25
},
{
"level": "0.382",
"type": "retracement",
"value": 20162.76
},
{
"level": "LOW",
"type": "low",
"value": 20090
},
{
"level": "0.618",
"type": "extension",
"value": 19972.26
},
{
"level": "1.000",
"type": "extension",
"value": 19899.5
},
{
"level": "1.618",
"type": "extension",
"value": 19781.82
},
{
"level": "2.618",
"type": "extension",
"value": 19591.06
},
{
"level": "4.250",
"type": "extension",
"value": 19280.88
}
],
"fibonacciRetracements": {
"level236": 20124.25,
"level382": 19815.5,
"level500": 19565,
"level618": 19314.5,
"level786": 18958,
"params": {
"period": 252
}
},
"fiftyTwoWeekHighLow": {
"high": 20650,
"highDistancePercent": -1.96,
"low": 18480,
"lowDistancePercent": 9.55,
"params": {
"period": 252
}
},
"fisher": [
{
"level": "R1",
"oneDay": 20261,
"threeDay": 20310.5
},
{
"level": "PP",
"oneDay": 20205.42,
"threeDay": 20220.15
},
{
"level": "S1",
"oneDay": 20149.83,
"threeDay": 20129.8
}
],
"generatedAt": "2026-09-24T20:00:00.000Z",
"historicalVolatility": {
"params": {
"annualizationFactor": 252,
"period": 30
},
"value": 18.45
},
"ichimoku": {
"chikouSpan": 20245.75,
"kijunSen": 19980,
"params": {
"basePeriod": 26,
"conversionPeriod": 9,
"spanBPeriod": 52
},
"senkouSpanA": 20055.25,
"senkouSpanB": 19720,
"tenkanSen": 20130.5
},
"macd": {
"histogram": 6.7,
"macd": 45.2,
"params": {
"fastPeriod": 12,
"signalPeriod": 9,
"slowPeriod": 26
},
"signal": 38.5
},
"movingAverages": [
{
"diff": 125.25,
"diffPercent": 0.62,
"period": 5,
"signal": "above",
"value": 20120.5
},
{
"diff": 200.75,
"diffPercent": 1,
"period": 10,
"signal": "above",
"value": 20045
},
{
"diff": 335.5,
"diffPercent": 1.68,
"period": 20,
"signal": "above",
"value": 19910.25
},
{
"diff": 595.75,
"diffPercent": 3.03,
"period": 50,
"signal": "above",
"value": 19650
},
{
"diff": 1045,
"diffPercent": 5.44,
"period": 100,
"signal": "above",
"value": 19200.75
},
{
"diff": 1795.25,
"diffPercent": 9.73,
"period": 200,
"signal": "above",
"value": 18450.5
}
],
"ohlcv": {
"close": 20245.75,
"high": 20280.5,
"low": 20090,
"open": 20150.25,
"volume": 482150
},
"performance": {
"d126": 6.45,
"d21": 2.15,
"d252": 11.8,
"d63": 4.12,
"ytd": 8.9
},
"pivotPoints": {
"daily": {
"levels": [
{
"camarilla": 20350.53,
"classic": 20526.75,
"demark": null,
"name": "R4",
"woodie": 20526.75
},
{
"camarilla": 20298.14,
"classic": 20431.5,
"demark": null,
"name": "R3",
"woodie": 20381.25
},
{
"camarilla": 20263.21,
"classic": 20336.25,
"demark": null,
"name": "R2",
"woodie": 20336.25
},
{
"camarilla": 20245.75,
"classic": 20291,
"demark": 20291,
"name": "R1",
"woodie": 20291
},
{
"camarilla": 20205.42,
"classic": 20205.42,
"demark": 20205.42,
"name": "PP",
"woodie": 20205.42
},
{
"camarilla": 20210.79,
"classic": 20145.5,
"demark": 20145.5,
"name": "S1",
"woodie": 20145.5
},
{
"camarilla": 20193.32,
"classic": 20074.58,
"demark": null,
"name": "S2",
"woodie": 20074.58
},
{
"camarilla": 20158.39,
"classic": 19979.33,
"demark": null,
"name": "S3",
"woodie": 19929.08
},
{
"camarilla": 20106,
"classic": 19884.08,
"demark": null,
"name": "S4",
"woodie": 19884.08
}
]
},
"weekly": {
"levels": [
{
"camarilla": 20410,
"classic": 20600,
"demark": null,
"name": "R4",
"woodie": 20600
},
{
"camarilla": 20360,
"classic": 20500,
"demark": null,
"name": "R3",
"woodie": 20450
},
{
"camarilla": 20310,
"classic": 20400,
"demark": null,
"name": "R2",
"woodie": 20400
},
{
"camarilla": 20260,
"classic": 20350,
"demark": 20350,
"name": "R1",
"woodie": 20350
},
{
"camarilla": 20220,
"classic": 20220,
"demark": 20220,
"name": "PP",
"woodie": 20220
},
{
"camarilla": 20180,
"classic": 20120,
"demark": 20120,
"name": "S1",
"woodie": 20120
},
{
"camarilla": 20130,
"classic": 20040,
"demark": null,
"name": "S2",
"woodie": 20040
},
{
"camarilla": 20080,
"classic": 19940,
"demark": null,
"name": "S3",
"woodie": 19890
},
{
"camarilla": 20030,
"classic": 19840,
"demark": null,
"name": "S4",
"woodie": 19840
}
]
}
},
"relativeVolume": {
"averageVolume": 470500,
"params": {
"period": 20
},
"relativeVolume": 1.02
},
"roc": {
"params": {
"period": 12
},
"value": 1.85
},
"rsi": {
"params": {
"period": 14
},
"value": 64.25
},
"stats": [
{
"averageRange": 210.5,
"averageRangePercent": 1.04,
"averageVolume": 450000,
"closePercent": 81.5,
"days": 5,
"high": 20280.5,
"low": 19930.25,
"newHigh": true,
"newLow": false,
"range": 350.25,
"rangePercent": 1.73
},
{
"averageRange": 225,
"averageRangePercent": 1.11,
"averageVolume": 462000,
"closePercent": 75.2,
"days": 10,
"high": 20280.5,
"low": 19800.5,
"newHigh": true,
"newLow": false,
"range": 480,
"rangePercent": 2.37
},
{
"averageRange": 230.1,
"averageRangePercent": 1.14,
"averageVolume": 470500,
"closePercent": 68.4,
"days": 20,
"high": 20280.5,
"low": 19560,
"newHigh": true,
"newLow": false,
"range": 720.5,
"rangePercent": 3.56
},
{
"averageRange": 240.5,
"averageRangePercent": 1.19,
"averageVolume": 465000,
"closePercent": 62.1,
"days": 40,
"high": 20450,
"low": 19300,
"newHigh": false,
"newLow": false,
"range": 1150,
"rangePercent": 5.68
},
{
"averageRange": 245,
"averageRangePercent": 1.21,
"averageVolume": 472000,
"closePercent": 59.8,
"days": 60,
"high": 20500,
"low": 19079.75,
"newHigh": false,
"newLow": false,
"range": 1420.25,
"rangePercent": 7.02
},
{
"averageRange": 248.2,
"averageRangePercent": 1.23,
"averageVolume": 478000,
"closePercent": 55.4,
"days": 80,
"high": 20550,
"low": 18900,
"newHigh": false,
"newLow": false,
"range": 1650,
"rangePercent": 8.15
},
{
"averageRange": 252,
"averageRangePercent": 1.24,
"averageVolume": 481000,
"closePercent": 52.3,
"days": 100,
"high": 20600,
"low": 18709.5,
"newHigh": false,
"newLow": false,
"range": 1890.5,
"rangePercent": 9.34
},
{
"averageRange": 255.4,
"averageRangePercent": 1.26,
"averageVolume": 485000,
"closePercent": 49.8,
"days": 120,
"high": 20650,
"low": 18550,
"newHigh": false,
"newLow": false,
"range": 2100,
"rangePercent": 10.37
}
],
"stochastic": {
"d": 78.5,
"k": 82.1,
"params": {
"dPeriod": 3,
"kPeriod": 14
}
},
"stochRsi": {
"d": 68.2,
"k": 72.4,
"params": {
"dPeriod": 3,
"kPeriod": 3,
"rsiPeriod": 14,
"stochPeriod": 14
}
},
"technicalSummary": {
"groups": {
"movingAverages": {
"counted": 6,
"score": 1,
"verdict": "Strong Buy"
},
"oscillators": {
"counted": 9,
"score": 0.33,
"verdict": "Buy"
},
"priceLevels": {
"counted": 2,
"score": 0.5,
"verdict": "Buy"
},
"trend": {
"counted": 2,
"score": 1,
"verdict": "Strong Buy"
}
},
"methodologyVersion": "1.0",
"overall": {
"counted": 19,
"score": 0.63,
"verdict": "Strong Buy"
},
"signals": {
"adx": 1,
"bullBearPower": 1,
"cci": 1,
"crabel": 0,
"ichimoku": 1,
"ma10": 1,
"ma100": 1,
"ma20": 1,
"ma200": 1,
"ma5": 1,
"ma50": 1,
"macd": 1,
"pivotPosition": 1,
"roc": 1,
"rsi": 0,
"stochastic": 0,
"stochRsi": 0,
"ultimateOscillator": 0,
"williamsR": 0
}
},
"ticker": "NQ Z26",
"ultimateOscillator": {
"params": {
"longPeriod": 28,
"mediumPeriod": 14,
"shortPeriod": 7
},
"value": 58.6
},
"williamsR": {
"params": {
"period": 14
},
"value": -17.9
}
},
"dateRequested": "2026-09-24",
"status": "full",
"symbol": "fut:NQZ26",
"tradingDate": "2026-09-24"
},
{
"coverage": {
"barsAvailable": 45,
"firstAvailableDate": "2026-07-20"
},
"data": {
"adx": {
"adx": 24.1,
"dx": 26.5,
"minusDi": 15,
"params": {
"period": 14
},
"plusDi": 25.2
},
"atrPercent": {
"params": {
"period": 14
},
"value": 3.65
},
"bollingerBands": {
"bandwidth": 14.2,
"lower": 37.35,
"middle": 40.2,
"params": {
"multiplier": 2,
"period": 20
},
"upper": 43.05
},
"bullBearPower": {
"bearPower": 0.65,
"bullPower": 2.95,
"params": {
"period": 13
}
},
"cci": {
"params": {
"period": 20
},
"value": 134.8
},
"crabel": [
{
"pattern": "NR",
"value": false
},
{
"pattern": "NR4",
"value": false
},
{
"pattern": "NR5",
"value": false
},
{
"pattern": "NR7",
"value": false
},
{
"pattern": "WS",
"value": true
},
{
"pattern": "WS4",
"value": true
},
{
"pattern": "WS5",
"value": false
},
{
"pattern": "WS7",
"value": false
},
{
"pattern": "ID",
"value": false
},
{
"pattern": "OD",
"value": false
},
{
"pattern": "IDnr4",
"value": false
},
{
"pattern": "2BNR",
"value": false
},
{
"pattern": "3BNR",
"value": false
},
{
"pattern": "4BNR",
"value": false
},
{
"pattern": "8BNR",
"value": false
},
{
"pattern": "Bear Hook",
"value": false
},
{
"pattern": "Bull Hook",
"value": false
},
{
"pattern": "Stretch",
"stretchValue": 0.85,
"value": true
}
],
"fibonacci": [
{
"level": "4.250",
"type": "extension",
"value": 53.88
},
{
"level": "2.618",
"type": "extension",
"value": 50.12
},
{
"level": "1.618",
"type": "extension",
"value": 47.82
},
{
"level": "1.000",
"type": "extension",
"value": 46.4
},
{
"level": "0.618",
"type": "extension",
"value": 45.52
},
{
"level": "HIGH",
"type": "high",
"value": 44.1
},
{
"level": "0.618",
"type": "retracement",
"value": 43.22
},
{
"level": "0.500",
"type": "retracement",
"value": 42.95
},
{
"level": "0.382",
"type": "retracement",
"value": 42.68
},
{
"level": "LOW",
"type": "low",
"value": 41.8
},
{
"level": "0.618",
"type": "extension",
"value": 40.38
},
{
"level": "1.000",
"type": "extension",
"value": 39.5
},
{
"level": "1.618",
"type": "extension",
"value": 38.08
},
{
"level": "2.618",
"type": "extension",
"value": 35.78
},
{
"level": "4.250",
"type": "extension",
"value": 32.02
}
],
"fibonacciRetracements": {
"level236": 42.4,
"level382": 41.35,
"level500": 40.5,
"level618": 39.65,
"level786": 38.44,
"params": {
"period": 45
}
},
"fiftyTwoWeekHighLow": {
"high": 44.1,
"highDistancePercent": -0.79,
"low": 36.9,
"lowDistancePercent": 18.56,
"params": {
"period": 45
}
},
"fisher": [
{
"level": "R1",
"oneDay": 44.18,
"threeDay": 44.3
},
{
"level": "PP",
"oneDay": 43.22,
"threeDay": 43.15
},
{
"level": "S1",
"oneDay": 42.25,
"threeDay": 42
}
],
"generatedAt": "2026-09-24T20:00:00.000Z",
"historicalVolatility": {
"params": {
"annualizationFactor": 252,
"period": 30
},
"value": 42.1
},
"ichimoku": null,
"macd": {
"histogram": 0.23,
"macd": 0.85,
"params": {
"fastPeriod": 12,
"signalPeriod": 9,
"slowPeriod": 26
},
"signal": 0.62
},
"movingAverages": [
{
"diff": 0.95,
"diffPercent": 2.22,
"period": 5,
"signal": "above",
"value": 42.8
},
{
"diff": 2.25,
"diffPercent": 5.42,
"period": 10,
"signal": "above",
"value": 41.5
},
{
"diff": 3.55,
"diffPercent": 8.83,
"period": 20,
"signal": "above",
"value": 40.2
},
{
"diff": null,
"diffPercent": null,
"period": 50,
"signal": null,
"value": null
},
{
"diff": null,
"diffPercent": null,
"period": 100,
"signal": null,
"value": null
},
{
"diff": null,
"diffPercent": null,
"period": 200,
"signal": null,
"value": null
}
],
"ohlcv": {
"close": 43.75,
"high": 44.1,
"low": 41.8,
"open": 42.5,
"volume": 1250000
},
"performance": {
"d126": null,
"d21": 12.18,
"d252": null,
"d63": null,
"ytd": 18.56
},
"pivotPoints": {
"daily": {
"levels": [
{
"camarilla": 45.04,
"classic": 47.07,
"demark": null,
"name": "R4",
"woodie": 47.07
},
{
"camarilla": 44.41,
"classic": 45.92,
"demark": null,
"name": "R3",
"woodie": 45.35
},
{
"camarilla": 43.99,
"classic": 44.77,
"demark": null,
"name": "R2",
"woodie": 44.77
},
{
"camarilla": 43.75,
"classic": 44.22,
"demark": 44.22,
"name": "R1",
"woodie": 44.22
},
{
"camarilla": 43.22,
"classic": 43.22,
"demark": 43.22,
"name": "PP",
"woodie": 43.22
},
{
"camarilla": 43.33,
"classic": 42.5,
"demark": 42.5,
"name": "S1",
"woodie": 42.5
},
{
"camarilla": 43.12,
"classic": 41.67,
"demark": null,
"name": "S2",
"woodie": 41.67
},
{
"camarilla": 42.7,
"classic": 40.52,
"demark": null,
"name": "S3",
"woodie": 39.95
},
{
"camarilla": 42.06,
"classic": 39.37,
"demark": null,
"name": "S4",
"woodie": 39.37
}
]
},
"weekly": {
"levels": [
{
"camarilla": 45.5,
"classic": 48,
"demark": null,
"name": "R4",
"woodie": 48
},
{
"camarilla": 44.8,
"classic": 46.5,
"demark": null,
"name": "R3",
"woodie": 46
},
{
"camarilla": 44.2,
"classic": 45.2,
"demark": null,
"name": "R2",
"woodie": 45.2
},
{
"camarilla": 43.8,
"classic": 44.5,
"demark": 44.5,
"name": "R1",
"woodie": 44.5
},
{
"camarilla": 43,
"classic": 43,
"demark": 43,
"name": "PP",
"woodie": 43
},
{
"camarilla": 43.2,
"classic": 42,
"demark": 42,
"name": "S1",
"woodie": 42
},
{
"camarilla": 42.8,
"classic": 41,
"demark": null,
"name": "S2",
"woodie": 41
},
{
"camarilla": 42.2,
"classic": 39.8,
"demark": null,
"name": "S3",
"woodie": 39.2
},
{
"camarilla": 41.5,
"classic": 38.5,
"demark": null,
"name": "S4",
"woodie": 38.5
}
]
}
},
"relativeVolume": {
"averageVolume": 1200000,
"params": {
"period": 20
},
"relativeVolume": 1.04
},
"roc": {
"params": {
"period": 12
},
"value": 4.15
},
"rsi": {
"params": {
"period": 14
},
"value": 68.4
},
"stats": [
{
"averageRange": 1.45,
"averageRangePercent": 3.31,
"averageVolume": 1100000,
"closePercent": 78.2,
"days": 5,
"high": 44.1,
"low": 41.3,
"newHigh": true,
"newLow": false,
"range": 2.8,
"rangePercent": 6.4
},
{
"averageRange": 1.55,
"averageRangePercent": 3.54,
"averageVolume": 1150000,
"closePercent": 69.5,
"days": 10,
"high": 44.1,
"low": 40.2,
"newHigh": true,
"newLow": false,
"range": 3.9,
"rangePercent": 8.91
},
{
"averageRange": 1.62,
"averageRangePercent": 3.7,
"averageVolume": 1200000,
"closePercent": 65,
"days": 20,
"high": 44.1,
"low": 38.6,
"newHigh": true,
"newLow": false,
"range": 5.5,
"rangePercent": 12.57
},
{
"averageRange": 1.68,
"averageRangePercent": 3.84,
"averageVolume": 1220000,
"closePercent": 61.2,
"days": 40,
"high": 44.1,
"low": 36.9,
"newHigh": true,
"newLow": false,
"range": 7.2,
"rangePercent": 16.46
},
{
"averageRange": null,
"averageRangePercent": null,
"averageVolume": null,
"closePercent": null,
"days": 60,
"high": null,
"low": null,
"newHigh": null,
"newLow": null,
"range": null,
"rangePercent": null
},
{
"averageRange": null,
"averageRangePercent": null,
"averageVolume": null,
"closePercent": null,
"days": 80,
"high": null,
"low": null,
"newHigh": null,
"newLow": null,
"range": null,
"rangePercent": null
},
{
"averageRange": null,
"averageRangePercent": null,
"averageVolume": null,
"closePercent": null,
"days": 100,
"high": null,
"low": null,
"newHigh": null,
"newLow": null,
"range": null,
"rangePercent": null
},
{
"averageRange": null,
"averageRangePercent": null,
"averageVolume": null,
"closePercent": null,
"days": 120,
"high": null,
"low": null,
"newHigh": null,
"newLow": null,
"range": null,
"rangePercent": null
}
],
"stochastic": {
"d": 80.2,
"k": 84.8,
"params": {
"dPeriod": 3,
"kPeriod": 14
}
},
"stochRsi": {
"d": 71,
"k": 74.5,
"params": {
"dPeriod": 3,
"kPeriod": 3,
"rsiPeriod": 14,
"stochPeriod": 14
}
},
"technicalSummary": {
"groups": {
"movingAverages": {
"counted": 3,
"score": 1,
"verdict": "Strong Buy"
},
"oscillators": {
"counted": 9,
"score": 0.44,
"verdict": "Buy"
},
"priceLevels": {
"counted": 2,
"score": 0.5,
"verdict": "Buy"
},
"trend": {
"counted": 1,
"score": 1,
"verdict": "Strong Buy"
}
},
"methodologyVersion": "1.0",
"overall": {
"counted": 15,
"score": 0.6,
"verdict": "Strong Buy"
},
"signals": {
"adx": 1,
"bullBearPower": 1,
"cci": 1,
"crabel": 1,
"ma10": 1,
"ma20": 1,
"ma5": 1,
"macd": 1,
"pivotPosition": 1,
"roc": 1,
"rsi": 0,
"stochastic": 0,
"stochRsi": 0,
"ultimateOscillator": 0,
"williamsR": 0
}
},
"ticker": "NEWCO",
"ultimateOscillator": {
"params": {
"longPeriod": 28,
"mediumPeriod": 14,
"shortPeriod": 7
},
"value": 61.2
},
"williamsR": {
"params": {
"period": 14
},
"value": -15.2
}
},
"dateRequested": "2026-09-24",
"status": "partial",
"symbol": "stk:NEWCO",
"tradingDate": "2026-09-24"
},
{
"data": null,
"dateRequested": "2026-09-24",
"reason": "Symbol 'stk:UNKNOWN' not found in registry",
"status": "missing",
"symbol": "stk:UNKNOWN",
"tradingDate": null
}
],
"schemaVersion": "1.0.0"
}5. Schema Versioning Policy (schemaVersion)
Every HTTP 200 response envelope includes a top-level schemaVersion string following strict Semantic Versioning (MAJOR.MINOR.PATCH), independent of internal storage caches. Current version: 1.0.0.
1.0.0 -> 2.0.0Breaking change. Consumers must update their parser/types before migrating to the new major version.
- Removal or renaming of existing fields or indicator blocks
- Type definition changes (for example, changing a number to a string or object)
- Tightening or loosening nullability in breaking positions
- Structural changes to the request body or response envelope
1.0.0 -> 1.1.0Backwards-compatible addition. Existing parsers that ignore unknown JSON keys continue working without modification.
- Addition of new optional indicator blocks within DailyNoteData
- Addition of new optional metadata fields in billing or coverage
- Non-breaking backwards-compatible schema extensions
1.0.0 -> 1.0.1Fully transparent to parsers. Field names, nullability, and data types are unchanged.
- Bug fixes in indicator calculation math that preserve field keys and types
- Decimal precision rounding refinements and specification clarifications
6. Errors, Limits & Resolution Reference
Non-Trading-Day Handling (dateRequested vs tradingDate)
Callers may pass any ISO-8601 calendar date (YYYY-MM-DD) in dates. When a requested date falls on a weekend or exchange holiday, the API automatically resolves it backward to the most recent prior trading session. Each cell returns both dateRequested (the exact calendar date from your request) and tradingDate (the actual session date of the bar used to compute the indicators). If a requested date precedes the earliest available trading session for that symbol, the cell is returned with status: "missing", tradingDate: null, data: null, and a descriptive reason string at zero charge.
Warm-Up & Partial Cells Explained
Computing the complete indicator suite (including the 200-day Simple Moving Average) requires at least 200 historical trading sessions on or before the requested date. When a symbol has between 1 and 199 trading sessions available (for example, a newly listed futures contract or recent IPO), the API returns status: "partial", a coverage block ({ barsAvailable, firstAvailableDate }), and the standard data object with computed values for every indicator whose lookback requirement is met and null for longer-window indicators. For full transparency before payment, the HTTP 402 challenge includes a partialCells object listing every partial cell, its barsAvailable, firstAvailableDate, and the exact nullIndicators list.
HTTP Status Codes & Error Payloads
Returned before payment when symbols or dates is empty, a symbol does not match ^[a-z]+:[A-Za-z0-9_.-]+$, a date is not a valid YYYY-MM-DD calendar date, or symbols.length × dates.length exceeds the 100-cell cap.
{
"error": "Invalid query parameters. Required: symbols (non-empty namespaced array), dates (non-empty YYYY-MM-DD array), max 100 cells (symbols × dates <= 100)"
}Returned when the X-PAYMENT header is present but cannot be base64-decoded into a valid x402 payment payload structure.
{
"error": "Invalid or malformed payment header"
}Returned when a request with at least one billable cell has no valid partner Bearer key and either omits X-PAYMENT (initial price discovery) or presents an X-PAYMENT signature that fails verification/settlement.
{
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"description": "Access to MyPivots Daily Notes data",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxAmountRequired": "10000",
"maxTimeoutSeconds": 60,
"mimeType": "application/json",
"network": "base",
"payTo": "0x6eee1521fed0f44b3af264c0d7818693cba7de28",
"resource": "https://www.mypivots.com/api/v1/dailynotes/query",
"scheme": "exact"
}
],
"billing": {
"billableCells": 1,
"freeCells": 0,
"pricePerCellAtomic": "10000",
"totalAtomic": "10000"
},
"error": "X-PAYMENT header is required",
"partialCells": {
"cells": [],
"perSymbolCounts": {},
"totalPartialCells": 0
},
"x402Version": 1
}Returned when the endpoint is requested with an HTTP method other than POST. Daily Notes matrix queries only accept POST.
{
"error": "Method Not Allowed"
}Returned when a licensed partner Bearer key exceeds its configured per-minute request allowance. Always includes a Retry-After header (in seconds).
{
"error": "Rate limit exceeded for partner API key. Please wait before retrying."
}Returned when a self-serve x402 payer wallet exceeds the fair-use sliding-window rate limit (60 requests/minute). Always includes a Retry-After header (in seconds).
{
"error": "Rate limit exceeded for wallet. Please wait before retrying."
}Returned when an unexpected internal server error occurs during query validation, matrix resolution, or data calculation.
{
"error": "Internal Server Error"
}7. Data Licensing, AI Policy & Attribution
Per the MyPivots Terms of Service AI Data Policy, API access grants the right to query and consume market notes and indicator levels for authorized application and agent workflows. It does not grant rights to redistribute the raw dataset, resell bulk historical archives, or use the content for training, fine-tuning, or testing artificial intelligence (AI) models, large language models (LLMs), or machine learning algorithms. Commercial AI training or enterprise redistribution requires a negotiated Data Licensing Agreement.
Attribution to MyPivots (https://www.mypivots.com) is required whenever data or derived levels from this API are displayed, published, or cited in downstream applications or agent responses.