# Manage campaigns

With the Remote Control API, you can create, update or delete you campaigns but also the variations of itself. A campaign is an aggregation of **variation groups**, which are themselves an aggregation of **variations**.\
The campaign architecture is the following :

```json
{
  "id": "c1",
  "name": "My campaign",
  "variation_groups": [
    {
      "id": "vg1",
      "name": "variation_group",
      "variations": [
        {
          "id": "v1",
          "name": "Variation 1"
        },
        {
          "id": "v2",
          "name": "Variation 2"
        }
      ]
    }
  ]
}
```

## List your campaigns

> 👍 Required scope : **campaign.list**

```curl
curl --location --request GET 'https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns?_page=1' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```

## Create a campaign

> 👍 Required scope : **campaign.create**

```curl
curl --location --request POST '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns' \
--header 'Authorization: Bearer {ACCESS_TOKEN}' \
--data-raw '{BODY}'
```

Replace *{BODY}* with the following json :

```json
{
    "project_id": "{PROJECT_ID}",
    "name": "New AB test",
    "description": "My new AB test",
    "type": "ab",
    "variation_groups": [
        {
            "name": "variation_group",
            "variations": [
                {
                    "name": "My variation 1",
                    "allocation": 50,
                    "reference": true,
                    "modifications": {
                        "value": {
                            "color": "blue"
                        }
                    }
                },
                {
                    "name": "My variation 2",
                    "allocation": 50,
                    "reference": false,
                    "modifications": {
                        "value": {
                            "color": "red"
                        }
                    }
                }
            ],
            "targeting": {
                "targeting_groups": [
                    {
                        "targetings": [
                            {
                                "operator": "CONTAINS",
                                "key": "isVIP",
                                "value": "true"
                            }
                        ]
                    }
                ]
            }
        }
    ],
    "scheduler": {
        "start_date": "2022-02-01 10:00:00",
        "stop_date": "2022-02-02 08:00:00",
        "timezone": "Europe/Paris"
    }
}
```

The previous example will create a campaign with type **ab**, with 2 variations returning the flag color **red** or **blue**. The targeting applied means that the context for the visitor should CONTAIN "isVIP" and its value must be "true".

### Create a new variation group in a campaign

```curl
curl --location --request POST '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups' \
--header 'Authorization: Bearer {ACCESS_TOKEN}' \
--data-raw '{BODY}'
```

Replace *{BODY}* with the same previous payload (variation\_group part) :

### Create a new variation in a variation group

```curl
curl --location --request POST '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups/{VARIATION_GROUP_ID}/variations' \
--header 'Authorization: Bearer {ACCESS_TOKEN}' \
--data-raw '{BODY}'
```

Replace *{BODY}* with the same previous payload (variation part) :

## View a campaign

> 👍 Required scope : **campaign.read**

```curl
curl --location --request GET '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```

### View variation groups of a campaign

```curl
curl --location --request GET '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```

### View a specific variation group

```curl
curl --location --request GET '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups/{VARIATION_GROUP_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```

### View variations of a variation group

```curl
curl --location --request GET '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups/{VARIATION_GROUP_ID}/variations' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```

### View a specific variation

```curl
curl --location --request GET '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups/{VARIATION_GROUP_ID}/variations/{VARIATION_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```

## Update a campaign

> 👍 Required scope : **campaign.update**

```curl
curl --location --request PATCH '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
--data-raw '{BODY}'
```

As you prefer, you can use the global campaign routes to edit the children variations, variation\_groups of your campaign or you can use the specific routes to updates them.

> ❗️ Be careful
>
> If you use the global campaign route to edit variations or variation groups, you have to put in the payload the **entire** sub collection of it, and don't forget to add the parameter **id** to each child.\
> If you don't do this, the entire sub-collection will be replaced and the old children will be erased or replaced.
>
> To avoid this, when you need to update a specific item in the variations for example, prefer to use the direct route to edit one variation.

### Update a specific variation group

```curl
curl --location --request PATCH '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups/{VARIATION_GROUP_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
--data-raw '{BODY}'
```

## Update a specific variation

```curl
curl --location --request PATCH '
https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups/{VARIATION_GROUP_ID}/variations/{VARIATION_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
--data-raw '{BODY}'
```

## Toggle a campaign

> 👍 Required scope : **campaign.toggle**

```curl
curl --location --request PATCH 'https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/toggle' \
--header 'Authorization: Bearer {ACCESS_TOKEN}' \
--data-raw '{
    "state": "active"
}'
```

> 📘 The different states are **active** , **paused** , **interrupted** .

## Delete a campaign

> 👍 Required scope : **campaign.delete**

> ❗️ Be careful, there is no confirmation step when you call these routes. It will delete it definitively.

```curl
curl --location --request DELETE 'https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```

### Delete a specific variation group

```curl
curl --location --request DELETE 'https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups/{VARIATION_GROUP_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```

### Delete a specific variation

```curl
curl --location --request DELETE 'https://api.flagship.io/v1/accounts/{ACCOUNT_ID}/account_environments/{ACCOUNT_ENVIRONMENT_ID}/campaigns/{CAMPAIGN_ID}/variation_groups/{VARIATION_GROUP_ID}/variations/{VARIATION_ID}' \
--header 'Authorization: Bearer {ACCESS_TOKEN}'
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.abtasty.com/server-side/integrations/flagship-remote-control-api/manage-campaigns.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
