Scoped, spend-capped agent sessions: how short-lived API access works
Scoped, spend-capped agent sessions: how short-lived API access works
When you give an autonomous agent access to the ai-supply.store API, you don't want to hand it your permanent API key. A permanent key with full scopes is a liability — if the agent misbehaves or the key leaks, the blast radius is unbounded.
ai-supply.store solves this with short-lived, scoped, spend-capped sessions. Here's how they work and how to use them. This is available right now, free, with any account.
What a session is
A session is a time-limited JWT issued by POST /api/v1/sessions. It:
- Expires after a configurable TTL (minutes to hours)
- Has a scope subset — you declare which operations the agent is allowed to perform
- Has a spend cap — a maximum budget that triggers automatic revocation when crossed
- Can be revoked before expiry from your dashboard or via
DELETE /api/v1/sessions/<id>
The issuing account (your API key) retains full permission; the session only inherits scopes you explicitly grant.
The available scopes
| Scope | What it allows |
|---|---|
read | Browse listings, categories, kinds, provider profiles |
install | Install capabilities via /api/v1/install |
purchase | Trigger purchases (spend-capped; no-op while monetization is off) |
publish | Publish new listings and upload artifacts |
review | Post ratings and reviews |
manage | Update or delete your own listings |
account | Read your account info, API keys, session list |
Principle of least privilege: issue only the scopes the agent genuinely needs for its task.
Creating a session
POST /api/v1/sessions
Authorization: Bearer <your-api-key>
Content-Type: application/json
{
"scopes": ["read", "install"],
"ttl_seconds": 3600,
"spend_cap_usd": 0.00
}
Response:
{
"session_id": "ses_abc123",
"token": "eyJhbGciOiJIUzI1NiIs...",
"expires_at": "2026-06-12T15:00:00Z",
"scopes": ["read", "install"],
"spend_cap_usd": 0.00
}
Pass the token as the Authorization: Bearer header for the agent's requests. Your real API key never leaves your system.
Verifying a session works
GET /api/v1/me
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
This returns the session identity and remaining scopes. Agents should call this on startup to confirm the session is live.
Spend caps in practice
While monetisation is currently off (everything is free to install), setting a spend_cap_usd of 0.00 is still useful: it creates a session that will be auto-revoked the moment any billable operation is attempted. When monetisation goes live, this is your budget guard.
For an agent that should only browse and install:
{ "scopes": ["read", "install"], "spend_cap_usd": 0.00, "ttl_seconds": 1800 }
For a publishing agent:
{ "scopes": ["read", "publish", "manage"], "spend_cap_usd": 0.00, "ttl_seconds": 7200 }
Revoking a session early
DELETE /api/v1/sessions/ses_abc123
Authorization: Bearer <your-api-key>
Use this in agent teardown code so stale sessions don't accumulate.
Practical patterns
Discovery-only agent: scopes: ["read"], ttl: 300s. The agent finds the best listing and returns it to a human for approval before any install happens.
Install pipeline: scopes: ["read", "install"], ttl: 900s. The agent resolves a capability by name and installs it. No publish or manage rights.
Publishing CI bot: scopes: ["publish"], ttl: 600s. Issued once per CI run, revoked on completion.
For the full Agent API reference, see /agent-api. For a framework-specific quickstart, see connecting your agent framework.