Skip to content

Concepts

Permits

Permits are scoped authorizations that grant the minimum rights needed for one class of actions within a short validity window.

Core permit fields

  • scope, constrains what operation can run, such as `swap.execute`.
  • ttl, limits validity to a short time window.
  • nonce, uniquely identifies one authorization event.
  • domain separation, binds the permit to one environment and signer context.

Example permit JSON

{
  "permitId": "prm_01JXATF0ABC",
  "policyId": "pol_live_treasury_v1",
  "scope": "swap.execute",
  "subject": "agent:rebalance-bot",
  "ttl": {
    "issuedAt": 1766202000,
    "expiresAt": 1766202060
  },
  "nonce": "f31f2f8d-bd7b-4c56-bf0b-9912e7b7d302",
  "domain": {
    "chainId": "solana-mainnet",
    "environment": "prod",
    "verifier": "atf-gateway-v1"
  },
  "signature": "0xabc123..."
}

Replay protection

Replay protection combines short TTL, single-use nonce tracking, and domain separation checks. If a permit is reused, expired, or presented in the wrong environment, validation fails and execution is denied.

API auth and quotas

Permit validation examples in this docs section use /api/simulate. For partner traffic, include x-api-key: YOUR_API_KEY on each request.

  • Partner Sandbox quota, 120 requests per minute per key.
  • Public quota without key, 30 requests per minute per IP.
  • Inspect headers for live usage, X-RateLimit-Limit,X-RateLimit-Remaining, andX-RateLimit-Reset.