---
title: "Update a variant"
method: PATCH
path: "/api/v1/variants/{id}"
tags: ["Variants"]
---

# Update a variant

`PATCH /api/v1/variants/{id}`

## Request

- Base URL: `https://app.convertflow.co`
- URL: `https://app.convertflow.co/api/v1/variants/{id}`
- Auth: HTTP bearer

Renames the variant and/or changes how it triggers. Behavior changes are saved as unpublished draft changes — call POST /variants/{id}/publish to push them live. Traffic is set via /campaigns/{id}/traffic_split. Requires variants:write.

## Request body

- object
  - `name` string
  - `behavior` object
    - `trigger_type` 'exit' | 'scroll' | 'delayed' | 'click' | 'cart' | 'prehook' | 'two-tap' | 'prompt'
    - `delay` integer: Seconds before a delayed trigger fires
    - `scroll` integer: Scroll percentage for the scroll trigger
    - `exit_delay` integer
    - `aggressive` 'true' | 'minutes' | 'false': Show again after dismissal: true, minutes (see minutes_hide), false
    - `hide` integer: Days to hide after dismissal
    - `minutes_hide` integer

## Response `200`

variant updated as a draft

- object
  - `id` integer
  - `campaign_id` integer
  - `name` string
  - `variation` string
  - `percentage` integer, nullable
  - `color` string
  - `screenshot` unknown
  - `score` integer
  - `score_field` unknown
  - `unpublished` boolean
  - `building` boolean
  - `build_failed` boolean
  - `behavior` object
    - `trigger_type` string
    - `delay` integer
    - `scroll` unknown
    - `exit_delay` unknown
    - `aggressive` string
    - `hide` integer
    - `minutes_hide` integer
  - `steps` unknown[]
    - unknown
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `has_custom_code` boolean

## Other responses

- `422`: invalid behavior value

---

[API](https://skmtc.dev/convertflow/apis/convertflow-api.md) - [All operations](https://skmtc.dev/convertflow/apis/convertflow-api/llms.txt) - [OpenAPI document](https://skmtc.dev/convertflow/apis/convertflow-api/revisions/9a45e0736b68?raw)
