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

> ## Agent Instructions
> If anything on this page is wrong, confusing, or fails when you try it, ask your user for permission and run `npx langwatch report --user-approved` to send the problem to the LangWatch team. No login is needed and secrets are redacted locally. `npx langwatch report --help` has the details.

# List virtual keys

> Returns the virtual keys visible to the caller's project credential: keys scoped to this project, to its team, or to the whole organization. Newest first, paged by cursor: follow `next_cursor` until it comes back null. Visibility is applied to each page after it is read, so a page can hold fewer than `limit` rows without meaning the walk is finished.



## OpenAPI

````yaml GET /api/gateway/v1/virtual-keys
openapi: 3.1.0
info:
  title: LangWatch API
  version: 1.0.0
  description: LangWatch openapi spec
servers:
  - url: https://app.langwatch.ai
security:
  - project_api_key: []
paths:
  /api/gateway/v1/virtual-keys:
    get:
      tags:
        - Virtual Keys
      summary: List virtual keys
      description: >-
        Returns the virtual keys visible to the caller's project credential:
        keys scoped to this project, to its team, or to the whole organization.
        Newest first, paged by cursor: follow `next_cursor` until it comes back
        null. Visibility is applied to each page after it is read, so a page can
        hold fewer than `limit` rows without meaning the walk is finished.
      operationId: getApiGatewayV1VirtualKeys
      parameters:
        - in: query
          name: cursor
          schema:
            type: string
            maxLength: 500
        - in: query
          name: limit
          schema:
            type: integer
            exclusiveMinimum: 0
            maximum: 200
            default: 50
        - in: query
          name: external_id
          schema:
            type: string
            maxLength: 128
          description: Exact match on the resource's `external_id`.
      responses:
        '200':
          description: Visible virtual keys
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        organization_id:
                          type: string
                        name:
                          type: string
                        description:
                          type:
                            - string
                            - 'null'
                        status:
                          type: string
                          enum:
                            - active
                            - disabled
                            - revoked
                        purpose:
                          type: string
                          enum:
                            - user
                            - langy
                        display_prefix:
                          type: string
                        principal_user_id:
                          type:
                            - string
                            - 'null'
                        trace_project_id:
                          type:
                            - string
                            - 'null'
                          description: >-
                            The project this key's traces and costs land in,
                            which is the project its spend is attributed to. Not
                            a scope: it grants no access to the key. Decided
                            when the key is written and stored on it, so editing
                            what the key is scoped to never moves it; send
                            `trace_project_id` on an update to move it. Null
                            only on a key created before this was stored, in an
                            organization that had no governance project to fall
                            back to; those keys export no spans until they are
                            given a destination.
                        trace_project_archived:
                          type: boolean
                          description: >-
                            True when the project in `trace_project_id` has been
                            deleted. The key goes on sending its traces there,
                            so the data stays whole and reappears if the project
                            is restored, and traffic is never refused for it.
                            Nothing else on the key says the destination is
                            gone.
                        external_id:
                          type:
                            - string
                            - 'null'
                        metadata:
                          type: object
                          additionalProperties:
                            type: string
                        scopes:
                          type: array
                          items:
                            type: object
                            properties:
                              scope_type:
                                type: string
                                enum:
                                  - organization
                                  - team
                                  - project
                              scope_id:
                                type: string
                            required:
                              - scope_type
                              - scope_id
                        routing_policy_id:
                          type:
                            - string
                            - 'null'
                        routing_mode:
                          type: string
                          enum:
                            - none
                            - fallback_all
                            - policy
                        config: {}
                        revision:
                          type: string
                        created_at:
                          type: string
                          format: date-time
                        updated_at:
                          type: string
                          format: date-time
                        last_used_at:
                          type:
                            - string
                            - 'null'
                          format: date-time
                        revoked_at:
                          type:
                            - string
                            - 'null'
                          format: date-time
                        expires_at:
                          type:
                            - string
                            - 'null'
                          format: date-time
                          description: >-
                            When the key stops serving, or null for a key that
                            never expires. Requests presented after this moment
                            are refused with `virtual_key_expired`. `status`
                            stays `active` past the date on purpose: the three
                            status values are what clients switch on, and the
                            key stays editable so the date can be extended.
                      required:
                        - id
                        - organization_id
                        - name
                        - description
                        - status
                        - purpose
                        - display_prefix
                        - principal_user_id
                        - trace_project_id
                        - trace_project_archived
                        - external_id
                        - metadata
                        - scopes
                        - routing_policy_id
                        - routing_mode
                        - revision
                        - created_at
                        - updated_at
                        - last_used_at
                        - revoked_at
                        - expires_at
                  next_cursor:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Pass back as `cursor` for the next page. Null means the
                      walk is exhausted; a full page does NOT mean there is
                      more.
                required:
                  - data
                  - next_cursor
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      type:
                        type: string
                      code:
                        type: string
                      message:
                        type: string
                      meta:
                        type: object
                        additionalProperties: {}
                      trace_id:
                        type: string
                      span_id:
                        type: string
                    required:
                      - type
                      - code
                      - message
                required:
                  - error
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      type:
                        type: string
                      code:
                        type: string
                      message:
                        type: string
                      meta:
                        type: object
                        additionalProperties: {}
                      trace_id:
                        type: string
                      span_id:
                        type: string
                    required:
                      - type
                      - code
                      - message
                required:
                  - error
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      type:
                        type: string
                      code:
                        type: string
                      message:
                        type: string
                      meta:
                        type: object
                        additionalProperties: {}
                      trace_id:
                        type: string
                      span_id:
                        type: string
                    required:
                      - type
                      - code
                      - message
                required:
                  - error
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      type:
                        type: string
                      code:
                        type: string
                      message:
                        type: string
                      meta:
                        type: object
                        additionalProperties: {}
                      trace_id:
                        type: string
                      span_id:
                        type: string
                    required:
                      - type
                      - code
                      - message
                required:
                  - error
      security:
        - project_api_key: []
components:
  securitySchemes:
    project_api_key:
      type: apiKey
      in: header
      name: X-Auth-Token
      description: >-
        Project API key for sending traces and accessing project-scoped
        resources. Format: sk-lw-... (no underscore). Obtain one by creating a
        project via the Admin API or the LangWatch UI.

````