# Generate faceless videos, AI videos and UGC ads from your code.

> The AutoFeed video API: 8 video types including Reddit-style stories, AI slideshows, UGC ads and 28 AI video models. Prepaid credits, signed webhooks, included with Ultimate.

- Canonical page: https://www.autofeed.ai/video-api
- API reference: https://www.autofeed.ai/docs/api
- Publisher: AutoFeed.ai (https://www.autofeed.ai)

One REST endpoint for all 8 AutoFeed video types. Send JSON, get a finished MP4 back by webhook. It runs on the same pipeline and the same credits as the dashboard, included with Ultimate.

## Video types

- [AI Slideshow Video API](https://www.autofeed.ai/video-api/ai-slideshow) (`ai_slideshow`): A topic or brief in, a scripted and narrated faceless video out. Example request: 1,200 credits.
- [Reddit Story Video API](https://www.autofeed.ai/video-api/reddit-stories) (`reddit_stories`): A subreddit style in, a narrated vertical story video out. Example request: 1,000 credits.
- [Would You Rather Video API](https://www.autofeed.ai/video-api/would-you-rather) (`would_you_rather`): A topic in, an illustrated "Would You Rather" quiz video out. Example request: 1,000 credits.
- [Pick One Video API](https://www.autofeed.ai/video-api/pick-one) (`pick_one`): A topic in, a "Pick One" image video out. Example request: 1,000 credits.
- [Fake Text Video API](https://www.autofeed.ai/video-api/fake-text) (`fake_text`): A premise in, a voiced text-message story video out. Example request: 1,000 credits.
- [AI UGC Ad Video API](https://www.autofeed.ai/video-api/ugc-ads) (`ugc`): A hook and your demo clip in, an avatar UGC ad out. Example request: 1,000 credits.
- [AI Video Generation API](https://www.autofeed.ai/video-api/ai-video) (`ai_video`): 28 text-to-video and image-to-video models behind one endpoint. Example request: 1,000 credits.
- [YouTube Clipping API](https://www.autofeed.ai/video-api/youtube-clips) (`yt_clips`): A YouTube link in, several captioned short clips out. Example request: 6,500 credits.

## How it works

1. **Create a key.** On Ultimate, open API Keys in the dashboard and create a key. Keys are shown once and belong on your server, never in a browser or an app bundle.
2. **POST /v1/videos.** Send the type, its input and an optional webhookUrl to https://www.autofeed.ai/api/v1/videos. Invalid input is a 400 that names the field. A valid request returns 202 with the job id and its exact cost in credits, which is charged then.
3. **We render it.** The job runs on the same pipeline as a dashboard video: script, images, voice, captions and render, depending on the type.
4. **Get the webhook.** When the video is done we POST a video.completed event to your webhookUrl, signed with an X-Autofeed-Signature header (HMAC-SHA256 over the timestamp and body). Failed deliveries are retried with backoff. Prefer polling? GET /v1/videos/{id} returns the same body.
5. **Download the file.** The url in the event points at the rendered MP4. Media is deleted after 14 days, so copy it to your own storage.

### Webhook

```http
POST /webhooks/autofeed HTTP/1.1
Content-Type: application/json
X-Autofeed-Event: video.completed
X-Autofeed-Signature: t=1793620000,v1=6a3c9f1e...
```

```json
{
  "id": "1c9d6c3e-1f5b-4d2e-9c31-2b8b0f0f9a11",
  "type": "ai_slideshow",
  "status": "completed",
  "error": null,
  "costInCredits": 1200,
  "createdAt": "2026-11-02T12:00:00.000Z",
  "completedAt": "2026-11-02T12:03:41.000Z",
  "url": "https://.../1c9d6c3e-1f5b-4d2e-9c31-2b8b0f0f9a11.mp4"
}
```

## Pricing

Included with Ultimate. There is no separate API plan.

| Ultimate size | Credits / month | $ / 1k credits |
|---|---|---|
| $249/mo (Ultimate) | 180k | $1.38 |
| $449/mo | 500k | $0.90 |
| $799/mo | 1M | $0.80 |
| $1,399/mo | 2M | $0.70 |

- Credits are the same as the dashboard: one balance, one price per video, whichever door it comes through.
- API videos and your autoposting series spend the same balance. There is no reserve held back for autoposting, so size your plan for both.
- Every response tells you what the request cost. A render that fails refunds its credits automatically.
- Run low? Credit packs top up the same balance, or move to a bigger Ultimate size.

## Limits

- **Create requests: 20 / minute.** Per account, not per key, so a second key does not double it. Over the limit is a 429 with Retry-After, and nothing is charged.
- **Read requests: 120 / minute.** Status and list calls. Use webhooks instead of tight polling loops.
- **Out of credits: 402.** INSUFFICIENT_CREDITS before any work starts, nothing queued. A past-due subscription answers 402 PAYMENT_REQUIRED.
- **Media storage: 14 days.** Rendered files are deleted after that. Download what you keep.
- **Retries: idempotencyKey.** Send the same key again and you get the original job back instead of a second charge.

## Frequently asked questions

### Which plan includes the API?

Ultimate, at every size. Hobby and Pro do not include API access, and there is no separate API plan to buy.

### Do API videos cost the same as dashboard videos?

Yes. The API prices every request with the same function the dashboard uses and spends the same credit balance. The cost is in the 202 response.

### What happens when I run out of credits?

The create call answers 402 INSUFFICIENT_CREDITS before anything is queued or charged. Buy a credit pack or move to a bigger Ultimate size, then retry.

### What if a video fails to render?

The job ends with status "failed", an error message, and its credits refunded to your balance automatically.

### How long are the videos stored?

14 days. Download each file when its webhook arrives.

### Can I call the API from a browser or a mobile app?

No. Keys are secrets and the API is meant to be called from your backend. If your own users trigger videos, queue their requests on your server and call us from there.

### Does the API post videos to social accounts?

No. The API returns video files. Scheduled posting to TikTok and YouTube Shorts is a dashboard feature (series and autoposting), not part of the API.

### Webhooks or polling?

Webhooks. Each video.completed event is signed so you can verify it came from us, and failed deliveries are retried. GET /v1/videos/{id} is there as a fallback and returns the same body.
