---
deprecated: true
search:
  tags:
    - Mutations
    - POST
seo:
  description: >-
    Available on: Meta. Reference for the POST /mutations endpoint in the
    AdCrunch API.
sidebar:
  label: Start a mutation
  badge: POST
title: Start a mutation
type: openapi-operation
---
**Available on:** [![Meta](/providers/meta.svg)](https://docs.adcrunch.dev/connect/providers)

**Deprecated.** Each kind has its own route on the path of the object that it changes. That route sits under the tag of the object. For example, `meta_update_status` on a campaign is `PATCH /mutations/{advertiserId}/campaigns/{id}/status`. `meta_create_campaign` is `POST /mutations/{advertiserId}/campaigns`. `meta_copy_adset` is `POST /mutations/{advertiserId}/ad-groups/{id}/copies`. Use those routes. This route takes the same actions as those routes. It starts the same Mutations, and it answers the same way. AdCrunch will remove it.

Starts a change on a live advertiser and answers immediately.

The change does **not** happen during this request. The answer is `202`, and `Location` names the Mutation. Poll `GET /mutations/{id}` until it reports `complete` or `errored`. A Mutation is durable, so the id stays valid across retries and restarts.

A refused request starts nothing. AdCrunch refuses a body that does not match, an advertiser that is not yours, an advertiser with no usable connection, and an advertiser connected without write access before a Mutation exists. So a failed call leaves no row in the history.

**This operation checks the credential first and the body second.** A missing or unusable credential answers `401` even when the body is wrong as well.

A body that does not match answers `400` with `error` of `invalid_request`, and `issues` names each field.

A create and a copy never start delivery: the new object arrives **paused**. Send `PATCH …/status` with `ACTIVE` to start it.

This API cannot delete. To retire an object, send `meta_update_status` with `ARCHIVED`.

`POST /mutations`

**Deprecated.**
