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

# Quickstart

> Make your first AudioShake API call in 5 minutes

Learn how to create an account, generate your first API key, and make your first API call.

## Make your first API call

<Steps>
  <Step title="Create an account">
    Sign up at [dashboard.audioshake.ai](https://dashboard.audioshake.ai/auth/sign-up/). You'll get 10 free credits to start building immediately.
  </Step>

  <Step title="Create an API key">
    In the dashboard, go to **Settings > API Keys** and click **Create new key**. Copy and store the key — you will not be able to view it again.
  </Step>

  <Step title="Create your first Task">
    A Task runs one or more [models](/models) against a media source. This example separates a track into vocals and instrumental:

    <CodeGroup>
      ```bash curl theme={null}
      curl -X POST "https://api.audioshake.ai/tasks" \
        -H "Content-Type: application/json" \
        -H "x-api-key: your_api_key" \
        -d '{
          "url": "https://demos.audioshake.ai/demo-assets/shakeitup.mp3",
          "targets": [
            { "model": "vocals", "formats": ["wav"] },
            { "model": "instrumental", "formats": ["wav"] }
          ]
        }'
      ```

      ```python quickstart.py theme={null}
      import requests

      response = requests.post(
          "https://api.audioshake.ai/tasks",
          headers={
              "Content-Type": "application/json",
              "x-api-key": "your_api_key"
          },
          json={
              "url": "https://demos.audioshake.ai/demo-assets/shakeitup.mp3",
              "targets": [
                  {"model": "vocals", "formats": ["wav"]},
                  {"model": "instrumental", "formats": ["wav"]}
              ]
          }
      )

      print(response.json()["id"])
      ```

      ```javascript quickstart.js theme={null}
      const response = await fetch("https://api.audioshake.ai/tasks", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "x-api-key": "your_api_key"
        },
        body: JSON.stringify({
          url: "https://demos.audioshake.ai/demo-assets/shakeitup.mp3",
          targets: [
            { model: "vocals", formats: ["wav"] },
            { model: "instrumental", formats: ["wav"] }
          ]
        })
      });

      const task = await response.json();
      console.log(task.id);
      ```
    </CodeGroup>

    Save the `id` from the response.
  </Step>

  <Step title="Check Task status">
    Tasks process asynchronously. Poll until each target's `status` is `completed` or `error`:

    <CodeGroup>
      ```bash curl theme={null}
      curl "https://api.audioshake.ai/tasks/<task-id>" \
        -H "x-api-key: your_api_key"
      ```

      ```python check_status.py theme={null}
      task = requests.get(
          f"https://api.audioshake.ai/tasks/{task_id}",
          headers={"x-api-key": "your_api_key"}
      ).json()

      for target in task["targets"]:
          print(f"{target['model']}: {target['status']}")
      ```

      ```javascript checkStatus.js theme={null}
      const res = await fetch(`https://api.audioshake.ai/tasks/${taskId}`, {
        headers: { "x-api-key": "your_api_key" }
      });
      const task = await res.json();

      for (const target of task.targets) {
        console.log(`${target.model}: ${target.status}`);
      }
      ```
    </CodeGroup>

    Each completed target includes an `output` array with download links.

    <Info>Output download links expire after one hour. Download and store files in your own storage.</Info>

    <Tip>Use [webhooks](/api-reference/tasks/webhooks) to get notified when targets complete instead of polling.</Tip>
  </Step>
</Steps>

## Using a local file

Upload your file first with [Upload File](/api-reference/assets/upload), then use the returned `assetId` instead of `url`:

```json theme={null}
{
  "assetId": "your_asset_id",
  "targets": [
    { "model": "vocals", "formats": ["wav"] },
    { "model": "instrumental", "formats": ["wav"] }
  ]
}
```

## What's next?

<CardGroup cols={2}>
  <Card title="Models" icon="grid-2" href="/models">
    Browse all available models.
  </Card>

  <Card title="Instrument Separation" icon="waveform-lines" href="/separate-stems">
    Isolate vocals, drums, bass, and more.
  </Card>

  <Card title="Webhooks" icon="bell" href="/api-reference/tasks/webhooks">
    Get notified when targets complete instead of polling.
  </Card>

  <Card title="API Reference" icon="terminal" href="/api-reference/authentication">
    Full endpoint reference.
  </Card>
</CardGroup>
