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

# List Contracts

> Retrieve all tracked smart contracts for your project. Returns contract addresses, chain IDs, ABIs, and event tracking configurations.



## OpenAPI

````yaml GET /v0/contracts
openapi: 3.1.0
info:
  title: Formo Public API
  description: >-
    REST API for managing Formo projects, analytics, alerts, boards, charts,
    contracts, segments, and AI chat.


    **Auth.** All endpoints require a workspace API key with the appropriate
    scopes (see `x-api-scopes`).


    **Response shape.** Successful responses return the resource directly (or `{
    data: [...], total, page, size, has_more }` for paginated lists). HTTP
    status carries success/failure; there is no envelope wrapping success
    bodies.


    **Errors.** Every non-2xx response uses the `Error` envelope: `{ error: {
    code, message, doc_url, param?, details? } }`. Branch on the
    machine-readable `code` (see `ErrorCode` enum) and follow `doc_url` to the
    matching section of the [errors
    reference](https://docs.formo.so/api/errors).


    **Idempotency.** Pass an `Idempotency-Key` header on POST/PUT/PATCH/DELETE
    to make retries safe; the response is cached for 24 h and replayed on
    duplicate keys.
  version: 0.1.0
  contact:
    name: Formo
    url: https://formo.so
servers:
  - url: https://api.formo.so
    description: API Server (boards, alerts, contracts, segments, profiles, query, import)
  - url: https://events.formo.so
    description: Events Server (event ingestion)
security:
  - WorkspaceApiKey: []
tags:
  - name: Alerts
    description: Manage project alerts and notifications
  - name: Boards
    description: Manage dashboard boards
  - name: Charts
    description: Manage charts within boards
  - name: Contracts
    description: Manage blockchain contract monitoring
  - name: Segments
    description: Manage user segments
  - name: Profiles
    description: Wallet profiles and import
  - name: Query
    description: >-
      Execute SQL queries and call pre-built analytics endpoints (KPIs, top
      pages, lifecycle, retention, revenue). Requires the query:read scope.
  - name: Events
    description: Event ingestion API (events.formo.so)
paths:
  /v0/contracts:
    get:
      tags:
        - Contracts
      summary: List contracts
      description: >-
        List monitored contracts. Paginated; the canonical `data` array carries
        the contracts for the current page. The `deploy` sidecar reports the
        project-wide deploy state (always reflects ALL contracts, not just this
        page) so callers can render "X contracts pending deploy" without a
        second request.
      operationId: listContracts
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/Size'
      responses:
        '200':
          description: Paginated list of contracts plus deploy-state sidecar
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedListMeta'
                  - type: object
                    required:
                      - data
                      - deploy
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Contract'
                      deploy:
                        type: object
                        required:
                          - last_deployed_at
                          - diff
                        properties:
                          last_deployed_at:
                            type: string
                            format: date-time
                            nullable: true
                            description: >-
                              Timestamp of the project's last successful deploy,
                              or null if no deploy has run yet.
                          diff:
                            type: array
                            description: >-
                              Difference between the contracts currently
                              registered for the project and what's actually
                              deployed. Drives the "contracts pending deploy"
                              UI.
                            items:
                              type: object
              example:
                data:
                  - name: USD Coin
                    chain: 1
                    address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
                    start_block: 6082465
                    abi: >-
                      [{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
                    events:
                      - anonymous: false
                        name: Transfer
                        type: event
                        inputs:
                          - indexed: true
                            name: from
                            type: address
                          - indexed: true
                            name: to
                            type: address
                          - indexed: false
                            name: value
                            type: uint256
                  - name: WETH (Base)
                    chain: 8453
                    address: '0x4200000000000000000000000000000000000006'
                    start_block: 1
                    abi: >-
                      [{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
                    events:
                      - anonymous: false
                        name: Transfer
                        type: event
                        inputs:
                          - indexed: true
                            name: from
                            type: address
                          - indexed: true
                            name: to
                            type: address
                          - indexed: false
                            name: value
                            type: uint256
                page: 1
                size: 100
                total: 2
                has_more: false
                deploy:
                  last_deployed_at: '2026-04-22T08:14:31.000Z'
                  diff: []
components:
  parameters:
    Page:
      name: page
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        default: 1
      description: 1-indexed page number. Defaults to 1.
    Size:
      name: size
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 200
        default: 100
      description: Page size. Defaults to 100, capped at 200.
  schemas:
    PaginatedListMeta:
      type: object
      description: >-
        Pagination cursor returned alongside `data` on every paginated list
        endpoint. Use these to walk pages: `has_more` is true while `page * size
        < total`. Combine with the matching `Page` and `Size` query parameters
        to request the next page.
      required:
        - page
        - size
        - total
        - has_more
      properties:
        page:
          type: integer
          description: 1-indexed page number echoed from the request.
        size:
          type: integer
          description: Page size echoed from the request.
        total:
          type: integer
          description: Total row count across all pages.
        has_more:
          type: boolean
          description: True when more pages remain (`page * size < total`).
    Contract:
      type: object
      properties:
        name:
          type: string
        chain:
          type: integer
        address:
          type: string
        start_block:
          type: integer
        abi:
          type: string
        events:
          type: array
          items:
            type: object
            properties:
              anonymous:
                type: boolean
              inputs:
                type: array
                items:
                  type: object
              name:
                type: string
              type:
                type: string
            required:
              - anonymous
              - inputs
              - name
              - type
      required:
        - name
        - chain
        - address
        - abi
        - events
  securitySchemes:
    WorkspaceApiKey:
      type: http
      scheme: bearer
      description: >-
        Workspace API key (e.g. `formo_xxx`). Create one in the Formo dashboard
        under Team Settings > API Keys.

````