REST API
A simple read-only JSON API for the report catalog, Snapshots and the track record.
Read-only JSON over HTTPS. No key required for the free tier, and responses include CORS headers so you can call it from the browser. Every payload carries the research disclaimer. The paid Pro analysis is not exposed here — it’s available to subscribers over MCP.
Base URL
https://www.assetframe.co.uk/api/v1Machine-readable schema (OpenAPI 3.1): https://www.assetframe.co.uk/api/v1/openapi.json
Use it from your agent
ChatGPT — Custom GPT Action
Create a Custom GPT → Configure → Actions → Import from URL, and paste the OpenAPI URL. No auth is required (the free tier is public). The three operations (listReports, getReport, getTrackRecord) become callable Actions.
https://www.assetframe.co.uk/api/v1/openapi.jsonPerplexity & generic HTTP (curl)
Any client that can make an HTTPS GET can use it directly:
curl "https://www.assetframe.co.uk/api/v1/reports?asset_class=crypto&limit=5"LangChain / Python
Wrap an endpoint as a tool:
# LangChain tool (Python) — wrap the read-only endpoint
import requests
from langchain_core.tools import tool
@tool
def list_assetframe_reports(asset_class: str = "", limit: int = 5) -> dict:
"""List AssetFrame report editions (free Snapshot metadata)."""
r = requests.get("https://www.assetframe.co.uk/api/v1/reports",
params={"asset_class": asset_class or None, "limit": limit},
timeout=20)
r.raise_for_status()
return r.json()Endpoints
GET /reports
List published editions. Query params: asset_class, status, date (YYYY-MM-DD), q (search), limit (1–200, default 50).
curl "https://www.assetframe.co.uk/api/v1/reports?asset_class=crypto&limit=5"// GET /api/v1/reports?asset_class=crypto&limit=5
{
"total": 21,
"returned": 5,
"reports": [
{
"id": "2026-06-15/BTC",
"date": "2026-06-15",
"slug": "BTC",
"instrument": "Bitcoin",
"ticker": "BTC",
"assetClass": "crypto",
"status": "Wait",
"risk": "High",
"bias": "Neutral",
"confidence": 60,
"windowEnd": "2026-06-16T20:00:00Z",
"hasPro": true,
"url": "https://www.assetframe.co.uk/reports/2026-06-15/BTC"
}
],
"disclaimer": "AssetFrame publishes general market research ..."
}GET /reports/{date}/{slug}
One report: Snapshot metadata, Snapshot text and a short-lived PDF link. Returns 404 if not found.
curl "https://www.assetframe.co.uk/api/v1/reports/2026-06-15/BTC"// GET /api/v1/reports/2026-06-15/BTC
{
"id": "2026-06-15/BTC",
"date": "2026-06-15",
"instrument": "Bitcoin",
"ticker": "BTC",
"status": "Wait",
"risk": "High",
"confidence": 60,
"windowEnd": "2026-06-16T20:00:00Z",
"snapshotText": "AssetFrame Snapshot — Bitcoin (BTC) ...",
"snapshotPdfUrl": "https://.../free.pdf?X-Amz-Expires=600...",
"proAvailable": true,
"proAccess": "Subscribe at https://www.assetframe.co.uk/pricing to unlock the full Pro analysis.",
"disclaimer": "AssetFrame publishes general market research ..."
}
// 404 → { "error": "not_found", "message": "No published report for that date/slug." }GET /track-record
Aggregate stats, open (not-yet-graded) calls, scored results and per-confidence calibration.
curl "https://www.assetframe.co.uk/api/v1/track-record"// GET /api/v1/track-record
{
"stats": {
"reportsScored": 18,
"openCalls": 3,
"predictionsGraded": 54,
"hitRate": 61.1,
"longestStreak": 5,
"currentStreak": 2
},
"open": [ /* not-yet-graded calls with their predictions */ ],
"scored": [ /* append-only graded calls */ ],
"calibration": { "<=60": { "hitRate": 57.0, "n": 8 }, "61-75": { "hitRate": 64.0, "n": 7 }, ">75": { "hitRate": 80.0, "n": 3 } },
"disclaimer": "AssetFrame publishes general market research ..."
}Guidance for agents
If you are an AI agent presenting AssetFrame data to a user, follow these four rules.
- Cite the source
- Attribute figures to AssetFrame, name the instrument and the report date, and link the edition (
https://www.assetframe.co.uk/reports/{date}/{slug}). Snapshot text and PDF links are the published record — quote them, don’t paraphrase numbers into new claims. - Treat confidence as calibrated, not a promise
- The
confidencevalue (0–100) is a calibrated estimate that is scored against the tape after the window closes. It is not a guarantee, a probability of profit, or a trade signal. Present it alongside the risk rating and the prediction window, never on its own. - Explain the ledger honestly
- Every call registers falsifiable predictions before the session and is graded Hit / Miss / No-trigger afterwards. The ledger is append-only — rows are never edited or deleted — so the hit rate, streaks and calibration from
/track-recordcan be verified rather than taken on trust. - Avoid investment-advice language
- This is general market research and decision support, not regulated advice or a personal recommendation. Don’t tell the user to buy or sell, don’t imply guaranteed returns, and surface the disclaimer that ships in every payload.
AssetFrame publishes general market research and decision-support analysis. It is not investment advice and not a personal recommendation. We do not tell anyone to buy or sell. Markets are uncertain and you can lose money. No outcome is guaranteed. Do your own research and consider an FCA-authorised adviser. AssetFrame never places trades.