> ## 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.

# Connect a sandbox provider

> Stores the settings CostGraph uses to start and stop sandboxes in the team's account with a sandbox provider, for AutoPilot CI jobs and workflow code changes. provider is an id from /integrations/sandbox/providers and env holds a value for each of its fields by env name; required fields must be set. The key is not checked here: a provider that refuses it when a sandbox starts marks the connection as needing to be reconnected. A tenant has one connection per provider, so connecting the same provider again replaces its settings and reactivates it. Settings are never returned. The caller must be an organization owner, admin or billing admin.



## OpenAPI

````yaml /api-reference/costgraph/openapi.json post /api/v1/integrations/sandbox/connect
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: sandboxes
    x-group: Sandboxes
  - 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/integrations/sandbox/connect:
    post:
      tags:
        - integrations
      summary: Connect a sandbox provider
      description: >-
        Stores the settings CostGraph uses to start and stop sandboxes in the
        team's account with a sandbox provider, for AutoPilot CI jobs and
        workflow code changes. provider is an id from
        /integrations/sandbox/providers and env holds a value for each of its
        fields by env name; required fields must be set. The key is not checked
        here: a provider that refuses it when a sandbox starts marks the
        connection as needing to be reconnected. A tenant has one connection per
        provider, so connecting the same provider again replaces its settings
        and reactivates it. Settings are never returned. The caller must be an
        organization owner, admin or billing admin.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/integrations.sandboxConnectRequest'
        description: Sandbox provider connection
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/responses.SuccessResponse'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/integrations.connectionResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
        '402':
          description: Payment Required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/middleware.SubscriptionRequiredResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    integrations.sandboxConnectRequest:
      type: object
      required:
        - provider
        - tenant_id
      properties:
        display_name:
          type: string
        env:
          type: object
          additionalProperties:
            type: string
        provider:
          type: string
        tenant_id:
          type: string
    responses.SuccessResponse:
      type: object
      required:
        - message
        - status
      properties:
        data: {}
        message:
          type: string
          example: some message
        status:
          type: string
          example: success
    integrations.connectionResponse:
      type: object
      properties:
        ci_history:
          $ref: '#/components/schemas/integrations.ciHistory'
        connection_id:
          type: string
        connection_modes:
          type: array
          items:
            type: string
            enum:
              - cost
              - metrics
              - workflows
        created_at:
          type: string
        display_name:
          type: string
        has_metrics_source:
          type: boolean
          nullable: true
        hosted:
          type: boolean
        id:
          type: string
        in_jobs:
          type: integer
        ingest_mode:
          type: string
          enum:
            - pull
            - push
            - telemetry
            - export
            - automation
            - ticketing
            - mcp
            - query
        last_sync_error:
          type: string
        last_synced_at:
          type: string
        needs_service_token:
          type: boolean
        provider:
          type: string
        provider_account_id:
          type: string
        recommendations_checked_at:
          type: string
        recommendations_status:
          type: string
        sandbox_provider:
          type: string
          nullable: true
        status:
          type: string
        tenant_id:
          type: string
        trialing_jobs:
          type: integer
        updated_at:
          type: string
        warnings:
          type: array
          items:
            type: string
    responses.ErrorResponse:
      type: object
      required:
        - message
        - status
      properties:
        message:
          type: string
          example: some message
        status:
          type: string
          example: error
    middleware.SubscriptionRequiredResponse:
      type: object
      required:
        - code
        - message
        - status
      properties:
        code:
          type: string
          enum:
            - subscription_required
            - free_plan_limit
            - reporting_paused
        message:
          type: string
          example: some message
        status:
          type: string
          example: error
    integrations.ciHistory:
      type: object
      properties:
        days_loaded:
          type: integer
        days_total:
          type: integer
  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.