← Sugra APICONTENT HISTORY

Update to Sugra API

Snapshot Oct 24, 2026 · 18:04 UTC · version 1.2.1

WHAT CHANGED

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.

Save Sugra API and check future changes in Following.

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

Before

Sep 30, 2026 · 22:51 UTC

a9a6bf346a91b32eb011f3e4b38db58ff7c0e215f808a6674920cbda5f3c5bf8

After

Oct 24, 2026 · 18:04 UTC

3f446f1e11ce26bada7c6b8c7d920ca03ecd229ab34080f7fc040418c7075933

Package file

Before

Sep 30, 2026 · 22:51 UTC

127

After

Oct 24, 2026 · 18:04 UTC

101

Package file

Before

Sep 30, 2026 · 22:51 UTC

{"sha256":"640b022d7ee1321920a1c93ddcd8a783e4669ce9aef4aac4b2d82a2630f5cf96","size":3205}

After

Oct 24, 2026 · 18:04 UTC

Not present

Package file

Before

Sep 30, 2026 · 22:51 UTC

fd74fdb64b5f63338a4bc7361c6a66b2826f43052876f655b54d960bde8e4bdf

After

Oct 24, 2026 · 18:04 UTC

87de22ea82764b9bbbc2de6840518f80eca86e8af51e406f9ba5283b2bd3b9fa

Compare saved observations

Download comparison JSON

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

BEFORE
"a9a6bf346a91b32eb011f3e4b38db58ff7c0e215f808a6674920cbda5f3c5bf8"
AFTER
"3f446f1e11ce26bada7c6b8c7d920ca03ecd229ab34080f7fc040418c7075933"

changed /files/.app.json/size

BEFORE
127
AFTER
101

removed /files/.codex-plugin~1plugin.json

BEFORE
{
  "sha256": "640b022d7ee1321920a1c93ddcd8a783e4669ce9aef4aac4b2d82a2630f5cf96",
  "size": 3205
}
AFTER
Field is absent

changed /files/assets~1logo.png/sha256

BEFORE
"fd74fdb64b5f63338a4bc7361c6a66b2826f43052876f655b54d960bde8e4bdf"
AFTER
"87de22ea82764b9bbbc2de6840518f80eca86e8af51e406f9ba5283b2bd3b9fa"

changed /files/assets~1logo.png/size

BEFORE
10242
AFTER
10425

added /files/mcp.json

BEFORE
Field was absent
AFTER
{
  "sha256": "330035c23f4e4834aec8936e428b3800da68267393739c79d3fab333f5777ca5",
  "size": 196
}

added /files/plugin.json

BEFORE
Field was absent
AFTER
{
  "sha256": "d1b4e45932a114fcc0714e884efd62cdd69c609d04c2709a4dfdb18db58491df",
  "size": 2242
}

added /files/skills~1auth-and-quota~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "18ce5fd0733830f9ffec0dcdd23caea7bab320ae8d5a079d6a9d7ef26cf86288",
  "size": 4712
}

added /files/skills~1auth-and-quota~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "6038f65651101cbc2115c28e347c17deba523d0cc5009e1617e968294a5ef28f",
  "size": 221
}

added /files/skills~1cross-domain-briefing~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "5bff04a3c3b44f27e604a8b2aafb8b1a89b7d9a90e09619f4966cc013e938436",
  "size": 2115
}

added /files/skills~1cross-domain-briefing~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "f54f8ce1d0d94e1d3f4acb5c5e764680cce656453d72d3e2a1ccec55991e4ea2",
  "size": 241
}

added /files/skills~1discover-and-call~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "b7a648fd1ce2e39612ef509c37c9202b74469e467371fa5780c02e02f15937fb",
  "size": 5245
}

added /files/skills~1discover-and-call~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "2c4bb1d37b8f426651a4472614f2caa972fc42f2668c315adf1ffacbcf84f551",
  "size": 226
}

added /files/skills~1envelope-and-attribution~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "e5241b9d8dea55b47251db85c0cc500d08abb272c3f242c4715103b1a92715c9",
  "size": 6008
}

added /files/skills~1envelope-and-attribution~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "10834f55e183cd43bb1be1e3f2a47ce2ea1a6e2839804dfe8c585867d67b8154",
  "size": 241
}

added /files/skills~1live-docs~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "3af18eb9cdcd0e483206df7b0fbeea66441b4c6be5c3c59e6832dd7e74718b85",
  "size": 2609
}

added /files/skills~1live-docs~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "bbd8b385c43aa8b4017cd7eea32f39d4997438da1b24587b6ab16560aaf41908",
  "size": 213
}

added /files/skills~1using-sugra-api~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "d981b6e137cf06a1d2bd8380f2ab9659ad99c0249f4b9bf46efa14ed6e616d9c",
  "size": 2918
}

added /files/skills~1using-sugra-api~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "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