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

# List account events

> Base URL `https://compute.x402layer.cc/pods/v1`. Auth is `X-API-Key` only. This is the PROGRAMMATIC surface and is NOT the same as the dashboard pod routes (`POST /pods`, `PATCH /pods/{id}/settings`, ...), which take a wallet signature or a browser session and are free to change. Every response carries `x-request-id`.

**The log is the source of truth; webhooks are one way to read it.** A failed delivery is gone, the log is not, so if you miss a delivery, page this and catch up.

**Page by `seq`, never by timestamp.** `seq` is an integer that only goes up. Two events can share a millisecond, and a timestamp cursor either skips one or repeats it forever. Store the `next_after` you get back and pass it as `after`; it is returned even on an empty page, so a poller always has a cursor to carry forward.

Events younger than about two seconds are withheld on purpose: `seq` is assigned at insert but rows appear at commit, so 101 can be readable while 100 is still in flight, and a cursor advanced past 101 would never see 100 again.

Account-scoped, not pod-scoped: a fleet wants one stream, not one subscription per pod. Retained 30 days. Rate limit: the shared read bucket, 240 requests/minute per account.



## OpenAPI

````yaml GET /pods/v1/events
openapi: 3.1.0
info:
  title: x402 Singularity Layer API
  description: >-
    OpenAPI-backed reference for marketplace discovery, payment routes,
    webhooks, wallet-first auth, agent endpoints, and ERC-8004 flows.
  version: 1.0.0
servers:
  - url: https://api.x402layer.cc
security: []
tags:
  - name: Marketplace
    description: Public discovery and listing lookup
  - name: Public Endpoints
    description: Public endpoint metadata and hosted checkout context
  - name: Public Payment Links
    description: Hosted public payment-link lookup
  - name: Payments
    description: Hosted x402 payment challenge routes
  - name: Receipts
    description: Signed receipt lookup and verification helpers
  - name: Ratings
    description: Public listing ratings and authenticated rating actions
  - name: Webhooks
    description: Seller webhook management API
  - name: Agent Auth
    description: Wallet-first challenge and verification routes
  - name: Agent Endpoints
    description: Create, read, top up, and delete agent endpoints
  - name: ERC-8004
    description: Agent registry and registration lifecycle routes
  - name: Marketplace Agents
    description: Public ERC-8004 marketplace discovery routes
  - name: Compute Catalog
    description: Compute plans, regions, and OS catalog
  - name: Compute Instances
    description: Provision, inspect, extend, and destroy compute instances
  - name: Compute API Keys
    description: API keys for compute agent access
  - name: Fundraiser Campaigns
    description: List, view, create, and edit fundraiser campaigns
  - name: Fundraiser Contributions
    description: Record and list campaign contributions
  - name: Fundraiser Comments
    description: Campaign comment threads
  - name: Fundraiser Media
    description: Campaign image uploads and OG images
  - name: Enterprise
    description: >-
      Enterprise partner configuration, endpoint listing, revenue stats, and
      transaction ledger
  - name: Staking
    description: Agentic $SGL staking
  - name: SGL Grid
    description: >-
      Decentralized, confidential, OpenAI-compatible inference served by
      attested TEE nodes.
  - name: Compute Credits
    description: Prepaid USDC credit balance shared across Machines and Grid.
  - name: Agent Pods
    description: >-
      Deploy and manage hosted agents (Agent Pods), plus the pod's
      OpenAI-compatible adapter for external clients.
  - name: Agent Pods API
    description: >-
      The programmatic `/pods/v1` surface: create, drive and destroy Agent Pods
      with a single `X-API-Key`. Distinct from the Agent Pods dashboard routes,
      which expect a wallet signature or a browser session.
