---
updatedAt: 2026-08-24T09:14:57.000Z
agentTools:
  projectIndex: https://developers.vibe.co/llms.txt
---

# Duplicate a campaign

**Scopes:**
`campaigns:write`
<br>*Rate limits*:<br>Burst: `2/s`<br>Steady: `30/m`


# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "paths": {
    "/campaigns/{campaign_id}/duplicate": {
      "post": {
        "operationId": "duplicateCampaign",
        "parameters": [
          {
            "name": "campaign_id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "account_id",
            "required": false,
            "in": "query",
            "description": "Required only for embedded apps.",
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CampaignDuplicateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Campaign duplicated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CampaignDuplicate"
                }
              }
            }
          },
          "400": {
            "description": "Bad request error response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "missingApiKey": {
                    "summary": "Missing API key",
                    "value": {
                      "error": {
                        "type": "validation",
                        "message": "Missing API Key",
                        "status": 400,
                        "detail": null,
                        "request_id": "req_8f3a4b2c",
                        "doc_url": null
                      }
                    }
                  },
                  "validationError": {
                    "summary": "Validation error",
                    "value": {
                      "error": {
                        "type": "validation",
                        "message": "Validation error",
                        "status": 400,
                        "detail": {
                          "validation": [
                            "id must be a string"
                          ]
                        },
                        "request_id": "req_8f3a4b2c",
                        "doc_url": null
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized error response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalidApiKey": {
                    "summary": "Invalid API key",
                    "value": {
                      "error": {
                        "type": "invalid_token",
                        "message": "Unauthorized",
                        "status": 401,
                        "detail": null,
                        "request_id": "req_8f3a4b2c",
                        "doc_url": "https://developers.vibe.co/errors/invalid-token"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope error response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "insufficientScope": {
                    "summary": "Missing required scope",
                    "value": {
                      "error": {
                        "type": "insufficient_scope",
                        "message": "Missing required scope",
                        "status": 403,
                        "detail": {
                          "required": "campaigns:write",
                          "granted": [
                            "test"
                          ]
                        },
                        "request_id": "req_8f3a4b2c",
                        "doc_url": "https://developers.vibe.co/reference/oauth2token"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Campaign not found"
          }
        },
        "summary": "Duplicate a campaign",
        "tags": [
          "Campaigns"
        ],
        "x-rate-limit": {
          "rps": 2,
          "rpm": 30
        },
        "x-scopes": [
          "campaigns:write"
        ],
        "description": "**Scopes:**\n`campaigns:write`\n<br>*Rate limits*:<br>Burst: `2/s`<br>Steady: `30/m`\n"
      }
    }
  },
  "info": {
    "title": "Vibe Public API",
    "description": "Vibe Public API revision 2026-06-01",
    "version": "2026-06-01",
    "contact": {}
  },
  "tags": [
    {
      "name": "Campaigns",
      "description": "A Campaign is a goal-oriented container for one or more Strategies. Campaigns carry the optimization goal, attribution window, and lifecycle state. Strategies under a campaign carry the budget, schedule, targeting, and creative associations.\n\nCampaigns are created in `DRAFT` status and published either with the publish endpoint or the `PUBLISH` lifecycle action. Once published, the `PAUSE` and `ACTIVATE` actions toggle delivery.\n\n> ⚠️ **Gotcha — campaigns are mostly immutable after publish**\n>\n> While in `DRAFT`, you can update `name`, `goal`, `attribution_window`, and `optimization_goal`. After `PUBLISH`, only `active` is mutable, and only a `DRAFT` campaign can be deleted. To change anything else, create a new campaign — the original can only be paused while it is still running, since `PAUSE` is rejected once it has passed its end date."
    }
  ],
  "servers": [
    {
      "url": "https://api.vibe.co",
      "description": "Production API"
    }
  ],
  "components": {
    "securitySchemes": {
      "bearer": {
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "type": "http"
      }
    },
    "schemas": {
      "ErrorDetail": {
        "type": "object",
        "properties": {
          "required": {
            "type": "string",
            "example": "audiences:write"
          },
          "granted": {
            "example": [
              "audiences:read",
              "reporting:read"
            ],
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "required",
          "granted"
        ]
      },
      "ApiError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "insufficient_scope",
              "invalid_token",
              "validation",
              "internal_error"
            ]
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number",
            "example": 403
          },
          "detail": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorDetail"
              }
            ]
          },
          "request_id": {
            "type": "string",
            "example": "req_8f3a4b2c"
          },
          "doc_url": {
            "type": "string",
            "example": "https://developers.vibe.co/reference/oauth2token",
            "nullable": true
          }
        },
        "required": [
          "type",
          "message",
          "status",
          "request_id"
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ApiError"
          }
        },
        "required": [
          "error"
        ]
      },
      "CampaignGoal": {
        "type": "string",
        "enum": [
          "AWARENESS",
          "INSTALL",
          "TRAFFIC",
          "RETARGETING",
          "SALES",
          "LEADS",
          "ABM"
        ]
      },
      "OptimizationGoalType": {
        "type": "string",
        "enum": [
          "COST_PER_SESSION",
          "COST_PER_LEAD",
          "COST_PER_CALL",
          "COST_PER_PURCHASE",
          "ROAS",
          "CPM",
          "COST_PER_INSTALL",
          "COST_PER_UNIQUE_HOUSEHOLD",
          "COST_PER_UNIQUE_COMPANY"
        ]
      },
      "OptimizationTarget": {
        "type": "object",
        "properties": {
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OptimizationGoalType"
              }
            ]
          },
          "value": {
            "type": "number",
            "minimum": 1,
            "description": "Target value in USD (max 2 decimals)"
          }
        },
        "required": [
          "type",
          "value"
        ]
      },
      "AttributionWindow": {
        "type": "string",
        "enum": [
          "TWELVE_HOURS",
          "ONE_DAY",
          "FORTY_EIGHT_HOURS",
          "SEVENTY_TWO_HOURS",
          "SEVEN_DAYS",
          "THIRTY_DAYS"
        ]
      },
      "BudgetType": {
        "type": "string",
        "enum": [
          "DAILY",
          "GLOBAL"
        ]
      },
      "IncludeExcludeList": {
        "type": "object",
        "properties": {
          "include": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "exclude": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "GeoTargeting": {
        "type": "object",
        "properties": {
          "regions": {
            "$ref": "#/components/schemas/IncludeExcludeList"
          },
          "cities": {
            "$ref": "#/components/schemas/IncludeExcludeList"
          },
          "metro_codes": {
            "$ref": "#/components/schemas/IncludeExcludeList"
          },
          "zip_codes": {
            "$ref": "#/components/schemas/IncludeExcludeList"
          }
        }
      },
      "TvInventoryType": {
        "type": "string",
        "enum": [
          "APPS_AND_CHANNELS",
          "LIVE_SPORTS"
        ]
      },
      "InventoryTargeting": {
        "type": "object",
        "properties": {
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TvInventoryType"
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "exclude": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "TargetingAgeRange": {
        "type": "string",
        "enum": [
          "RANGE_18_20",
          "RANGE_21_24",
          "RANGE_25_34",
          "RANGE_35_44",
          "RANGE_45_54",
          "RANGE_55_64",
          "RANGE_65_MORE"
        ]
      },
      "TargetingGender": {
        "type": "string",
        "enum": [
          "MALE",
          "FEMALE"
        ]
      },
      "TargetingDevice": {
        "type": "string",
        "enum": [
          "TV",
          "TABLET",
          "MOBILE"
        ]
      },
      "IncludeExcludeUuid": {
        "type": "object",
        "properties": {
          "include": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "exclude": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "AudienceTargeting": {
        "type": "object",
        "properties": {
          "upload": {
            "$ref": "#/components/schemas/IncludeExcludeUuid"
          }
        }
      },
      "TimeRangePreset": {
        "type": "string",
        "enum": [
          "CUSTOM",
          "ANY_TIME_ANY_DAY",
          "PRIMETIME",
          "AFTER_WORK",
          "WORK_HOURS",
          "SLEEPING_TIME",
          "WEEKEND",
          "WORK_DAYS"
        ]
      },
      "DaypartingRange": {
        "type": "object",
        "properties": {
          "start": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10079
          },
          "end": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10079
          }
        },
        "required": [
          "start",
          "end"
        ]
      },
      "Dayparting": {
        "type": "object",
        "properties": {
          "preset": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TimeRangePreset"
              }
            ]
          },
          "custom_ranges": {
            "description": "Minutes from midnight Monday (0–10079). Only used when preset=CUSTOM.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DaypartingRange"
            }
          }
        }
      },
      "Targeting": {
        "type": "object",
        "properties": {
          "geo": {
            "$ref": "#/components/schemas/GeoTargeting"
          },
          "inventory": {
            "$ref": "#/components/schemas/InventoryTargeting"
          },
          "age_ranges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TargetingAgeRange"
            }
          },
          "genders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TargetingGender"
            }
          },
          "devices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TargetingDevice"
            }
          },
          "interests": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "audiences": {
            "$ref": "#/components/schemas/AudienceTargeting"
          },
          "dayparting": {
            "$ref": "#/components/schemas/Dayparting"
          }
        }
      },
      "CampaignDuplicateStrategy": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 3,
            "maxLength": 100
          },
          "active": {
            "type": "boolean"
          },
          "budget": {
            "type": "integer",
            "minimum": 1,
            "description": "Budget in USD"
          },
          "budget_type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BudgetType"
              }
            ]
          },
          "starts_at": {
            "type": "string",
            "format": "date-time"
          },
          "ends_at": {
            "type": "string",
            "nullable": true,
            "format": "date-time"
          },
          "targeting": {
            "$ref": "#/components/schemas/Targeting"
          },
          "creative_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "id": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "CampaignDuplicateCreative": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 150
          }
        }
      },
      "CampaignDuplicateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 10,
            "maxLength": 100
          },
          "goal": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CampaignGoal"
              }
            ]
          },
          "attribution_window": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AttributionWindow"
              }
            ]
          },
          "optimization_goal": {
            "$ref": "#/components/schemas/OptimizationTarget"
          },
          "active": {
            "type": "boolean"
          },
          "strategies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CampaignDuplicateStrategy"
            }
          },
          "creatives": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CampaignDuplicateCreative"
            }
          }
        }
      },
      "CampaignDuplicate": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "id"
        ]
      }
    }
  },
  "security": [
    {
      "bearer": []
    }
  ]
}
```