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

# List the domains on this account

> Newest first, one page at a time: pass `nextCursor` back as `cursor` for the next one. Each domain carries the state of the claim in play on it, and `counts` tallies every status on the account, not only this page. `name` narrows to one, which is how a page reads a domain it only knows by name. Archived domains are left out; they are still readable by id.



## OpenAPI

````yaml /openapi.json get /api/domains/
openapi: 3.1.0
info:
  title: ownsi API
  description: >-
    Prove ownership of a domain with a TXT record, and read a zone before anyone
    signs in.


    Two surfaces, and they behave differently on purpose:


    - `GET /api/zones/:name` is public. It streams what DNS answers, in the
    order DNS answers it,
      and writes nothing. No account, no key.
    - Everything under `/api/domains`, `/api/claims` and `/api/verifications`
    belongs to an
      account and needs a session cookie.

    A lookup that failed never carries records, and a claim that has not been
    checked never carries a

    diagnosis: both are tagged unions, so the shape tells you which case you are
    in. Errors are always

    `{ error: { code, message, docsUrl } }` with a stable `code`.
  version: 0.1.0
servers:
  - url: https://ownsi.dev
    description: The origin the front end and the API share
security: []
tags:
  - name: Zones
    description: >-
      Reading a zone the way a visitor sees it: the delegation first, so the
      provider can be named, then how long publishing is likely to take. Public,
      rate limited per IP.
  - name: Domains
    description: >-
      A name on an account, and nothing else — no status, no token. It is what a
      claim is opened against. Session required.
  - name: Claims
    description: >-
      The episode: one token, one seven-day window, one outcome. A claim is
      never reopened, so the list of them is the account's history. Session
      required.
  - name: Events
    description: >-
      One stream per open tab, telling an account's screens what moved. It
      carries no state: a message names the resource, the client reads it back.
      Session required.
  - name: Proof
    description: >-
      A proved claim, shared. A link carries its own slug — never the DNS token
      — and resolves for seven days at `/p/:slug`, where the page states one
      moment and reads no DNS. Session required to publish one.
  - name: Verifications
    description: >-
      The process behind a claim: the runs it has made, the named diagnosis of
      the last one, and when the next lands. Session required.
paths:
  /api/domains/:
    get:
      tags:
        - Domains
      summary: List the domains on this account
      description: >-
        Newest first, one page at a time: pass `nextCursor` back as `cursor` for
        the next one. Each domain carries the state of the claim in play on it,
        and `counts` tallies every status on the account, not only this page.
        `name` narrows to one, which is how a page reads a domain it only knows
        by name. Archived domains are left out; they are still readable by id.
      operationId: getApiDomains
      parameters:
        - name: name
          in: query
          required: false
          schema:
            minLength: 1
            maxLength: 253
            type: string
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - unclaimed
              - pending
              - proved
              - expired
              - canceled
        - name: cursor
          in: query
          required: false
          schema:
            minLength: 1
            type: string
        - name: limit
          in: query
          required: false
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: number
      responses:
        '200':
          description: Response for status 200
          content:
            application/json:
              schema:
                type: object
                required:
                  - domains
                  - counts
                  - nextCursor
                properties:
                  domains:
                    type: array
                    items:
                      type: object
                      required:
                        - id
                        - name
                        - unicodeName
                        - archived
                        - createdAt
                        - status
                        - claimId
                        - verificationId
                        - claimStartedAt
                        - claimEndedAt
                      properties:
                        id:
                          type: string
                        name:
                          type: string
                        unicodeName:
                          type: string
                        archived:
                          type: boolean
                        createdAt:
                          type: string
                        status:
                          type: string
                          enum:
                            - unclaimed
                            - pending
                            - proved
                            - expired
                            - canceled
                        claimId:
                          anyOf:
                            - type: string
                            - type: 'null'
                        verificationId:
                          anyOf:
                            - type: string
                            - type: 'null'
                        claimStartedAt:
                          anyOf:
                            - type: string
                            - type: 'null'
                        claimEndedAt:
                          anyOf:
                            - type: string
                            - type: 'null'
                  counts:
                    type: object
                    required:
                      - unclaimed
                      - pending
                      - proved
                      - expired
                      - canceled
                    properties:
                      unclaimed:
                        type: number
                      pending:
                        type: number
                      proved:
                        type: number
                      expired:
                        type: number
                      canceled:
                        type: number
                  nextCursor:
                    anyOf:
                      - type: string
                      - type: 'null'
        '401':
          description: Response for status 401
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - docsUrl
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      docsUrl:
                        type: string

````