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

# Get workspace analytics

> Get filtered workspace cost, request, and token aggregates.

<Note>This endpoint requires a management API key with `analytics:read`.</Note>

Filter by date, request label, API key, end user, model, provider, endpoint, credential source, or outcome. Results are grouped by date, model, provider, and endpoint with stable pagination.

Ranges are bounded to the last 30 completed UTC days and at most 10,000 source requests.


## OpenAPI

````yaml GET /analytics
openapi: 3.0.3
info:
  title: Phaseo Gateway API
  description: >-
    A gateway API for accessing various AI models with OpenAI-compatible
    endpoints.
  version: 1.0.0
  contact:
    name: Phaseo
    url: https://phaseo.app
    email: danielbutler500@gmail.com
servers:
  - url: https://api.phaseo.app/v1
security:
  - BearerAuth: []
tags:
  - name: Gateway
    description: Core Phaseo Gateway operations.
paths:
  /analytics:
    get:
      tags:
        - Gateway
      summary: Get workspace analytics
      description: >-
        Returns cost, request, and token aggregates grouped by date, model,
        provider, and endpoint for the last 30 completed UTC days.
      operationId: getActivityAlias
      parameters:
        - name: date
          in: query
          description: >-
            Filter by a single UTC date in the last 30 completed days
            (YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: label_key
          in: query
          description: >-
            Request-label key to include in the spend slice. Must be provided
            together with label_value.
          schema:
            type: string
            maxLength: 64
            pattern: ^[A-Za-z0-9_.:-]{1,64}$
        - name: label_value
          in: query
          description: >-
            Request-label value to include in the spend slice. Must be provided
            together with label_key.
          schema:
            type: string
            maxLength: 256
        - name: key_id
          in: query
          description: Filter by API key identifier.
          schema:
            type: string
        - name: end_user_id
          in: query
          description: Filter by application-defined end-user identifier.
          schema:
            type: string
            maxLength: 256
        - name: model
          in: query
          description: Filter by requested or routed canonical model slug.
          schema:
            $ref: '#/components/schemas/ModelId'
        - name: provider
          in: query
          description: Filter by provider slug.
          schema:
            type: string
            maxLength: 128
        - name: endpoint
          in: query
          description: Filter by gateway endpoint identifier.
          schema:
            type: string
            maxLength: 128
        - name: byok
          in: query
          description: Filter managed or BYOK traffic.
          schema:
            type: boolean
        - name: success
          in: query
          description: Filter successful or failed requests.
          schema:
            type: boolean
        - $ref: '#/components/parameters/Offset'
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 1000
      responses:
        '200':
          description: Retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsResponse'
        '400':
          description: Bad Request Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ModelId:
      type: string
      description: >-
        Model identifier. This is a runtime string so newly released models can
        be used without waiting for an SDK update.
      example: ai21/jamba-1.5-large
    AnalyticsResponse:
      type: object
      required:
        - data
        - total_count
        - offset
        - limit
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ActivityEntry'
        total_count:
          type: integer
          minimum: 0
        offset:
          type: integer
          minimum: 0
        limit:
          type: integer
          minimum: 1
          maximum: 1000
      additionalProperties: false
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        ok:
          type: boolean
          example: false
        error:
          oneOf:
            - type: string
            - type: object
              additionalProperties: true
          example: error_type
        message:
          type: string
          example: Human-readable error message
        description:
          type: string
          example: Additional error details.
        generation_id:
          type: string
          example: G-abc123
        status_code:
          type: integer
          example: 502
        error_type:
          type: string
          enum:
            - user
            - system
          example: system
        error_origin:
          type: string
          enum:
            - user
            - gateway
            - upstream
          example: upstream
        reason:
          type: string
          example: all_candidates_failed
        attempt_count:
          type: integer
          example: 2
        failed_providers:
          type: array
          items:
            type: string
          example:
            - google-ai-studio
            - openai
        failed_statuses:
          type: array
          items:
            type: integer
          example:
            - 403
            - 429
        upstream_error:
          $ref: '#/components/schemas/ErrorUpstreamError'
        failure_sample:
          type: array
          items:
            $ref: '#/components/schemas/ErrorFailureSampleItem'
        provider_failure_diagnostics:
          $ref: '#/components/schemas/ErrorProviderFailureDiagnostics'
        routing_diagnostics:
          $ref: '#/components/schemas/ErrorRoutingDiagnostics'
        provider_candidate_diagnostics:
          $ref: '#/components/schemas/ErrorProviderCandidateDiagnostics'
        provider_enablement:
          $ref: '#/components/schemas/ErrorProviderEnablementDiagnostics'
        missing_pricing_providers:
          type: array
          items:
            type: string
        provider_payment_required_provider:
          type: string
          example: openai
        provider_payment_required_support_notice:
          type: string
          example: >-
            Our upstream provider billing appears to be unavailable. If this
            persists, contact support.
        details:
          type: array
          items:
            type: object
            additionalProperties: true
      additionalProperties: true
    ActivityEntry:
      type: object
      required:
        - date
        - model
        - model_permaslug
        - endpoint_id
        - provider_name
        - usage
        - byok_usage_inference
        - requests
        - prompt_tokens
        - completion_tokens
        - reasoning_tokens
      properties:
        date:
          type: string
          format: date
          example: '2025-08-24'
        model:
          type: string
          example: openai/gpt-4.1
        model_permaslug:
          type: string
          example: openai/gpt-4.1-2025-04-14
        endpoint_id:
          type: string
          example: chat.completions
        provider_name:
          type: string
          example: OpenAI
        usage:
          type: number
          example: 0.015
        byok_usage_inference:
          type: number
          example: 0.012
        requests:
          type: integer
          example: 5
        prompt_tokens:
          type: integer
          example: 50
        completion_tokens:
          type: integer
          example: 125
        reasoning_tokens:
          type: integer
          example: 25
      additionalProperties: false
    ErrorUpstreamError:
      type: object
      properties:
        code:
          type: string
          nullable: true
          example: PERMISSION_DENIED
        message:
          type: string
          nullable: true
          example: The caller does not have permission.
        description:
          type: string
          nullable: true
        param:
          type: string
          nullable: true
    ErrorFailureSampleItem:
      type: object
      properties:
        provider:
          type: string
          nullable: true
        type:
          type: string
          nullable: true
        status:
          type: integer
          nullable: true
        upstream_error_code:
          type: string
          nullable: true
        upstream_error_message:
          type: string
          nullable: true
        upstream_error_description:
          type: string
          nullable: true
        upstream_error_param:
          type: string
          nullable: true
        upstream_payload_preview:
          type: string
          nullable: true
        retryable:
          type: boolean
          nullable: true
      additionalProperties: true
    ErrorProviderFailureDiagnostics:
      type: object
      properties:
        category:
          type: string
          enum:
            - credentials_not_configured
            - credentials_invalid_or_forbidden
            - provider_access_missing
            - region_or_project_restriction
            - model_unavailable_for_endpoint
            - rate_limited
            - server_error
        hint:
          type: string
        provider:
          type: string
          nullable: true
    ErrorRoutingDiagnostics:
      type: object
      properties:
        filterStages:
          type: array
          items:
            type: object
            properties:
              stage:
                type: string
              beforeCount:
                type: integer
              afterCount:
                type: integer
              droppedProviders:
                type: array
                items:
                  type: object
                  properties:
                    providerId:
                      type: string
                      nullable: true
                    reason:
                      type: string
                      nullable: true
                  additionalProperties: true
            additionalProperties: true
      additionalProperties: true
    ErrorProviderCandidateDiagnostics:
      type: object
      properties:
        totalProviders:
          type: integer
        supportsEndpointCount:
          type: integer
        candidateCount:
          type: integer
        droppedUnsupportedEndpoint:
          type: array
          items:
            type: string
        droppedMissingAdapter:
          type: array
          items:
            type: object
            properties:
              providerId:
                type: string
                nullable: true
              endpoint:
                type: string
                nullable: true
            additionalProperties: true
      additionalProperties: true
    ErrorProviderEnablementDiagnostics:
      type: object
      properties:
        capability:
          type: string
        providersBefore:
          type: array
          items:
            type: string
        providersAfter:
          type: array
          items:
            type: string
        dropped:
          type: array
          items:
            type: object
            properties:
              providerId:
                type: string
                nullable: true
              reason:
                type: string
                nullable: true
            additionalProperties: true
      additionalProperties: true
  parameters:
    Offset:
      name: offset
      in: query
      required: false
      description: Number of records to skip.
      schema:
        type: integer
        minimum: 0
        default: 0
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Bearer token authentication

````