# POST /v1/influencers/:influencerId/clone (/docs/api/reference/influencers/clone-influencer)



<Endpoint method="POST" path="/v1/influencers/:influencerId/clone" scope="influencers:write" phase="1" />

Clones an existing influencer. The source's identity fields and reference images are copied into a new row (same project), and an `influencer_create` job re-renders the reference image set. Async — poll the returned job.

The source id is a path parameter, not a body field. There's no "clone from image URL" mode — to seed an identity from a photo, call [create](/docs/api/reference/influencers/create-influencer) with `referenceImages.assetIds`.

## Path parameters [#path-parameters]

<Parameters
  rows="[
  { name: 'influencerId', type: 'string (uuid)', required: true, description: 'The source influencer. Must belong to your org.' },
]"
/>

## Body [#body]

<Parameters
  title="Body"
  rows="[
  { name: 'name', type: 'string', required: true, description: 'Display name for the clone (1-128).' },
  { name: 'newInfluencerId', type: 'string (uuid)', description: 'Your id for idempotency. Omit to let us generate one.' },
  { name: 'overrides', type: 'object', description: 'Partial identity fields applied on top of the source. Same shape as the create body (excluding `name`, `influencerId`, `referenceImages`).' },
]"
/>

Body is strict — unknown fields return `VALIDATION`.

## Request [#request]

<Tabs items="['curl', 'TypeScript', 'Python']">
  <Tab value="curl">
    ```sh title="terminal"
    curl -X POST https://api.layers.com/v1/influencers/{influencerId}/clone \
      -H "X-Api-Key: $LAYERS_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Ava Chen (EU)",
        "overrides": { "vibe": "sharper, more deadpan" }
      }'
    ```
  </Tab>

  <Tab value="TypeScript">
    ```ts title="clone-influencer.ts"
    const res = await fetch(
      `https://api.layers.com/v1/influencers/${influencerId}/clone`,
      {
        method: 'POST',
        headers: {
          'X-Api-Key': process.env.LAYERS_API_KEY!,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          name: 'Ava Chen (EU)',
          overrides: { style: 'European minimalist' },
        }),
      },
    );
    const { jobId, influencerId: cloneId } = await res.json();
    ```
  </Tab>

  <Tab value="Python">
    ```py title="clone_influencer.py"
    import os, httpx

    r = httpx.post(
        f"https://api.layers.com/v1/influencers/{influencer_id}/clone",
        headers={
            "X-Api-Key": os.environ["LAYERS_API_KEY"],
            "Content-Type": "application/json",
        },
        json={"name": "Ava Chen (UK)"},
    )
    job = r.json()
    ```
  </Tab>
</Tabs>

## Responses [#responses]

<Response status="202" description="Clone accepted. The new row exists with status=pending; poll the job.">
  ```json
  {
    "jobId": "job_01HY0AB...",
    "kind": "influencer_create",
    "status": "running",
    "influencerId": "inf_01HY0AB...",
    "locationUrl": "/v1/jobs/job_01HY0AB..."
  }
  ```
</Response>

<Response status="404" description="Source influencer not in this org.">
  ```json
  {
    "error": {
      "code": "NOT_FOUND",
      "message": "Influencer not found.",
      "requestId": "req_..."
    }
  }
  ```
</Response>

<Response status="409" description="newInfluencerId already exists.">
  ```json
  {
    "error": {
      "code": "CONFLICT",
      "message": "Influencer with this id already exists.",
      "requestId": "req_..."
    }
  }
  ```
</Response>

## Notes [#notes]

* **Clone lives in the source's project.** The clone inherits `projectId` from the source. To move an identity across projects, create a new influencer in the target project.
* **Async, not sync.** The job envelope is identical to [create](/docs/api/reference/influencers/create-influencer) — the workflow re-renders the identity.
* **Reference images come along.** Existing reference image metadata is copied to the clone's `attributes` as a starting set; the rendered images on the clone are produced by the job.

## Errors [#errors]

| Code              | When                                                     |
| ----------------- | -------------------------------------------------------- |
| `VALIDATION`      | Missing `name`, unknown field in `overrides`, bad types. |
| `NOT_FOUND`       | Source influencer not in this org.                       |
| `CONFLICT`        | `newInfluencerId` collides.                              |
| `FORBIDDEN_SCOPE` | Key lacks `influencers:write`.                           |

## See also [#see-also]

* [Create from scratch](/docs/api/reference/influencers/create-influencer)
* [Patch the clone](/docs/api/reference/influencers/patch-influencer)
* [The jobs envelope](/docs/api/concepts/jobs)
