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

# Ask an agent to rewrite a tag key's rules

> Queues one costgraph-ai run that rewrites the rules under the given tag keys. A tenant runs one proposal at a time, so a request made while a run is in flight answers that run rather than starting a second one, from each key's description, the saved suggestion context and the billing fields the tenant actually has spend on. Pass one key_id to recompile a single key. guidance is layered on top of each key's description rather than replacing it, unless the key has no description, in which case it becomes the whole brief. The run is asynchronous and writes nothing to any key: poll it with the returned id, and on done read the new suggestion group of kind regenerate from /virtual-tag-suggestions, which a person applies or ignores. Rules a person wrote by hand are never proposed over and never removed. Repeat presses for the same key set inside the same minute collapse into the run already in flight, which is what queued=false reports; the id still points at that run.



## OpenAPI

````yaml /api-reference/costgraph/openapi.json post /api/v1/tenant/virtual-tag-regenerations
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: cost
    x-group: Cost
  - name: gpus
    x-group: GPUs
  - name: graphai
    x-group: Graph AI
  - name: infracost
    x-group: Infracost
  - name: integrations
    x-group: Integrations
  - name: invitations
    x-group: Invitations
  - name: kubernetes-clusters
    x-group: Kubernetes clusters
  - name: marketplace
    x-group: Marketplace
  - 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: service-map
    x-group: Service map
  - name: settings
    x-group: Settings
  - name: sso
    x-group: Single sign-on
  - name: tenants
    x-group: Tenants
  - 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/virtual-tag-regenerations:
    post:
      tags:
        - virtual-tags
      summary: Ask an agent to rewrite a tag key's rules
      description: >-
        Queues one costgraph-ai run that rewrites the rules under the given tag
        keys. A tenant runs one proposal at a time, so a request made while a
        run is in flight answers that run rather than starting a second one,
        from each key's description, the saved suggestion context and the
        billing fields the tenant actually has spend on. Pass one key_id to
        recompile a single key. guidance is layered on top of each key's
        description rather than replacing it, unless the key has no description,
        in which case it becomes the whole brief. The run is asynchronous and
        writes nothing to any key: poll it with the returned id, and on done
        read the new suggestion group of kind regenerate from
        /virtual-tag-suggestions, which a person applies or ignores. Rules a
        person wrote by hand are never proposed over and never removed. Repeat
        presses for the same key set inside the same minute collapse into the
        run already in flight, which is what queued=false reports; the id still
        points at that run.
      parameters:
        - description: Tenant ID
          name: X-CostGraph-Tenant-ID
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/virtualtag.RegenerateKeysRequest'
        description: Tag keys to rewrite
        required: true
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/responses.SuccessResponse'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/virtualtag.RegenerationRun'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    virtualtag.RegenerateKeysRequest:
      type: object
      properties:
        guidance:
          type: string
        key_ids:
          type: array
          items:
            type: string
    responses.SuccessResponse:
      type: object
      required:
        - message
        - status
      properties:
        data: {}
        message:
          type: string
          example: some message
        status:
          type: string
          example: success
    virtualtag.RegenerationRun:
      type: object
      properties:
        id:
          type: string
        keys:
          type: array
          items:
            type: string
        queued:
          type: boolean
    responses.ErrorResponse:
      type: object
      required:
        - message
        - status
      properties:
        message:
          type: string
          example: some message
        status:
          type: string
          example: error
  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.