paths:
  /pods/v1/events:
    servers:
      - url: https://compute.x402layer.cc
    get:
      tags:
        - Agent Pods API
      summary: List account events
      description: >-
        Base URL `https://compute.x402layer.cc/pods/v1`. Auth is `X-API-Key`
        only. This is the PROGRAMMATIC surface and is NOT the same as the
        dashboard pod routes (`POST /pods`, `PATCH /pods/{id}/settings`, ...),
        which take a wallet signature or a browser session and are free to
        change. Every response carries `x-request-id`.


        **The log is the source of truth; webhooks are one way to read it.** A
        failed delivery is gone, the log is not, so if you miss a delivery, page
        this and catch up.


        **Page by `seq`, never by timestamp.** `seq` is an integer that only
        goes up. Two events can share a millisecond, and a timestamp cursor
        either skips one or repeats it forever. Store the `next_after` you get
        back and pass it as `after`; it is returned even on an empty page, so a
        poller always has a cursor to carry forward.


        Events younger than about two seconds are withheld on purpose: `seq` is
        assigned at insert but rows appear at commit, so 101 can be readable
        while 100 is still in flight, and a cursor advanced past 101 would never
        see 100 again.


        Account-scoped, not pod-scoped: a fleet wants one stream, not one
        subscription per pod. Retained 30 days. Rate limit: the shared read
        bucket, 240 requests/minute per account.
      parameters:
        - name: after
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
          description: A `seq` from a previous page. Returns events strictly after it.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 200
            default: 50
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - pod.created
              - pod.active
              - pod.destroyed
              - pod.destroy_failed
              - pod.action.queued
              - pod.status.changed
              - pod.renewed
              - pod.renewal_failed
              - pod.expiring
              - pod.backup.completed
              - pod.backup.failed
          description: Filter to one event type.
        - name: pod_id
          in: query
          required: false
          schema:
            type: string
            format: uuid
          description: Filter to one pod.
      responses:
        '200':
          description: A page of events, oldest first.
          headers:
            x-request-id:
              description: >-
                Correlation id for this request. A caller-supplied
                `x-request-id` (8-64 chars of `A-Za-z0-9._-`) is echoed back;
                otherwise one is generated. Quote it in support requests.
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  events:
                    type: array
                    items:
                      $ref: '#/components/schemas/PodV1Event'
                  next_after:
                    type: integer
                    description: >-
                      The cursor for the next page. Returned even on an empty
                      page.
                  has_more:
                    type: boolean
        '400':
          description: >-
            `invalid_request` - `after` is not a non-negative integer, `type` is
            not a known event type (`details.valid` lists them), or `pod_id` is
            not a pod id.
          headers:
            x-request-id:
              description: >-
                Correlation id for this request. A caller-supplied
                `x-request-id` (8-64 chars of `A-Za-z0-9._-`) is echoed back;
                otherwise one is generated. Quote it in support requests.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
        '401':
          description: '`unauthorized` - missing or invalid `X-API-Key`.'
          headers:
            x-request-id:
              description: >-
                Correlation id for this request. A caller-supplied
                `x-request-id` (8-64 chars of `A-Za-z0-9._-`) is echoed back;
                otherwise one is generated. Quote it in support requests.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
        '429':
          description: >-
            `rate_limited` - too many requests. `details.retry_after_seconds`
            gives the bucket window.
          headers:
            x-request-id:
              description: >-
                Correlation id for this request. A caller-supplied
                `x-request-id` (8-64 chars of `A-Za-z0-9._-`) is echoed back;
                otherwise one is generated. Quote it in support requests.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PodV1Error'
      security:
        - podsApiKey: []
components:
  schemas:
    PodV1Event:
      type: object
      description: >-
        One row of the account event log. The log is the source of truth;
        webhooks are one way to read it.
      properties:
        id:
          type: string
          format: uuid
        seq:
          type: integer
          description: >-
            The paging cursor. An integer that only goes up. Page by this, NEVER
            by `created_at`: two events can share a millisecond, and a timestamp
            cursor either skips one or repeats it forever.
        type:
          type: string
          enum:
            - pod.created
            - pod.active
            - pod.destroyed
            - pod.destroy_failed
            - pod.action.queued
            - pod.status.changed
            - pod.renewed
            - pod.renewal_failed
            - pod.expiring
            - pod.backup.completed
            - pod.backup.failed
        pod_id:
          type: string
          format: uuid
          nullable: true
        data:
          type: object
        created_at:
          type: string
          format: date-time
    PodV1Error:
      type: object
      description: >-
        Every `/pods/v1/*` failure has this shape. Branch on `error.code`, never
        on `error.message` - the message is prose and may be reworded.
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - invalid_request
                - unauthorized
                - forbidden
                - not_found
                - conflict
                - limit_exceeded
                - capability_disabled
                - rate_limited
                - not_implemented
                - internal
              description: Stable machine-readable code.
            message:
              type: string
              description: Human-readable explanation.
            details:
              type: object
              description: >-
                Optional structured context, e.g. `{ "code":
                "idempotency_mismatch" }`, `{ "required_scope":
                "pods:wallet:write" }`, `{ "capability": "wallet" }`, `{
                "retry_after_seconds": 60 }`.
  securitySchemes:
    podsApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        A compute API key (`x402c_...`). Mint one in the dashboard under
        Settings -> API Keys. This is the ONLY auth `/pods/v1/*` accepts -
        wallet signatures are bound to method+path+body and do not survive the
        internal hop, so signature callers must use the dashboard routes
        instead. Two extra scopes gate the dangerous powers: `pods:wallet:write`
        (pod wallet money, backup passphrase) and `pods:control:write`
        (connectors, full-power control socket).

````