# Video · templates

`GET /v1/videos/templates` — List the Replace templates — the trends: a famous clip, who you can cast in it, and its shots.

- Base URL: https://eroq.ai/v1
- Auth: `Authorization: Bearer eroq_sk_…` (create keys at https://eroq.ai/dashboard/keys)
- Credits: free

Free, no key needed. The studio's Replace shelf, as data: each template's clip, preview and poster (paths on https://eroq.ai), its length, its `slots` (the people you cast, left to right) and the `instruction` written for the engine (`{slot}` → `@Name`). New trends appear here first — load the list instead of copying it.

A template with `shots` is cut from several renders: render each shot with POST /v1/videos/edits, `source` set to the shot's own `source` (`template:<id>:<n>`, engine-ready on our side — nothing to upload), `targets` from the shot; then POST /v1/videos/edits/assemble puts them back into the clip. `renders` lists the seconds billed, one entry per render.

## GET /v1/videos/templates

List the Replace templates — the trends: a famous clip, who you can cast in it, and its shots.

### Example request

```bash
curl https://eroq.ai/v1/videos/templates \
  -H "Authorization: Bearer $EROQ_API_KEY"
```

```javascript
const res = await fetch('https://eroq.ai/v1/videos/templates', {
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
})
console.log(await res.json())
```

```python
import os, requests

res = requests.get("https://eroq.ai/v1/videos/templates", headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"})
print(res.json())
```

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("GET", "https://eroq.ai/v1/videos/templates", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{
  "object": "list",
  "data": [
    {
      "id": "gta-goodbye",
      "name": "Goodbye GTA",
      "about": "The GTA goodbye, shot for shot: …",
      "clip": "/templates/replace/goodbye-gta.mp4",
      "preview": "/templates/replace/goodbye-gta-preview.mp4",
      "poster": "/templates/replace/goodbye-gta-poster.webp",
      "seconds": 22,
      "slots": [{ "id": "you" }],
      "clipOutfits": true,
      "voices": { "female": "/templates/replace/goodbye-gta-female.mp4" },
      "shots": [
        { "start": 3.667, "end": 6.667, "targets": ["the young man in the foreground, seen in profile"], "source": "template:gta-goodbye:1" },
        { "start": 6.667, "end": 10.667, "targets": ["the young man in close-up, in tears"], "source": "template:gta-goodbye:2" },
        { "start": 10.667, "end": 14.542, "targets": ["the young man in the driver's seat"], "source": "template:gta-goodbye:3" }
      ],
      "renders": [3, 4, 3.875]
    }
  ]
}
```

---
Canonical: https://eroq.ai/docs/video-templates · Index for agents: https://eroq.ai/llms.txt · OpenAPI: https://eroq.ai/openapi.json
