Uploading footage
Send a screen recording or an image to Getuser.
Uploads go straight to storage in three steps. They are free, but count toward the plan's uploads a day and a month.
1. Ask for an upload URL
curl https://getuser.app/api/v1/uploads \
-H "Authorization: Bearer $GETUSER_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "kind": "demo", "filename": "onboarding.mp4", "mime_type": "video/mp4", "size": 18392011 }'{
"asset_id": "a81e…",
"reused": false,
"upload_url": "https://…supabase.co/storage/v1/object/upload/sign/…",
"upload_headers": { "content-type": "video/mp4" },
"expires_at": "2026-10-26T10:15:00Z"
}Pass fingerprint (the file's SHA-256, 64 lowercase hex characters) to skip uploading a file Getuser already has: you get the existing asset_id, reused: true and upload_url: null.
Images can say which slide they are for with role (hook, app, background, icon). A long demo recording can be cut into parts with cuts (1–8), each its own demo.
2. Send the bytes
curl -X PUT "$UPLOAD_URL" -H "content-type: video/mp4" --data-binary @onboarding.mp43. Finish, then wait
curl -X POST https://getuser.app/api/v1/uploads/a81e…/complete \
-H "Authorization: Bearer $GETUSER_API_KEY"Getuser processes the file (trims, makes a poster). Poll GET /assets/a81e… until status is ready (usually within a minute), or rejected with a reject_reason.
Limits
- Videos up to 200 MB, images up to 10 MB. HEIC photos are not taken: export JPG or PNG.
kindis one ofdemo,hook,ending,image,music.- The plan sets how many uploads a day and a month:
uploads_used(422); bigger files answertoo_large(413). - Uploads that go unused are kept for the plan's period (see the pricing page); finished videos are kept until the founder deletes them.
From chat
Claude and ChatGPT in the browser cannot send file bytes. A founder using them uploads new footage in the app; the chat then uses it.