Update to Sugra API
Snapshot Oct 24, 2026 · 18:04 UTC · version 1.2.1
Package or technical metadata updated
Package or technical metadata updated
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Up to 10 plugins free · no card required.
All fields and original values.
These are saved file metadata. Open a changed file to read its text edits.
Package file
Sep 30, 2026 · 22:51 UTC
a9a6bf346a91b32eb011f3e4b38db58ff7c0e215f808a6674920cbda5f3c5bf8
Oct 24, 2026 · 18:04 UTC
3f446f1e11ce26bada7c6b8c7d920ca03ecd229ab34080f7fc040418c7075933
Package file
Sep 30, 2026 · 22:51 UTC
127
Oct 24, 2026 · 18:04 UTC
101
Package file
Sep 30, 2026 · 22:51 UTC
{"sha256":"640b022d7ee1321920a1c93ddcd8a783e4669ce9aef4aac4b2d82a2630f5cf96","size":3205}
Oct 24, 2026 · 18:04 UTC
Not present
Package file
Sep 30, 2026 · 22:51 UTC
fd74fdb64b5f63338a4bc7361c6a66b2826f43052876f655b54d960bde8e4bdf
Oct 24, 2026 · 18:04 UTC
87de22ea82764b9bbbc2de6840518f80eca86e8af51e406f9ba5283b2bd3b9fa
Compare saved observations
Download comparison JSONChanged files
Choose a file to see its text changes. Binary or large files show metadata only.
mcp.json →
skills/auth-and-quota/SKILL.md →
skills/auth-and-quota/agents/openai.yaml →
skills/cross-domain-briefing/SKILL.md →
skills/cross-domain-briefing/agents/openai.yaml →
skills/discover-and-call/SKILL.md →
skills/discover-and-call/agents/openai.yaml →
skills/envelope-and-attribution/SKILL.md →
skills/envelope-and-attribution/agents/openai.yaml →
skills/live-docs/agents/openai.yaml →
skills/envelope-and-attribution/SKILL.md
− removed · + added
--- before +++ after @@ -0,0 +1,62 @@ +--- +name: envelope-and-attribution +description: Parse Sugra API payloads over HTTPS or MCP, keep source attribution, and tell observation time from request time. Use when reading a response, citing a figure, or shaping a large payload. +license: MIT +--- + +# Envelope and attribution + +The API is LLM-friendly: one JSON envelope `{data, meta}` on most payloads, and the envelope-less exceptions are named below. Envelope detail also lives on https://docs.sugra.ai. + +Most responses: + +```json +{ + "data": {}, + "meta": { + "endpoint": "/api/v1/...", + "data_time": "2026-06-12T19:30:00Z", + "response_time": "2026-06-12T19:30:01Z", + "provider": "Sugra API ...", + "source": "fred", + "attribution": "<upstream notice, quote it verbatim>", + "cached": false + } +} +``` + +Always present: `endpoint` (the operation that answered), `data_time`, `response_time`, `provider`. Present when they apply: + +| Key | Meaning | +|---|---| +| `source` | the upstream source id; name it only when it is a sovereign, intergovernmental, or academic source (Attribution below) | +| `attribution` | a notice the source requires; repeat it word for word wherever the figure is shown | +| `period` | the unit of observation (for example `2026-Q1`) when `data_time` is the start of a period | +| `data_age_days` | days since a time the source itself stated; absent when the source gave only a date or period, or no readable time (Time below) | +| `cached` | served from the platform cache | +| `stale`, `stale_since` | the data is older than it should be; say so when quoting it | +| `fallback_used`, `fallback_chain` | a secondary source answered | +| `notes` | a data quality caveat; pass it on | + +Some payloads also carry a `license` inside `data`. Keep it with the figure. + +Some payloads are envelope-less (a flat object with `meta` or `_meta` on the same record). Provenance keys still apply. + +HTTP: this JSON body plus `X-RateLimit-*` headers. + +MCP: `call_endpoint` / `fetch_data` return the same payload (a top-level array is wrapped as `{data: ...}`). `limit` and `fields` shape the records list in `data`, and lists nested inside records are never truncated; `include_raw` attaches the complete original payload under `raw` when it fits the size cap. An object `data` without a records list, or an envelope-less object, counts as one record for `fields`, and `meta` / `_meta` stay. On the hosted server a projection that matches nothing removes nothing, and the records list can also be the one list inside an object `data`, when exactly one of `data`, `entries`, `events`, `history`, `items`, `observations`, `points`, `records`, `results`, `rows`, `series`, `timeseries` holds a list. Keys beside that list, such as `total` and `count`, stay unless a `fields` entry names a key of `data` itself, which projects `data` as one record instead. Stdio packages up to 0.12.0 do not look inside an object `data` for a records list and can return empty records when no field matches. `meta.shaped` reports `fields_applied`, `fields_unmatched`, `limit_applied` and, on the hosted server, `records_path`. + +`meta.shaped` reports what shaping actually did, not an echo of the request. On the hosted server `records_path` names the records list that `limit` bounded or that `fields` were matched against (for example `data.items`), even when no field matched, and is null when shaping used no records list. There `limit` keeps the newest end when every record carries one date or period key in one format and the list runs one way by it (the last N of an oldest-first list, the first N of a newest-first one), and otherwise the first N; `meta.shaped` then reports `order` (`asc`, `desc` or `unknown`) and `kept_end` (`newest` or `first`). When `records_path` is `data.*.observations` (several named sub-series side by side, each bounded on its own), `order` and `kept_end` are maps keyed by sub-series name. Before citing the latest figure from a bounded list, check that `kept_end` is `newest`, for a sub-series the value under its name. Stdio packages up to 0.12.0 keep the first N and report neither. + +## Time + +`data_time` in `meta` (or `_meta` on a flat payload) is the observation or publication time the source states for the data. When the source states no time, or one that cannot be read, `data_time` falls back to the HTTP response time (in `meta` it then equals `response_time`) and `data_age_days` is absent; for a time that cannot be read, `meta.notes` says so. That fallback is the time of the response, not of the data: never present it as the date of a figure, and if it is shown at all, label it the response time. When `meta.period` is present, `data_time` is the start of that period, not a moment of observation. An `as_of` in a record, in `data`, or in `meta` dates the figure itself: a period, a report or snapshot date, or a collection time. When an `as_of` differs from a `data_time` the source stated, quote both. When nothing dates the figure, say the source time is unavailable. Do not describe a delayed series as a live tick, and say so when `stale` is true. + +## Attribution + +Every figure needs a source and an as-of. Take the source from `meta` / `_meta`, and the date from an `as_of` wherever it sits, `meta.period`, or a `data_time` the source stated (Time above): name the source, give the date or period or say the source time is unavailable, and when `attribution` is present repeat it verbatim. Live list: https://sugra.ai/sources (MCP resource `sugra://attribution`). + +- Sovereign, intergovernmental, and academic sources are named openly (for example FRED, IMF, ECB, NOAA, World Bank, SEC EDGAR). +- Commercial upstreams appear under Sugra-branded wrappers (Sugra Finance, Sugra News, Sugra Crypto, Sugra Forex, Sugra Weather). Cite the wrapper, not the vendor, even when `meta.source` carries the vendor's id; a required `attribution` notice is still repeated as given. + +This is data presentation, not investment, legal, or compliance advice. Screening tools return a signal, not a determination.
Full technical diff · 19 changed fields
changed /files/.app.json/sha256
"a9a6bf346a91b32eb011f3e4b38db58ff7c0e215f808a6674920cbda5f3c5bf8"
"3f446f1e11ce26bada7c6b8c7d920ca03ecd229ab34080f7fc040418c7075933"
changed /files/.app.json/size
127
101
removed /files/.codex-plugin~1plugin.json
{
"sha256": "640b022d7ee1321920a1c93ddcd8a783e4669ce9aef4aac4b2d82a2630f5cf96",
"size": 3205
}Field is absent
changed /files/assets~1logo.png/sha256
"fd74fdb64b5f63338a4bc7361c6a66b2826f43052876f655b54d960bde8e4bdf"
"87de22ea82764b9bbbc2de6840518f80eca86e8af51e406f9ba5283b2bd3b9fa"
changed /files/assets~1logo.png/size
10242
10425
added /files/mcp.json
Field was absent
{
"sha256": "330035c23f4e4834aec8936e428b3800da68267393739c79d3fab333f5777ca5",
"size": 196
}added /files/plugin.json
Field was absent
{
"sha256": "d1b4e45932a114fcc0714e884efd62cdd69c609d04c2709a4dfdb18db58491df",
"size": 2242
}added /files/skills~1auth-and-quota~1SKILL.md
Field was absent
{
"sha256": "18ce5fd0733830f9ffec0dcdd23caea7bab320ae8d5a079d6a9d7ef26cf86288",
"size": 4712
}added /files/skills~1auth-and-quota~1agents~1openai.yaml
Field was absent
{
"sha256": "6038f65651101cbc2115c28e347c17deba523d0cc5009e1617e968294a5ef28f",
"size": 221
}added /files/skills~1cross-domain-briefing~1SKILL.md
Field was absent
{
"sha256": "5bff04a3c3b44f27e604a8b2aafb8b1a89b7d9a90e09619f4966cc013e938436",
"size": 2115
}added /files/skills~1cross-domain-briefing~1agents~1openai.yaml
Field was absent
{
"sha256": "f54f8ce1d0d94e1d3f4acb5c5e764680cce656453d72d3e2a1ccec55991e4ea2",
"size": 241
}added /files/skills~1discover-and-call~1SKILL.md
Field was absent
{
"sha256": "b7a648fd1ce2e39612ef509c37c9202b74469e467371fa5780c02e02f15937fb",
"size": 5245
}added /files/skills~1discover-and-call~1agents~1openai.yaml
Field was absent
{
"sha256": "2c4bb1d37b8f426651a4472614f2caa972fc42f2668c315adf1ffacbcf84f551",
"size": 226
}added /files/skills~1envelope-and-attribution~1SKILL.md
Field was absent
{
"sha256": "e5241b9d8dea55b47251db85c0cc500d08abb272c3f242c4715103b1a92715c9",
"size": 6008
}added /files/skills~1envelope-and-attribution~1agents~1openai.yaml
Field was absent
{
"sha256": "10834f55e183cd43bb1be1e3f2a47ce2ea1a6e2839804dfe8c585867d67b8154",
"size": 241
}added /files/skills~1live-docs~1SKILL.md
Field was absent
{
"sha256": "3af18eb9cdcd0e483206df7b0fbeea66441b4c6be5c3c59e6832dd7e74718b85",
"size": 2609
}added /files/skills~1live-docs~1agents~1openai.yaml
Field was absent
{
"sha256": "bbd8b385c43aa8b4017cd7eea32f39d4997438da1b24587b6ab16560aaf41908",
"size": 213
}added /files/skills~1using-sugra-api~1SKILL.md
Field was absent
{
"sha256": "d981b6e137cf06a1d2bd8380f2ab9659ad99c0249f4b9bf46efa14ed6e616d9c",
"size": 2918
}added /files/skills~1using-sugra-api~1agents~1openai.yaml
Field was absent
{
"sha256": "544c62aa8e5122875b31ac6834d398bb4e30920a862383b5e477eba190162537",
"size": 212
}Full snapshot data
{
"files": {
".app.json": {
"sha256": "3f446f1e11ce26bada7c6b8c7d920ca03ecd229ab34080f7fc040418c7075933",
"size": 101
},
"assets/logo.png": {
"sha256": "87de22ea82764b9bbbc2de6840518f80eca86e8af51e406f9ba5283b2bd3b9fa",
"size": 10425
},
"mcp.json": {
"sha256": "330035c23f4e4834aec8936e428b3800da68267393739c79d3fab333f5777ca5",
"size": 196
},
"plugin.json": {
"sha256": "d1b4e45932a114fcc0714e884efd62cdd69c609d04c2709a4dfdb18db58491df",
"size": 2242
},
"skills/auth-and-quota/SKILL.md": {
"sha256": "18ce5fd0733830f9ffec0dcdd23caea7bab320ae8d5a079d6a9d7ef26cf86288",
"size": 4712
},
"skills/auth-and-quota/agents/openai.yaml": {
"sha256": "6038f65651101cbc2115c28e347c17deba523d0cc5009e1617e968294a5ef28f",
"size": 221
},
"skills/cross-domain-briefing/SKILL.md": {
"sha256": "5bff04a3c3b44f27e604a8b2aafb8b1a89b7d9a90e09619f4966cc013e938436",
"size": 2115
},
"skills/cross-domain-briefing/agents/openai.yaml": {
"sha256": "f54f8ce1d0d94e1d3f4acb5c5e764680cce656453d72d3e2a1ccec55991e4ea2",
"size": 241
},
"skills/discover-and-call/SKILL.md": {
"sha256": "b7a648fd1ce2e39612ef509c37c9202b74469e467371fa5780c02e02f15937fb",
"size": 5245
},
"skills/discover-and-call/agents/openai.yaml": {
"sha256": "2c4bb1d37b8f426651a4472614f2caa972fc42f2668c315adf1ffacbcf84f551",
"size": 226
},
"skills/envelope-and-attribution/SKILL.md": {
"sha256": "e5241b9d8dea55b47251db85c0cc500d08abb272c3f242c4715103b1a92715c9",
"size": 6008
},
"skills/envelope-and-attribution/agents/openai.yaml": {
"sha256": "10834f55e183cd43bb1be1e3f2a47ce2ea1a6e2839804dfe8c585867d67b8154",
"size": 241
},
"skills/live-docs/SKILL.md": {
"sha256": "3af18eb9cdcd0e483206df7b0fbeea66441b4c6be5c3c59e6832dd7e74718b85",
"size": 2609
},
"skills/live-docs/agents/openai.yaml": {
"sha256": "bbd8b385c43aa8b4017cd7eea32f39d4997438da1b24587b6ab16560aaf41908",
"size": 213
},
"skills/using-sugra-api/SKILL.md": {
"sha256": "d981b6e137cf06a1d2bd8380f2ab9659ad99c0249f4b9bf46efa14ed6e616d9c",
"size": 2918
},
"skills/using-sugra-api/agents/openai.yaml": {
"sha256": "544c62aa8e5122875b31ac6834d398bb4e30920a862383b5e477eba190162537",
"size": 212
}
}
}SHA-256 of public snapshot: cc65924b70b2d99af409d6b15388e85e5c4ae687616835336a0d06f84cb1f3da