> ## Documentation Index
> Fetch the complete documentation index at: https://immersivecommons.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Read the public donor wall

> Public, no auth. Running total raised (USDC), donor count, and recent settled gifts. Donations are made via the x402 pay-per-use surface (see the x-payment-info discovery pointer at the top of this document).



## OpenAPI

````yaml /openapi.json get /api/floor10/donations
openapi: 3.1.1
info:
  title: Immersive Commons — Agent REST API
  version: '2026-07-16'
  summary: The REST surface an AI agent uses to act at Immersive Commons.
  description: >-
    Machine-readable description of the Immersive Commons REST API for AI
    agents.


    **Authentication.** Most operations take a Bearer agent token
    (`Authorization: Bearer agt_...`). Mint one via the RFC 8628 device-code
    flow (`POST /api/agent/signup/start` → poll `/api/agent/signup/poll`) or a
    human mints it at /floor10/agent-console. Tokens carry least-privilege
    scopes; each operation names the scope it needs in its `security`
    requirement. Public reads allow anonymous access (empty security
    requirement). A few operations tagged `browser-session` are Clerk-cookie
    only and are NOT reachable with an agt_ bearer — agents use the equivalent
    MCP tools instead.


    **Error model.** Operation errors return JSON that validates against the
    shared `Error` schema (`{ "error": "..." }`, optionally
    `ok:false`/`error_kind`/`rate`/`retry_after_seconds`). Any /api/* path that
    matches NO operation returns the catch-all floor — HTTP 401 with `{ "error":
    { "code", "message" } }` and a `WWW-Authenticate: Bearer
    resource_metadata=...` header pointing at
    /.well-known/oauth-protected-resource.


    **Idempotency.** The deduped write operations accept an optional
    `Idempotency-Key` request header: a retry with the same key replays the
    first successful result (24h window) instead of creating a second side
    effect. This layers on top of each endpoint's own semantic dedupe (e.g.
    RSVP's 7-day window).


    **Versioning & deprecation policy.** The API is served UNVERSIONED at the
    root path (no `/v1` prefix, no per-request version header). The dated
    `info.version` (CalVer) is the change marker to pin against. No operation is
    deprecated today; when one is scheduled for removal it will be marked
    `deprecated: true` here and carry RFC 8594 `Deprecation` + `Sunset` response
    headers, announced at least 90 days ahead via /developers and llms.txt.
    Breaking changes ship under a new dated version; additive changes do not.


    **Rate limits.** Agent tokens are limited per-token per endpoint family
    (e.g. 3 highlight submissions/day, 60 research queries/hour). 429 responses
    carry a `Retry-After` header. Responses carry the RFC RateLimit headers
    (draft-ietf-httpapi-ratelimit-headers: `RateLimit` + `RateLimit-Policy` in
    RFC 9651 Structured Fields syntax, plus the legacy discrete
    `RateLimit-Limit` / `RateLimit-Remaining` / `RateLimit-Reset`) so callers
    can self-throttle. These are live on the anonymous-reachable reads AND on
    auth rejections (401/403) — an unauthenticated request still consumes the
    anonymous budget (default policy: 120 requests / 60s window), so the
    conventions are verifiable without a token.
  contact:
    name: Immersive Commons
    email: admin@immersivecommons.com
    url: https://www.immersivecommons.com/developers
  license:
    name: Proprietary
    url: https://www.immersivecommons.com/privacy
servers:
  - url: https://www.immersivecommons.com
    description: Production
  - url: https://www.immersivecommons.com
    description: >-
      Sandbox (test mode) — same base URL; mint a sandbox token via
      `sandbox:true` on /api/agent/signup/start. Writes return simulated
      receipts, reads serve real data.
    x-sandbox: token-flag
security:
  - {}
tags:
  - name: events
    description: Discover and RSVP to events; propose member events.
  - name: batch
    description: Fan out several public GET reads in one request.
  - name: directory
    description: Search the member directory.
  - name: resources
    description: List and book rooms / printers.
  - name: account
    description: The caller's own activity log.
  - name: leaderboard
    description: The public commit leaderboard.
  - name: research
    description: Query the research RAG corpus.
  - name: highlights
    description: Submit event highlights for moderation.
  - name: feedback
    description: File feedback / breakage reports.
  - name: auth
    description: Token mint (device code), self-revoke, setup checks.
  - name: payments
    description: x402 machine payments (donor wall).
  - name: membership
    description: Membership tier (browser-session).
  - name: browser-session
    description: Clerk-cookie only — NOT reachable with an agt_ bearer.
paths:
  /api/floor10/donations:
    get:
      tags:
        - payments
      summary: Read the public donor wall
      description: >-
        Public, no auth. Running total raised (USDC), donor count, and recent
        settled gifts. Donations are made via the x402 pay-per-use surface (see
        the x-payment-info discovery pointer at the top of this document).
      operationId: getDonorWall
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 50
          description: Recent-donor cap; default 10, max 50.
      responses:
        '200':
          description: The donor wall.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DonationsResponse'
      security:
        - {}
components:
  schemas:
    DonationsResponse:
      type: object
      required:
        - ok
      properties:
        ok:
          type: boolean
        total_usdc:
          type: number
        donor_count:
          type: integer
        recent:
          type: array
          items:
            type: object
            additionalProperties: true
      additionalProperties: true

````