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

# List tenants

> List every tenant your organization holds, across every platform — vendor accounts discovered from your credentials and tenants you named yourself alike. Each row carries its rate budget: the provider's raw `caps` per time window, the `margin_pct` safety margin, and the `effective` budget computed from both. Filter with `platform_id`, or with `is_manual` to separate tenants you named from vendor accounts. Sort with `sort_by`/`order` (default newest-first), paginate with `limit`/`skip`. Readable by any organization member.



## OpenAPI

````yaml /openapi.json get /tenants
openapi: 3.1.0
info:
  title: GetDialed API
  version: 0.1.0
servers:
  - url: https://api.getdialed.ai/v1
    description: Production
security: []
paths:
  /tenants:
    get:
      tags:
        - tenants
      summary: List tenants
      description: >-
        List every tenant your organization holds, across every platform —
        vendor accounts discovered from your credentials and tenants you named
        yourself alike. Each row carries its rate budget: the provider's raw
        `caps` per time window, the `margin_pct` safety margin, and the
        `effective` budget computed from both. Filter with `platform_id`, or
        with `is_manual` to separate tenants you named from vendor accounts.
        Sort with `sort_by`/`order` (default newest-first), paginate with
        `limit`/`skip`. Readable by any organization member.
      operationId: list_tenants_tenants_get
      parameters:
        - name: platform_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Platform Id
        - name: is_manual
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: 'null'
            title: Is Manual
        - name: sort_by
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/TenantSortBy'
            default: created_at
        - name: order
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/Order'
            default: desc
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 500
            minimum: 1
            default: 100
            title: Limit
        - name: skip
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
            title: Skip
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Page_TenantResponse_'
        '401':
          description: Missing or invalid authentication
          content:
            application/json:
              example:
                detail: Authentication required
        '422':
          description: >-
            The request failed validation — an unknown sort field, a page size
            outside the permitted range, a filter pair that cannot both hold, an
            empty label, or a field other than `label` in a rename body.
          content:
            application/json:
              example:
                detail: is_manual=true and platform_id disagree
        '429':
          description: Rate limit exceeded — retry after the Retry-After header
          headers:
            Retry-After:
              description: Seconds to wait before retrying
              schema:
                type: integer
          content:
            application/json:
              example:
                detail: 'Rate limit exceeded: 100 per 1 minute'
      security:
        - APIKeyHeader: []
        - HTTPBearer: []
components:
  schemas:
    TenantSortBy:
      type: string
      enum:
        - created_at
        - label
      title: TenantSortBy
      description: Allowed sort fields when listing tenants.
    Order:
      type: string
      enum:
        - asc
        - desc
      title: Order
      description: Sort direction for list endpoints that accept a `sort_by` field.
    Page_TenantResponse_:
      properties:
        items:
          items:
            $ref: '#/components/schemas/TenantResponse'
          type: array
          title: Items
        total:
          anyOf:
            - type: integer
            - type: 'null'
          title: Total
        limit:
          type: integer
          title: Limit
        skip:
          type: integer
          title: Skip
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
      type: object
      required:
        - items
        - limit
        - skip
      title: Page[TenantResponse]
    TenantResponse:
      properties:
        id:
          type: string
          title: Id
        org_id:
          type: string
          title: Org Id
        platform_id:
          type: string
          title: Platform Id
        label:
          type: string
          title: Label
        is_manual:
          type: boolean
          title: Is Manual
        status:
          type: string
          title: Status
        buckets:
          additionalProperties:
            additionalProperties: true
            type: object
          type: object
          title: Buckets
        sync_status:
          type: string
          title: Sync Status
        counters_synced_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Counters Synced At
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Updated At
      type: object
      required:
        - id
        - org_id
        - platform_id
        - label
        - is_manual
        - status
        - buckets
        - sync_status
        - counters_synced_at
        - created_at
        - updated_at
      title: TenantResponse
      description: >-
        One tenant: the record that anchors a credential and its rate budget.


        A tenant is the thing your credentials belong to — a vendor account

        discovered from the credentials themselves (a Five9 Domain, for
        example), or

        a tenant you named yourself when the platform has nothing to discover. N

        credentials against the same tenant share ONE rate budget.


        Each rate bucket reports the provider's raw `caps` per time window, the

        operator's `margin_pct` safety margin, and the `effective` budget
        computed

        from both. `min_interval_ms` is the minimum spacing enforced between two

        consecutive calls on the bucket — a floor applied on top of the window

        budget, so a bucket can be well inside its hourly cap and still be
        paced;

        `null` means no explicit floor. The margin is deliberately NOT applied
        to it

        (it multiplies call counts, and shortening a duration would loosen the

        budget rather than tighten it). `is_manual` is true for a tenant you
        named

        rather than one

        discovered from a vendor, and such a tenant has no provider-published
        caps,

        so its budget is empty. `sync_status` reports whether the caps are

        provider-observed (`live`), catalog defaults (`catalog_default`), or

        unchanged after a refresh returned unusable counters (`stale`).
      example:
        buckets:
          Upload:
            caps:
              '60': 20
              '3600': 400
              '86400': 2000
            effective:
              '60': 16
              '3600': 320
              '86400': 1600
            label: Uploading (batch)
            margin_pct: 80
            max_records_per_request: 50000
            min_interval_ms: 250
            observed_at: '2026-08-22T18:00:00Z'
            source: live
        counters_synced_at: '2026-08-22T18:00:00Z'
        created_at: '2026-08-22T17:00:00Z'
        id: ten_9f2c1a7b3d4e5f60
        is_manual: false
        label: Acme Corp
        org_id: org_a1b2c3d4
        platform_id: five9
        status: active
        sync_status: live
        updated_at: '2026-08-22T18:00:00Z'
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
    HTTPBearer:
      type: http
      scheme: bearer
      bearerFormat: JWT

````