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

# Quickstart

> Create your first shoot and download the results in a few minutes.

## 1. Get an API key

In the Cherry Shot dashboard, open **Profile → API** and create a key. Copy it — the full
key (`cs_...`) is shown **once**. See [Authentication](/authentication) for details.

## 2. Check your credits

<CodeGroup>
  ```bash cURL theme={null}
  curl https://ybhqmgyprapjxomdxifs.supabase.co/functions/v1/api/v1/credits \
    -H "Authorization: Bearer cs_your_key"
  ```

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

  BASE = "https://ybhqmgyprapjxomdxifs.supabase.co/functions/v1/api"
  headers = {"Authorization": "Bearer cs_your_key"}

  print(requests.get(f"{BASE}/v1/credits", headers=headers).json())
  ```

  ```javascript Node theme={null}
  const BASE = "https://ybhqmgyprapjxomdxifs.supabase.co/functions/v1/api";
  const headers = { Authorization: "Bearer cs_your_key" };

  const res = await fetch(`${BASE}/v1/credits`, { headers });
  console.log(await res.json());
  ```
</CodeGroup>

```json Response theme={null}
{ "credits": 250 }
```

## 3. Create a shoot

Pass one or more public product image URLs and a style. This example asks for a 4-shot
product-only set in the `editorial` style.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://ybhqmgyprapjxomdxifs.supabase.co/functions/v1/api/v1/shoots \
    -H "Authorization: Bearer cs_your_key" \
    -H "Content-Type: application/json" \
    -d '{
      "product_image_urls": ["https://example.com/my-product.jpg"],
      "style": "editorial",
      "shots": 4
    }'
  ```

  ```python Python theme={null}
  payload = {
      "product_image_urls": ["https://example.com/my-product.jpg"],
      "style": "editorial",
      "shots": 4,
  }
  shoot = requests.post(f"{BASE}/v1/shoots", headers=headers, json=payload).json()
  print(shoot["id"])
  ```

  ```javascript Node theme={null}
  const payload = {
    product_image_urls: ["https://example.com/my-product.jpg"],
    style: "editorial",
    shots: 4,
  };
  const shoot = await (
    await fetch(`${BASE}/v1/shoots`, {
      method: "POST",
      headers: { ...headers, "Content-Type": "application/json" },
      body: JSON.stringify(payload),
    })
  ).json();
  console.log(shoot.id);
  ```
</CodeGroup>

```json Response theme={null}
{
  "id": "b3f1c2a4-...-...",
  "object": "shoot",
  "status": "pending",
  "shots": 4,
  "credits_used": 4,
  "credits_remaining": 246,
  "created_at": "2026-07-01T10:00:00Z"
}
```

## 4. Poll until it's done

<CodeGroup>
  ```bash cURL theme={null}
  curl https://ybhqmgyprapjxomdxifs.supabase.co/functions/v1/api/v1/shoots/b3f1c2a4-...-... \
    -H "Authorization: Bearer cs_your_key"
  ```

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

  shoot_id = shoot["id"]
  while True:
      result = requests.get(f"{BASE}/v1/shoots/{shoot_id}", headers=headers).json()
      if result["status"] in ("completed", "failed"):
          break
      time.sleep(4)

  for img in result["images"]:
      print(img["url"])
  ```
</CodeGroup>

```json Response (completed) theme={null}
{
  "id": "b3f1c2a4-...-...",
  "object": "shoot",
  "status": "completed",
  "images": [
    { "url": "https://.../shot-1.png", "thumbnail_url": "https://.../thumb-1.png", "status": "fulfilled" }
  ],
  "credits_used": 4,
  "created_at": "2026-07-01T10:00:00Z"
}
```

## 5. Turn it into a video (optional)

Feed the shoot's image URLs into `POST /v1/videos`. See the [Videos guide](/guides/videos).

<Tip>
  Prefer chatting to code? Add the [MCP server](/guides/mcp) to Claude and say
  "generate an editorial shoot for this product," then "make a 10-second ad from it."
</Tip>
