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

# Remove Family Member

> Remove a member from a family and regenerate its cast

Removes a member from a family you own, then regenerates the family's group `card_image_url` to reflect the remaining cast. Only the family's owner can remove members.

<Info>
  Removing a family member requires a **Pro**, **Max**, or **Enterprise** plan, like all other family write operations.
</Info>

The family must be in `ready` status: if another generation is already in progress for this family, the request is rejected with `422 FAMILY_NOT_READY`. A family must keep at least **1** member: removing the last one is rejected with `422 FAMILY_MEMBER_MINIMUM`.

<Note>
  Unlike [Delete Family](/api-reference/families/delete-family), this endpoint returns `202 Accepted` rather than `204 No Content`, since the group card image needs to be regenerated for the remaining members.
</Note>

## Path Parameters

<ParamField path="familyId" type="string" required>
  The UUID of the family. Only accepts families you own.

  Example: `3fa85f64-5717-4562-b3fc-2c963f66afa6`
</ParamField>

<ParamField path="index" type="integer" required>
  The 0-based position of the member to remove, matching the order of the `members` array returned by [Get Family](/api-reference/families/get-family).

  Returns `404 FAMILY_MEMBER_NOT_FOUND` if out of range.

  Example: `2`
</ParamField>

## Request Body

No body fields are required.

<ParamField body="webhook_url" type="string">
  HTTPS URL to receive a webhook notification when the family finishes regenerating its group card.

  See [Webhooks](/concepts/webhooks) for payload format and verification details.

  <Warning>
    Webhook URLs must use HTTPS and cannot point to private/internal networks (SSRF protection).
  </Warning>
</ParamField>

## Response

Returns a `202 Accepted` response with a task to poll:

<ResponseField name="family_id" type="string" required>
  Unique identifier for the family.
</ResponseField>

<ResponseField name="task_id" type="string" required>
  Unique identifier for the generation task. Poll it via [Get Task](/api-reference/videos/get-task), or use `webhook_url` for a notification instead.
</ResponseField>

<ResponseField name="status" type="string" required>
  Always `generating` for this response shape.
</ResponseField>

<ResponseField name="livemode" type="boolean" required>
  `true` for live (`vpk_live_`) requests; `false` for test-mode (`vpk_test_`) requests. See [Test Mode](/concepts/test-mode).
</ResponseField>

<ResponseField name="_links" type="object" required>
  HATEOAS links for navigation.

  * `self`: URL to fetch the family (`/v1/families/{family_id}`)
  * `task`: URL to poll for the generation task (`/v1/tasks/{task_id}`)
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X DELETE https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/2 \
    -H "Authorization: Bearer vpk_live_xxxxx"
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/2', {
    method: 'DELETE',
    headers: {
      'Authorization': 'Bearer vpk_live_xxxxx'
    }
  });

  const result = await response.json();
  console.log(`Removing member, task: ${result.task_id}`);
  ```

  ```python Python theme={null}
  import requests

  response = requests.delete(
      'https://api.vibepeak.ai/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6/members/2',
      headers={
          'Authorization': 'Bearer vpk_live_xxxxx'
      }
  )

  result = response.json()
  print(f"Removing member, task: {result['task_id']}")
  ```
</RequestExample>

<ResponseExample>
  ```json 202 Accepted theme={null}
  {
    "family_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "task_id": "task_fam459rem",
    "status": "generating",
    "livemode": true,
    "_links": {
      "self": "/v1/families/3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "task": "/v1/tasks/task_fam459rem"
    }
  }
  ```

  ```json 403 Forbidden (Plan Not Allowed) theme={null}
  {
    "error": {
      "code": "PLAN_NOT_ALLOWED",
      "message": "Families are available on the Pro, Max and Enterprise plans. Upgrade your plan to use this feature.",
      "request_id": "req_xyz123"
    }
  }
  ```

  ```json 404 Not Found (Family) theme={null}
  {
    "error": {
      "code": "FAMILY_NOT_FOUND",
      "message": "Family not found or not accessible with this API key.",
      "request_id": "req_xyz123"
    }
  }
  ```

  ```json 404 Not Found (Member) theme={null}
  {
    "error": {
      "code": "FAMILY_MEMBER_NOT_FOUND",
      "message": "Member index is out of range for this family.",
      "request_id": "req_xyz123"
    }
  }
  ```

  ```json 422 Unprocessable Entity (Family Not Ready) theme={null}
  {
    "error": {
      "code": "FAMILY_NOT_READY",
      "message": "Another generation is already in progress for this family. Poll the task until it finishes, then retry.",
      "request_id": "req_xyz123"
    }
  }
  ```

  ```json 422 Unprocessable Entity (Member Minimum) theme={null}
  {
    "error": {
      "code": "FAMILY_MEMBER_MINIMUM",
      "message": "A family must have at least 1 member.",
      "request_id": "req_xyz123"
    }
  }
  ```
</ResponseExample>

## Polling for Completion

Poll the returned `task_id` via [Get Task](/api-reference/videos/get-task). Once `status` is `completed`, [Get Family](/api-reference/families/get-family) reflects the remaining members and the regenerated group `card_image_url`.

If the task fails, the family is left **exactly as it was**: the member is not removed.

## Error Codes

| Code                      | Status | Description                                                                 |
| ------------------------- | ------ | --------------------------------------------------------------------------- |
| `MISSING_API_KEY`         | 401    | No `Authorization` header was sent                                          |
| `INVALID_API_KEY`         | 401    | The API key is invalid or has been revoked                                  |
| `PLAN_NOT_ALLOWED`        | 403    | Your plan doesn't allow editing a family (requires Pro, Max, or Enterprise) |
| `FAMILY_NOT_FOUND`        | 404    | Family doesn't exist or isn't yours                                         |
| `FAMILY_MEMBER_NOT_FOUND` | 404    | `index` is out of range for this family's `members` array                   |
| `FAMILY_NOT_READY`        | 422    | Another generation is already in progress for this family                   |
| `FAMILY_MEMBER_MINIMUM`   | 422    | The family only has 1 member left and cannot be reduced further             |

See [Error Handling](/concepts/error-handling) for more details.
