# Dry run a virtual tag definition

Source: https://docs.levelfour.ai/api-reference/tags/post-tags-virtual-preview


## POST /api/v1/tags/virtual/preview

### Authentication

Send `Authorization: Bearer <token>`.

### Request body

Required. Content type `application/json`.

- `name` (string, default ``)
- `description` (string, default ``)
- `effective_from` (string, nullable): First billing month the tag applies to, 'YYYY-MM'. Null means the current month.
- `can_override` (boolean, default `false`)
- `collapsed_keys` (array of object)
  - `source` (object, required)
    - `origin` (one of `provider`, `virtual`, required)
    - `key` (string, required): A provider key name, or a virtual key id or name.
  - `scope` (object, nullable)
    - `providers` (array of one of `aws`, `gcp`, `digitalocean`)
  - `value_prefix` (string, default ``)
- `configs` (array of object)
  - `filter` (object, required)
    - `rules` (array of object)
      - `providers` (array of one of `aws`, `gcp`, `digitalocean`)
      - `conditions` (array of object)
  - `time_frame` (object, nullable)
    - `start` (date string, nullable)
    - `end` (date string, nullable)
  - `assign` (object, required)
    - Variant 1: ValueAssign
      - `type` (`value`, required)
      - `value` (string, required)
    - Variant 2: PercentAssign
      - `type` (`percent`, required)
      - `splits` (array of object)
    - Variant 3: CostBasedAssign
      - `type` (`cost_based`, required)
      - `input_filter` (object, required)
      - `source` (object, required)
- `start` (date string, nullable)
- `end` (date string, nullable)

### Responses

#### 200: Successful Response

- `success` (boolean, default `true`)
- `timestamp` (date-time string)
- `data` (object, required)
  - `window` (object, required)
    - `start` (date string, required)
    - `end` (date string, required)
  - `total_spend` (number, required)
  - `unallocated_spend` (number, required)
  - `shadowed_spend` (number, required)
  - `values` (array of object, required)
    - `name` (string, required)
    - `spend` (number, required)
    - `resource_count` (integer, required)
    - `sample_resources` (array of string, required)

#### Errors

- `400`: Bad Request
- `401`: Authentication Error
- `403`: Authorization Error
- `404`: Not Found
- `409`: Conflict
- `422`: Validation Error
- `429`: Rate Limit Exceeded
- `500`: Internal Server Error

Body of `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`:

- `success` (`false`, required)
- `error` (object, required)
  - `code` (string, required)
  - `message` (string, required)
  - `details` (any)
- `timestamp` (date-time string, required)
