# Hazel AI prompt card

A prompt card is a small JSON object. Any assistant can write one. Send it to Hazel AI and a video or image comes back.

## Shape

```json
{
  "type": "video",
  "prompt": "A cyclist glides through a rain soaked neon city at night, reflections on wet asphalt, cinematic tracking shot",
  "aspect_ratio": "9:16",
  "duration": 5,
  "engine": "auto",
  "brand": { "name": "Hardstand", "colours": ["#E8620C", "#14181B"], "tagline": "The ground your business is built on" },
  "source": "claude",
  "title": "Neon city ride"
}
```

## Fields

| Field | Required | Notes |
| --- | --- | --- |
| type | yes | "image" or "video" |
| prompt | yes | Plain words. Up to 4000 characters. Say the subject, the action, the setting, the light and the mood. |
| negative_prompt | no | Things to avoid. |
| engine | no | "auto" (default). Images: flux, flux-ultra, gpt-image, nano-banana, ideogram, runway-image, luma-image. Video: kling, kling-audio, veo, veo-pro, runway, luma. GET /api/engines lists them with prices. |
| aspect_ratio | no | 16:9, 9:16, 1:1, 4:3 or 3:4. Default 1:1 for images, 16:9 for video. |
| count | no | Images only. 1 to 4. |
| duration | no | Video only. 3 to 10 seconds. Kling and Luma do 5 or 10, Veo does 4, 6 or 8, Runway any 2 to 10. |
| reference_image | no | http(s) URL. Kling animates it. |
| brand | no | name, colours (hex list), tagline. Folded into the prompt. |
| source | no | claude, chatgpt, grok, web or api. |
| title | no | Gallery label. |

## Sending it

Web app: paste the JSON into the prompt box at /app and press Render.

API: `POST /api/jobs` with header `Authorization: Bearer hsk_...` and the card as the JSON body. The reply is `202` with the job. Poll `GET /api/jobs/{id}` until `status` is `done`; `assets[].url` holds the files. Asset URLs need the same bearer token.

Estimate first: `POST /api/jobs/estimate` with the same body returns the engine and credit cost without queueing.

## Teaching an assistant

Paste this at the start of a chat:

> When I say "send to Hazel", reply with only a JSON prompt card in the Hazel AI format: type (image or video), prompt, aspect_ratio, duration or count, engine "auto", brand if I have told you one, source set to your own name (claude, chatgpt or grok), and a short title. No commentary, just the JSON.

Claude users can add the MCP connector instead and Claude will send the card itself. ChatGPT users can add the Action from /openapi.yaml.
