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

# Read an expression back as chips

> Reports the field, operator and match value an expression is built from, so a rule written as CostQL can be shown and edited as chips. Clause holds the single chip and decomposed says whether there is one: a compound expression, a tag lookup and an empty match value all come back with decomposed false. Node holds the whole expression as a tree of clause, and, or and not nodes so a compound expression can be shown as chips as well, and is absent when any leaf has no chip form. An and or an or node lists every operand of its chain, so a || b || c is one or node with three children.



## OpenAPI

````yaml /api-reference/costgraph/openapi.json post /api/v1/tenant/virtual-tags/decompose
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-tags/decompose:
    post:
      tags:
        - virtual-tags
      summary: Read an expression back as chips
      description: >-
        Reports the field, operator and match value an expression is built from,
        so a rule written as CostQL can be shown and edited as chips. Clause
        holds the single chip and decomposed says whether there is one: a
        compound expression, a tag lookup and an empty match value all come back
        with decomposed false. Node holds the whole expression as a tree of
        clause, and, or and not nodes so a compound expression can be shown as
        chips as well, and is absent when any leaf has no chip form. An and or
        an or node lists every operand of its chain, so a || b || c is one or
        node with three children.
      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.DecomposeRequest'
        description: Expression to read back
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/responses.SuccessResponse'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/virtualtag.DecomposeResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    virtualtag.DecomposeRequest:
      type: object
      properties:
        expression:
          type: string
        scope:
          type: string
    responses.SuccessResponse:
      type: object
      required:
        - message
        - status
      properties:
        data: {}
        message:
          type: string
          example: some message
        status:
          type: string
          example: success
    virtualtag.DecomposeResponse:
      type: object
      properties:
        clause:
          $ref: '#/components/schemas/virtualtag.Clause'
        decomposed:
          type: boolean
        node:
          $ref: '#/components/schemas/virtualtag.Node'
    responses.ErrorResponse:
      type: object
      required:
        - message
        - status
      properties:
        message:
          type: string
          example: some message
        status:
          type: string
          example: error
    virtualtag.Clause:
      type: object
      properties:
        field:
          type: string
        match_value:
          type: string
        operator:
          type: string
    virtualtag.Node:
      type: object
      properties:
        children:
          type: array
          items:
            $ref: '#/components/schemas/virtualtag.Node'
        clause:
          $ref: '#/components/schemas/virtualtag.Clause'
        kind:
          type: string
  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.