# DELETE /v1/influencers/:influencerId (/docs/api/reference/influencers/delete-influencer)



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

Soft-delete. The influencer is archived: it disappears from [list](/docs/api/reference/influencers/list-influencers), [`GET`](/docs/api/reference/influencers/get-influencer) returns `404`, and [`PATCH`](/docs/api/reference/influencers/patch-influencer) / [`clone`](/docs/api/reference/influencers/clone-influencer) / [`reference-images`](/docs/api/reference/influencers/reference-images) all return `404`. Content that already references the influencer keeps working.

There is no hard-delete through the partner surface.

## Path parameters [#path-parameters]

<Parameters
  rows="[
  { name: 'influencerId', type: 'string (uuid)', required: true, description: 'The influencer id.' },
]"
/>

## Body [#body]

<Parameters
  title="Body (optional)"
  rows="[
  { name: 'reason', type: 'string (max 1024)', description: 'Audit note. Persisted under `attributes.deletion` for compliance follow-up.' },
]"
/>

An empty body is accepted. If you send JSON, it must parse and match the schema.

## Request [#request]

<Tabs items="['curl', 'TypeScript', 'Python']">
  <Tab value="curl">
    ```sh title="terminal"
    curl -X DELETE https://api.layers.com/v1/influencers/{influencerId} \
      -H "X-Api-Key: $LAYERS_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{ "reason": "Partner requested deletion." }'
    ```
  </Tab>

  <Tab value="TypeScript">
    ```ts title="delete-influencer.ts"
    const res = await fetch(
      `https://api.layers.com/v1/influencers/${influencerId}`,
      {
        method: 'DELETE',
        headers: {
          'X-Api-Key': process.env.LAYERS_API_KEY!,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({ reason: 'Customer requested removal.' }),
      },
    );
    const result = await res.json();
    ```
  </Tab>

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

    r = httpx.request(
        "DELETE",
        f"https://api.layers.com/v1/influencers/{influencer_id}",
        headers={
            "X-Api-Key": os.environ["LAYERS_API_KEY"],
            "Content-Type": "application/json",
        },
        json={"reason": "No longer needed."},
    )
    result = r.json()
    ```
  </Tab>
</Tabs>

## Responses [#responses]

<Response status="200" description="Deleted.">
  ```json
  {
    "influencerId": "inf_01HXZ9...",
    "status": "deleted",
    "deletedAt": "2026-04-18T09:21:00Z"
  }
  ```
</Response>

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

## Notes [#notes]

<Callout type="info">
  Deletion is soft-only. The row stays in the database with
  `is_archived = true` for audit, but is invisible to every partner read.
  There is no way to undelete through the partner API.
</Callout>

* **Existing content is unaffected.** Containers and scheduled posts that already carry this `influencerId` continue to work — they don't check liveness on every read.
* **Reason is persisted.** If provided, it's stored on `attributes.deletion` with the calling API key id and timestamp, for your audit trail.

## Errors [#errors]

| Code              | When                                            |
| ----------------- | ----------------------------------------------- |
| `NOT_FOUND`       | Influencer not in this org, or already deleted. |
| `VALIDATION`      | Body present but malformed.                     |
| `FORBIDDEN_SCOPE` | Key lacks `influencers:write`.                  |

## See also [#see-also]

* [List influencers](/docs/api/reference/influencers/list-influencers)
* [Create a replacement](/docs/api/reference/influencers/create-influencer)
