---
name: getuser
description: Use when someone wants short TikTok or Instagram videos or slideshows about their app made with Getuser (getuser.app), wants to check, download, cancel or retry Getuser videos, write hook lines or captions, fill their Getuser posting plan, or asks how many Getuser credits they have. Works through the Getuser MCP server (tools like plan_videos, render_videos) or the REST API at https://getuser.app/api/v1 with a gu_ key.
---

# Getuser

Getuser makes short UGC-style videos about a founder's app: an AI-made persona reacts with a line on screen, then the app's demo plays, then an ending names the app. It also makes image slideshows. Every video or slideshow costs **25 credits**; planning, reading and checking are free.

Use the MCP tools when they are connected (`get_account`, `plan_videos`, `render_videos`, …). Otherwise call the REST API (see `references/api.md`) with the key in `GETUSER_API_KEY`: `Authorization: Bearer $GETUSER_API_KEY`. Never put the key in a URL, a file you commit, or your reply.

## The rule: plan, show, then render

1. **Check the account** (`get_account` / `GET /me`): credits left, and the setup for what they want. Videos and slideshows have separate gates (`setup.videos`, `setup.slideshows`): videos need the app, 5 demos and the person's own reaction; slideshows need the app and 5 images (photos about the app or brand, not the app icon). If the gate is not `ready`, tell the person what its `missing` lists (`app`, `demos`, `reaction`, `images`) and that they add it at getuser.app. Stop there.
2. **Plan for free** (`plan_videos` / `POST /videos/plan`) with what they asked: `count`, `format` (`hook-demo` by default, `one-caption` for their own clip), `persona_ids` or `demo_ids` if they named some, `lines: "own"` if they want only their own lines.
3. **Show the plan**: a numbered list of each video's line (`hook_text`) and persona, then the cost and the credits left after, e.g. "5 videos, 125 credits; you'll have 2,225 left."
4. **Render only after a clear yes** (`render_videos` / `POST /videos`), with the drafts exactly as planned (or as the person edited them) and, over REST, a fresh `Idempotency-Key` (UUID) per request; reuse the same key only when retrying the same request. The MCP server sends its own key: the same drafts sent twice answer the same videos, with no new charge.
5. **Wait, then hand over links.** A video usually takes 1–3 minutes. Check with `get_videos` / `GET /videos?batch_id=…` and follow `get_videos`' hint ("check again in about N seconds"); over REST, wait about 30 seconds plus 15 for each video still waiting, at most 5 minutes (no webhooks). When `ready`, give the `download_url`s and say they work for one hour.

Never render without showing the plan and its cost first, even if the person said "just make them": show the plan in one short message and ask "Make them?".

## Never invent

- Never invent ids (persona, demo, video, profile, format). Take them from a list call or a previous result.
- Never invent a cost: it comes from the plan (`cost`) or is 25 per video/slideshow.
- If a list is empty (no demos, no personas), say so and point to getuser.app; do not guess.

## When something is refused

Errors look like `{"error": {"code": "...", "message": "..."}}`. Switch on `code`:

| Code                                 | What to do                                                                                                     |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------- |
| `not_enough_credits`                 | Say how many are needed and how many they have. Offer fewer videos. Nothing was charged.                       |
| `setup_incomplete`                   | `detail.gate` says videos or slideshows; tell them what `detail.missing` lists; they finish it at getuser.app. |
| `storage_full`                       | They delete old videos at getuser.app/videos (you cannot delete), or upgrade.                                  |
| `queue_full`                         | 40 videos are waiting; wait for some to finish.                                                                |
| `no_demo`, `no_personas`, `no_lines` | They upload a demo, widen the personas, or use `lines: "all"`.                                                 |
| `rate_limited`                       | Wait `Retry-After` seconds, retry with the same `Idempotency-Key`.                                             |
| `invalid_key`                        | The key is wrong or revoked; they make a new one in Settings › Connect to AI.                                  |
| `terms_not_accepted`                 | They open getuser.app once and accept the new Terms.                                                           |
| `internal`, `unavailable`            | Retry later with the same `Idempotency-Key`.                                                                   |

All codes: https://getuser.app/docs/errors

## What you cannot do

- **Post** to TikTok or Instagram. You can put videos on the posting plan (`add_to_plan` / `POST /plan`); the person posts from Getuser.
- **Delete** videos, uploads, lines or profiles. You can cancel waiting videos (credits come back) and retry failed ones (25 credits held again).
- Change their plan, billing or settings.

## Other things you can do

- **Slideshows:** `make_slideshows` / `POST /slideshows/batch` from a saved format (`list_slideshow_formats` / `GET /slide-formats`), 25 credits each. They need the app and 5 images, no demos or reaction.
- **Lines:** `write_lines` / `POST /ai/lines` writes new lines from their app profile (AI credits, usually 4–5).
- **Captions:** `write_caption` / `POST /ai/captions` for a video (AI credits, usually 1–3).
- **Posting plan:** `list_profiles`, `get_plan`, `add_to_plan`, `remove_from_plan`.
- **Uploads:** only for clients that can send file bytes (`start_upload` → PUT → `finish_upload`). In a browser chat, ask the person to upload in the app.

## Personas are AI

Every persona is AI-made (`ai_made: true`). Never call one a real customer or write first-person testimonials for them. Remind people to post with each platform's AI label on.

## More

- Full API reference: `references/api.md`, https://getuser.app/docs/api-reference
- Docs index for agents: https://getuser.app/llms.txt
