---
updatedAt: 2026-02-08T07:29:46.000Z
agentTools:
  projectIndex: https://docs.d-id.com/llms.txt
---

# Quickstart

Create a custom avatar from your own video footage

Create your own custom avatar from video footage.\
V3 Instant Avatars require a consent verification process to prevent misuse, then you can generate unlimited videos with your avatar.

<CoolSteps name="express-avatars-quickstart">
  <CoolStep number={1} title="Create a consent">
    Start by creating a consent challenge. This returns a script that must be read aloud in a video.

    ```yaml Request
    curl -X POST "https://api.d-id.com/consents" \
      -H "Authorization: Basic <YOUR KEY>" \
      -H "Content-Type: application/json" \
      -d '{
        "language": "english"
      }'
    ```

    ```json Response
    {
      "id": "cst_abc123",
      "text": "I, [user name] confirm that I have all the necessary rights or consents to use this footage and voice recording for creating an Avatar. This is my dynamic passcode lake, grass, salad",
      "created_at": "2024-01-15T10:30:00.000Z"
    }
    ```

    Save the `id` (consent\_id) and `text`. The consent expires in 30 minutes.
  </CoolStep>

  <CoolStep number={2} title="Upload the consent video">
    Record a video of the avatar subject reading the consent text aloud, replacing `[user name]` with the avatar name. Upload the video to your storage and submit the URL.

    ```yaml Request
    curl -X POST "https://api.d-id.com/consents/cst_abc123" \
      -H "Authorization: Basic <YOUR KEY>" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Alex",
        "source_url": "https://your-storage.com/alex-consent-video.mp4"
      }'
    ```

    Wait for consent verification to complete (status becomes `done`).
  </CoolStep>

  <CoolStep number={3} title="Create the V3 Instant Avatar">
    Record at least 1 minute of footage of the avatar subject speaking naturally. Upload to your storage and create the avatar.

    ```yaml Request
    curl -X POST "https://api.d-id.com/scenes/avatars" \
      -H "Authorization: Basic <YOUR KEY>" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Alex",
        "consent_id": "cst_abc123",
        "source_url": "https://your-storage.com/alex-training-video.mp4",
        "persist": true
      }'
    ```

    ```json Response
    {
      "id": "avt_xyz789",
      "object": "scene_avatar",
      "status": "validating",
      "created_at": "2024-01-15T10:35:00.000Z"
    }
    ```

    Save the `id` — you'll need it to check status and create videos.
  </CoolStep>

  <CoolStep number={4} title="Check avatar status">
    Poll the GET endpoint until the status changes to `done`. Avatar training typically takes 5-10 minutes.

    ```yaml Request
    curl -X GET "https://api.d-id.com/scenes/avatars/avt_xyz789" \
      -H "Authorization: Basic <YOUR KEY>"
    ```

    ```json Response
    {
      "id": "avt_xyz789",
      "status": "done",
      "voice_id": "IfhpAQ4yN4MQ9ykyw3iK",
      "thumbnail_url": "https://scenes-avatars.d-id.com/.../thumbnail.png"
    }
    ```

    Save the `voice_id` to use the cloned voice in videos.
  </CoolStep>

  <CoolStep number={5} title="Create a video with your avatar">
    Use your avatar to generate videos. Include the avatar\_id and optionally the cloned voice\_id.

    ```yaml Request
    curl -X POST "https://api.d-id.com/scenes" \
      -H "Authorization: Basic <YOUR KEY>" \
      -H "Content-Type: application/json" \
      -d '{
        "avatar_id": "avt_xyz789",
        "script": {
          "type": "text",
          "input": "Hello! This is my V3 Instant Avatar speaking.",
          "provider": {
            "type": "elevenlabs",
            "voice_id": "IfhpAQ4yN4MQ9ykyw3iK"
          }
        }
      }'
    ```

    ```json Response
    {
      "id": "scn_def456",
      "object": "scene",
      "status": "created",
      "created_at": "2024-01-15T10:45:00.000Z"
    }
    ```
  </CoolStep>

  <CoolStep number={6} title="Get your video">
    Poll the GET endpoint until the status changes to `done`, then retrieve the video.

    ```yaml Request
    curl -X GET "https://api.d-id.com/scenes/scn_def456" \
      -H "Authorization: Basic <YOUR KEY>"
    ```

    ```json Response
    {
      "id": "scn_def456",
      "status": "done",
      "result_url": "https://result.d-id.com/.../video.mp4"
    }
    ```

    Download your video from the `result_url`. The URL is valid for 24 hours.
  </CoolStep>
</CoolSteps>