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

# AutoPilot for CI savings

> Measured savings of jobs AutoPilot for CI routed off their default runner, in total and per workflow. Each workflow AutoPilot made a decision for in the period is listed, also with no savings yet, with the share of its jobs that ran on each runner (largest first), its AutoPilot state (managed when it routed a job off the default runner, learning when every job lacked history, otherwise limited with the most common reason), the settings set in the workflow file (locked_keys) and the effective policy with where it comes from. Each job is compared with the p75 cost and wall time of the same job on its default runner over the 30 days before AutoPilot first routed it. When the job had fewer than 10 runs there, the baseline is estimated as the default runner's list price for the job's own measured run, with no time saving claimed (estimated_jobs); only when that is unknown too does the job count in no_baseline_jobs and add no savings. A job that would have run free on its default runner saves nothing. net_usd subtracts what the routing jobs themselves cost. Defaults to the last 30 days.



## OpenAPI

````yaml /api-reference/costgraph/openapi.json get /api/v1/tenant/ci/autopilot/savings
openapi: 3.0.0
info:
  description: Read and manage your CostGraph organization, spend, alerts, and settings.
  title: CostGraph API
  contact: {}
  version: '1.0'
servers:
  - url: https://api.costgraph.ai
security: []
tags:
  - name: ai
    x-group: AI
  - name: ai-serving
    x-group: AI serving
  - name: anomalies
    x-group: Anomalies
  - name: auth
    x-group: Auth
  - name: billing
    x-group: Billing
  - name: billing-export
    x-group: Billing export
  - name: budgets
    x-group: Budgets
  - name: ci
    x-group: CI
  - name: compute-recommendations
    x-group: Compute recommendations
  - name: config
    x-group: Config
  - name: context-graph
    x-group: Context graph
  - name: cost
    x-group: Cost
  - name: gpus
    x-group: GPUs
  - name: graphai
    x-group: Graph AI
  - name: integrations
    x-group: Integrations
  - name: invitations
    x-group: Invitations
  - name: kubernetes-clusters
    x-group: Kubernetes clusters
  - name: marketplace
    x-group: Marketplace
  - name: network
    x-group: Network
  - name: network-requests
    x-group: Network requests
  - name: notifications
    x-group: Notifications
  - name: oauth
    x-group: OAuth
  - name: oauth-clients
    x-group: OAuth clients
  - name: opencost
    x-group: OpenCost
  - name: organization
    x-group: Audit log
  - name: organizations
    x-group: Organizations
  - name: placement-alternatives
    x-group: Placement alternatives
  - name: reports
    x-group: Reports
  - name: settings
    x-group: Settings
  - name: sso
    x-group: Single sign-on
  - name: tenants
    x-group: Tenants
  - name: ticketing
    x-group: Ticketing
  - name: user
    x-group: Users
  - name: virtual-machines
    x-group: Virtual machines
  - name: virtual-tags
    x-group: Virtual tags
  - name: workflows
    x-group: Workflows
paths:
  /api/v1/tenant/ci/autopilot/savings:
    get:
      tags:
        - ci
      summary: AutoPilot for CI savings
      description: >-
        Measured savings of jobs AutoPilot for CI routed off their default
        runner, in total and per workflow. Each workflow AutoPilot made a
        decision for in the period is listed, also with no savings yet, with the
        share of its jobs that ran on each runner (largest first), its AutoPilot
        state (managed when it routed a job off the default runner, learning
        when every job lacked history, otherwise limited with the most common
        reason), the settings set in the workflow file (locked_keys) and the
        effective policy with where it comes from. Each job is compared with the
        p75 cost and wall time of the same job on its default runner over the 30
        days before AutoPilot first routed it. When the job had fewer than 10
        runs there, the baseline is estimated as the default runner's list price
        for the job's own measured run, with no time saving claimed
        (estimated_jobs); only when that is unknown too does the job count in
        no_baseline_jobs and add no savings. A job that would have run free on
        its default runner saves nothing. net_usd subtracts what the routing
        jobs themselves cost. Defaults to the last 30 days.
      parameters:
        - description: Tenant ID
          name: X-CostGraph-Tenant-ID
          in: header
          required: true
          schema:
            type: string
        - description: First day, YYYY-MM-DD
          name: from
          in: query
          schema:
            type: string
        - description: Day after the last day, YYYY-MM-DD
          name: to
          in: query
          schema:
            type: string
        - description: owner/name
          name: repository
          in: query
          schema:
            type: string
        - description: Workflow file
          name: workflow_path
          in: query
          schema:
            type: string
        - description: Runner provider the jobs were routed to
          name: provider
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/responses.SuccessResponse'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/db.CIAutopilotSavings'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    responses.SuccessResponse:
      type: object
      required:
        - message
        - status
      properties:
        data: {}
        message:
          type: string
          example: some message
        status:
          type: string
          example: success
    db.CIAutopilotSavings:
      type: object
      required:
        - total
        - workflows
      properties:
        total:
          $ref: '#/components/schemas/db.CIAutopilotSavingsLine'
        workflows:
          type: array
          items:
            $ref: '#/components/schemas/db.CIAutopilotSavingsLine'
    responses.ErrorResponse:
      type: object
      required:
        - message
        - status
      properties:
        message:
          type: string
          example: some message
        status:
          type: string
          example: error
    db.CIAutopilotSavingsLine:
      type: object
      required:
        - added_usd
        - added_wall_seconds
        - estimated_jobs
        - net_usd
        - no_baseline_jobs
        - repository
        - routed_jobs
        - routing_cost_usd
        - runners
        - saved_usd
        - saved_wall_seconds
        - workflow
        - workflow_path
      properties:
        added_usd:
          type: number
        added_wall_seconds:
          type: number
        autopilot:
          allOf:
            - $ref: '#/components/schemas/k8scluster.WorkloadAutopilot'
          nullable: true
        estimated_jobs:
          type: integer
        net_usd:
          type: number
        no_baseline_jobs:
          type: integer
        policy:
          type: string
          enum:
            - cheapest
            - balanced
            - fastest
          nullable: true
        policy_from:
          type: string
          enum:
            - git
            - workflow
            - repository
            - org
            - default
          nullable: true
        repository:
          type: string
        routed_jobs:
          type: integer
        routing_cost_usd:
          type: number
        runners:
          type: array
          items:
            $ref: '#/components/schemas/db.CIAutopilotRunnerShare'
        saved_usd:
          type: number
        saved_wall_seconds:
          type: number
        workflow:
          type: string
        workflow_path:
          type: string
    k8scluster.WorkloadAutopilot:
      type: object
      required:
        - locked_keys
        - reasons
        - state
        - via
      properties:
        last_change_at:
          type: string
          nullable: true
        locked_keys:
          type: array
          items:
            type: string
        paused_until:
          type: string
          nullable: true
        projected_savings_monthly:
          type: number
          nullable: true
        realised_savings_monthly:
          type: number
          nullable: true
        reasons:
          type: array
          items:
            type: string
        state:
          type: string
          enum:
            - managed
            - recommendation_only
            - preferences_not_applied
            - learning
            - paused
            - limited
            - rolled_back
            - disabled
        storage:
          type: boolean
        via:
          type: string
    db.CIAutopilotRunnerShare:
      type: object
      required:
        - label
        - provider
        - share
      properties:
        label:
          type: string
        provider:
          type: string
        share:
          type: number
  securitySchemes:
    BearerAuth:
      description: Enter "Bearer {token}"
      type: apiKey
      name: Authorization
      in: header

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.