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/auth-and-quota/SKILL.md
− removed · + added
--- before +++ after @@ -0,0 +1,51 @@ +--- +name: auth-and-quota +description: Use a Sugra key, stay inside the daily quota, and act on each error over HTTPS or MCP. Use when the user needs a key, before a bulk call, or when a call returns 400, 401, 404, 422, 429, 5xx, missing_api_key, missing_bearer_token, unknown_parameters, needs_params, or upstream_*. +license: MIT +--- + +# Auth and quota + +One key. Volume gating only: every plan sees every endpoint. Plans and errors on https://docs.sugra.ai (search Authentication, Rate limits). + +Sign up at https://app.sugra.ai/register: a Free key is issued at signup. Keys: https://app.sugra.ai/developer/keys. Plans and prices: https://sugra.systems/api/pricing. Prefix `sugra_...`. Do not log the key, and do not put it in a skill file, a commit, or a chat. + +Free: 50 requests a day. Paid plans raise that volume; the volume and price of each plan are on the pricing page. + +The daily quota belongs to the account, not to one key: every key of the account draws on the same count. It resets at 00:00 UTC. + +A keyed data call costs at least 1 request. The public system endpoints (`/health`, `/sources`, `/openapi.json`) and the stdio catalog tools make no data call. Before a bulk call read MCP `describe_endpoint` `agent_hints.bulk_cost`. Over HTTPS, `X-RateLimit-Remaining` on each keyed response shows what is left. Over MCP, hosted composed tools report their own cost in `billing` (`rate_limit_cost`, `downstream_calls`, `remaining`), and one composed call can spend more than 1 request. + +## HTTPS API + +``` +x-api-key: sugra_... +``` + +On `https://sugra.ai` the key goes only in the `x-api-key` header. + +Keyed responses carry `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` (the last second of the UTC quota day in ISO 8601, `YYYY-MM-DDT23:59:59Z`), and `X-Request-ID`. A 429 also carries `Retry-After` (seconds). + +## MCP + +How each MCP client signs in to the Sugra API MCP server: https://docs.sugra.ai/doc-2263382. + +MCP tool JSON does not forward `X-RateLimit-*`. Read an MCP error's `error` first, then follow its `hint` or `retry_hint` when it has one. When the API answered, the error has a numeric `status_code`, plus `request_id` (the API's `X-Request-ID`) and `retry_after` (seconds) when the API sent them. A network failure (`upstream_timeout`, `upstream_connect_error`, `upstream_transport_error`) has no HTTP status and carries a `reason`. An answer too large for MCP comes back trimmed with `meta.truncated`, or as `response_too_large`: narrow the filters. Catalog and validation errors (`unknown_parameters`, `missing_required_parameters`, `needs_params`, `missing_required_parameter_groups`, `unknown_operation_id`) make no API call and carry their own fields (table below). + +## Errors + +Read the message before anything else: it usually names the fix. + +| Signal | Meaning | What to do | +|---|---|---| +| HTTP 400 / 422 | a parameter is missing, malformed, or out of range | find which one in the message (over MCP a 422 can arrive as a bare `HTTP 422`: then check every parameter against `describe_endpoint`), fix it, then call again | +| MCP `unknown_parameters` (hosted server only) | a key the operation does not declare | use a name from `accepted` or `did_you_mean` | +| MCP `missing_required_parameters` / `needs_params` / `missing_required_parameter_groups` | required parameters are missing | fill them from the returned list, then call again | +| MCP `unknown_operation_id` | the id is not in the catalog | search again; do not guess an id | +| HTTP 404 | no such path, or no such item (an airport, a paper, a series) | if the message names a missing item, fix the input; otherwise check the path on docs.sugra.ai. Do not guess | +| HTTP 401 / MCP `missing_api_key` / `missing_bearer_token` | missing or invalid credential | stop. Do not retry the same call. Over MCP, point the user to the sign-in page in MCP above | +| HTTP 429 / MCP 429 | the account's quota is spent, or a short protective limit | wait for `Retry-After` / `retry_after`, or until `X-RateLimit-Reset`. On the hosted server a spent quota carries `reason: daily_limit_reached` (with `daily_limit` and `plan` when known): tell the user it resets at 00:00 UTC | +| MCP `server_busy` / `deadline_exceeded` | the MCP server is at its limit, or the call ran past its time budget | do what its `retry_hint` says | +| HTTP 5xx / MCP `upstream_*` | platform or upstream fault | if the message says the input does not exist (an unknown series or identifier), fix the input; otherwise retry once with backoff, then tell the user to write to support@sugra.systems with `X-Request-ID` / `request_id` when there is one, else with the whole error | + +Do not retry a 4xx unchanged. Retry a 429 only after the wait it names.
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