> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.usegrade.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Move a creator between campaigns

> Move an existing campaign creator and their history to another campaign in your agency.

## POST /sdk/v1/campaign-creators/:campaignCreatorRecordId/move

Moves a creator's existing campaign membership to another campaign in your
agency, using the same behavior as moving a creator in the Grade platform.

All requests require `X-Application-Id`, `X-Api-Key`, and the
`campaigns:write` API key scope. The agency comes from your credentials;
do not include `agencyId` in the request.

### Path parameter

* `campaignCreatorRecordId` (required): the campaign creator record to move.
  Get this value from the [v2 campaign creator list](/campaign-creators/list)
  or [v1 campaign creator list](/campaign-creators/list-v1). Use
  `includeHidden=true` when listing creators to find a hidden record.

### Body

* `destinationCampaignId` (required): a non-empty string identifying an
  ongoing (`ONGOING`) campaign in the same agency. Get the campaign ID from
  [List campaigns](/campaigns).

Both IDs accept 1–128 characters after trimming surrounding whitespace.

### Example request

```bash theme={null}
curl -sS "$BASE_URL/sdk/v1/campaign-creators/CCR_123/move" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "X-Application-Id: $APP_ID" \
  -H "X-Api-Key: $API_KEY" \
  -d '{"destinationCampaignId": "camp_summer_launch"}'
```

### Response

```json theme={null}
{
  "success": true,
  "data": {
    "campaignCreatorRecordId": "CCR_123",
    "sourceCampaignId": "camp_spring_launch",
    "destinationCampaignId": "camp_summer_launch",
    "creatorProfileId": "cp_123"
  }
}
```

### Move behavior

* The `campaignCreatorRecordId` and linked media IDs stay the same.
* The creator's media, contract history, payouts, payout approvals, and
  associated campaign history follow the membership to the destination.
  Creators with existing payments can be moved.
* Existing contract terms and visibility are retained. If the campaigns use
  different effective timezones, future calendar pay-cycle dates are
  realigned to the destination timezone, as in the platform.
* A completed source campaign is allowed; the destination must be ongoing.
* The source and destination campaign summaries are refreshed after the move.
* The move does not merge memberships. An existing active creator record in
  the destination returns `409`.

Repeating the request after a successful move returns `400` because the
creator is already assigned to the destination. If a response is lost, check
the destination's creator list for the same `campaignCreatorRecordId`.

### Common errors

* `400`: an ID is missing or invalid, the request includes `agencyId`, the
  destination is the current campaign, or the destination is not ongoing
* `401`: missing or invalid SDK credentials
* `403`: the API key lacks `campaigns:write`
* `404`: the creator record or either campaign is deleted, missing, or
  unavailable to your agency
* `409`: the creator already has an active record in the destination campaign

Missing and cross-agency resources return the same not-found response:

```json theme={null}
{
  "success": false,
  "message": "Creator record or destination campaign not found"
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.