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

# Create Generation

> Generate images, videos, audio, or 3D models by sending a request to the Artificial Studio API.

Create a new generation by specifying a tool and input parameters. Returns immediately with a generation ID while processing happens asynchronously.

### Headers

| Name            | Type   | Required | Description                |
| --------------- | ------ | -------- | -------------------------- |
| `Authorization` | string | Yes      | Your API key               |
| `Content-Type`  | string | Yes      | Must be `application/json` |

### Body

| Parameter      | Type   | Required | Description                                                                                          |
| -------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------- |
| `tool`         | string | Yes      | Tool identifier (e.g., `create-image`, `create-video`). Use `GET /api/tools` to list available tools |
| `input`        | object | Yes      | Tool-specific parameters                                                                             |
| `input.model`  | string | No       | Model to use. Defaults to the tool's primary model                                                   |
| `input.prompt` | string | Varies   | Text prompt for generation                                                                           |
| `webhook`      | string | No       | HTTPS URL to receive completion notifications                                                        |

<Warning>The request body is validated strictly — unknown fields will be rejected with a `400` error.</Warning>

### Response Fields

| Field       | Type   | Description                   |
| ----------- | ------ | ----------------------------- |
| `id`        | string | Unique generation identifier  |
| `status`    | string | Initial status (`processing`) |
| `tool`      | string | Tool used for this generation |
| `createdAt` | string | ISO 8601 timestamp            |

<RequestExample>
  ```bash bash theme={null}
  curl -X POST https://api.artificialstudio.ai/api/run \
    -H "Content-Type: application/json" \
    -H "Authorization: YOUR_API_KEY" \
    -d '{
      "tool": "create-image",
      "input": {
        "prompt": "A serene Japanese garden with cherry blossoms"
      }
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.artificialstudio.ai/api/run', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'YOUR_API_KEY'
    },
    body: JSON.stringify({
      tool: 'create-image',
      input: {
        prompt: 'A serene Japanese garden with cherry blossoms'
      }
    })
  });

  const data = await response.json();
  ```

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

  response = requests.post(
      'https://api.artificialstudio.ai/api/run',
      headers={
          'Content-Type': 'application/json',
          'Authorization': 'YOUR_API_KEY'
      },
      json={
          'tool': 'create-image',
          'input': {
              'prompt': 'A serene Japanese garden with cherry blossoms'
          }
      }
  )

  data = response.json()
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "507f1f77bcf86cd799439011",
    "status": "processing",
    "tool": "create-image",
    "createdAt": "2024-01-15T10:30:00.000Z"
  }
  ```

  ```json 400 theme={null}
  {
    "message": "Missing or invalid parameters"
  }
  ```

  ```json 401 theme={null}
  {
    "message": "Invalid or missing API key"
  }
  ```

  ```json 402 theme={null}
  {
    "message": "You do not have enough credits to perform this action"
  }
  ```

  ```json 404 theme={null}
  {
    "message": "Tool not found"
  }
  ```

  ```json 429 theme={null}
  {
    "message": "Too many API requests, please try again later"
  }
  ```
</ResponseExample>
