# Getuser in Claude and ChatGPT (https://getuser.app/docs/guides) > Ask Claude or ChatGPT for videos about your app, and Getuser makes them. Getuser can work inside the AI chat you already use. Connect it once, then ask in plain words: > Make me five videos for my TikTok this week. Claude or ChatGPT plans the videos, shows you the plan and what it costs, and makes them once you say yes. The finished videos also appear on your **Videos** page in Getuser. ## What it can do - Plan videos and slideshows for your app, and show you the plan first. - Make them with your credits, the same price as in the app. - Tell you when they are ready and give you the download links. - Write new lines (the words on the video) and post captions. - Put videos on your posting plan (the calendar). - Tell you how many credits you have left. ## What it cannot do - **It cannot post** to TikTok or Instagram. You still post from Getuser, the way you do now. - **It cannot delete** anything: no videos, no uploads, no lines. - **It cannot change** your plan, your payment or your settings. ## Start here - [Connect Claude](https://getuser.app/docs/guides/connect-claude): Three steps on claude.ai or the Claude app. - [Connect ChatGPT](https://getuser.app/docs/guides/connect-chatgpt): Three steps on chatgpt.com. - [Things to ask](https://getuser.app/docs/guides/things-to-ask): Sentences that work well. - [Credits](https://getuser.app/docs/guides/credits): What a video costs when you ask in chat. Before Claude or ChatGPT can make something, Getuser needs what the app itself needs. Videos need your app's profile, five demo clips and your own reaction clip. Slideshows need your app's profile and five images: any photos about your app or brand, like its screens, the problem it solves or the people who use it (not the app icon). If something is missing, the chat tells you what to add in Getuser. --- # Connect Claude (https://getuser.app/docs/guides/connect-claude) > Add Getuser to Claude once. Then ask Claude for videos in plain words. You need a Claude account (claude.ai or the Claude app) and a Getuser account. ### Copy Getuser's link In Getuser, open **Settings › Connect to AI** and click **Connect Claude**. It copies this link for you: ```text https://mcp.getuser.app/mcp ``` ### Add it to Claude On claude.ai, open **Settings › Connectors**, click **Add custom connector**, name it **Getuser** and paste the link. Click **Add**. ### Sign in and allow Claude opens a Getuser window. Sign in if you are asked, read what Claude will be allowed to do, and click **Allow**. The window closes and Claude is connected. **No password to copy:** You never paste a password or a code into Claude. Getuser asks you once, in its own window, and you can take the access back any time ([Disconnect](/docs/guides/disconnect)). ## Try it Start a new chat, turn Getuser on in the chat's tools menu if it is off, and say: > How many credits do I have left on Getuser? Then try [things to ask](/docs/guides/things-to-ask). ## On the Claude app for phones Connectors you add on claude.ai also work in the Claude app on your phone. Add it once on the web; you do not need to repeat it on the phone. --- # Connect ChatGPT (https://getuser.app/docs/guides/connect-chatgpt) > Add Getuser to ChatGPT once. Then ask ChatGPT for videos in plain words. You need a ChatGPT account and a Getuser account. ### Copy Getuser's link In Getuser, open **Settings › Connect to AI** and click **Connect ChatGPT**. It copies this link for you: ```text https://mcp.getuser.app/mcp ``` ### Add it to ChatGPT On chatgpt.com, open **Settings › Apps & Connectors**. If you see **Advanced settings**, turn on **Developer mode** there first. Then click **Create**, name it **Getuser**, paste the link. If ChatGPT asks how people sign in, keep what it suggests. Click **Create**. ### Sign in and allow ChatGPT opens a Getuser window. Sign in if you are asked, read what ChatGPT will be allowed to do, and click **Allow**. **Menus move:** ChatGPT renames its menus from time to time. If you cannot find **Apps & Connectors**, search ChatGPT's settings for "connectors". ## Try it In a new chat, pick Getuser from the tools menu (the **+** button) and say: > Show me my Getuser personas. Then try [things to ask](/docs/guides/things-to-ask). --- # Things to ask (https://getuser.app/docs/guides/things-to-ask) > Sentences that work well with Getuser in Claude or ChatGPT. Talk to it the way you would talk to a helper. It plans first and asks before it spends credits. ## Make videos > Plan 5 videos with my newest demo, and show me before you make them. > Make 3 videos with the persona who looks like a student. Use my own lines. > Make the plan again, with different lines. > Yes, make them. ## See what is ready > Are my videos done? Give me the download links. > Which videos did I make this week? Download links work for one hour. Ask again for fresh links any time. ## Slideshows > Make 3 slideshows from my "5 tips" format. ## Words > Write 10 new lines (the words on the video) for my app. > Write a TikTok caption for the last video. ## Plan your posts > Put these 5 videos on my TikTok plan, one a day from Monday at 7 pm. > What is on my posting plan next week? You still post from Getuser. The chat only fills the calendar. ## Credits > How many credits do I have left, and when do they come back? ## Tips - **Say how many.** "5 videos" is clearer than "some videos". - **Ask for the plan first.** You see the lines and the cost before anything is made. - **Upload in the app.** New screen recordings go in through Getuser; the chat uses what is already there. --- # Credits (https://getuser.app/docs/guides/credits) > What a video costs when you ask in Claude or ChatGPT. Asking in chat costs exactly what it costs in the app. Your credits are the same credits. | What | Credits | | ------------------------- | ------------------------------ | | A video | 25 | | A slideshow | 25 | | New lines | a few, depending on the length | | A post caption | a few | | Planning, checking, links | free | | Plan | Credits | About | | --- | --- | --- | | Free | 30 a day, up to 300 a month | 10 videos a month | | Pro | 2,500 a month | 60 videos a month | | Max | 12,500 a month | 300 videos a month | ## When credits are taken Credits are set aside when a video starts and taken when it is ready. If a video fails or you cancel it while it waits, the credits come back. ## When you run out The chat tells you how many credits a request needs and how many you have. Nothing is made, and nothing is charged. Credits come back with your plan's next period, or you can upgrade on the [pricing page](/pricing). ## See what the chat spent Your credits page in Getuser lists every video. Videos made through Claude or ChatGPT are marked "via an AI app". --- # Safety (https://getuser.app/docs/guides/safety) > What Claude and ChatGPT can and cannot do with your Getuser account. ## It asks before it spends Planning is free. Before it makes anything, Claude or ChatGPT shows you the plan and the cost, and waits for your yes. ## It cannot post or delete Nothing goes to TikTok or Instagram from the chat. Nothing in Getuser can be deleted from the chat: not your videos, your uploads or your lines. The worst a mistake can do is make a video you did not want, and you can cancel videos that are still waiting. ## You stay in charge - You see which AI tools are connected in **Settings › Connect to AI**. - You can disconnect one at any time. It stops working at once. - Your password never goes to Claude or ChatGPT. ## What the chat sees When you connect Claude or ChatGPT, it can read what it needs to help you: your videos, your lines, your personas, your posting plan and your credits. That information goes to Claude or ChatGPT under your own account with them, as anything you type in their chat does. Getuser sends nothing to them on its own. ## AI personas The people in Getuser's reaction clips are made by AI, in the chat too. Post their videos with each platform's AI label on. --- # Disconnect (https://getuser.app/docs/guides/disconnect) > Take Getuser out of Claude or ChatGPT. ## In Getuser Open **Settings › Connect to AI**. Under **Connected**, find Claude or ChatGPT and click **Disconnect**. It stops at once: the next time the chat tries to use Getuser, it is asked to connect again. ## In Claude or ChatGPT You can also remove the connector on their side: - **Claude:** Settings › Connectors › Getuser › Remove. - **ChatGPT:** Settings › Apps & Connectors › Getuser › Delete. Removing it there hides Getuser from the chat. To be sure nothing can reach your account, disconnect in Getuser as well. ## Videos already made Disconnecting does not touch your videos. Everything the chat made stays in Getuser. --- # Getuser di Claude dan ChatGPT (https://getuser.app/docs/id) > Minta video tentang aplikasimu ke Claude atau ChatGPT, lalu Getuser yang membuatnya. Getuser bisa dipakai langsung dari chat AI yang sudah kamu pakai. Hubungkan sekali, lalu minta dengan kalimat biasa: > Buatkan lima video untuk TikTok-ku minggu ini. Claude atau ChatGPT menyusun rencana videonya, menunjukkan rencana dan biayanya, lalu membuatnya setelah kamu bilang ya. Video yang sudah jadi juga muncul di halaman **Video** di Getuser. ## Yang bisa dilakukan - Menyusun rencana video dan slideshow untuk aplikasimu, dan menunjukkannya dulu. - Membuatnya dengan kreditmu, harganya sama seperti di aplikasi. - Memberi tahu kalau sudah jadi dan memberi link unduhannya. - Menulis kalimat baru untuk videomu, dan caption untuk postingan. - Memasukkan video ke rencana posting (kalender). - Memberi tahu sisa kreditmu. ## Yang tidak bisa dilakukan - **Tidak bisa memposting** ke TikTok atau Instagram. Kamu tetap posting dari Getuser, seperti sekarang. - **Tidak bisa menghapus** apa pun: video, unggahan, maupun kalimat. - **Tidak bisa mengubah** paket, pembayaran, atau pengaturanmu. ## Mulai dari sini - [Hubungkan Claude](https://getuser.app/docs/id/connect-claude): Tiga langkah di claude.ai atau aplikasi Claude. - [Hubungkan ChatGPT](https://getuser.app/docs/id/connect-chatgpt): Tiga langkah di chatgpt.com. - [Contoh permintaan](https://getuser.app/docs/id/things-to-ask): Kalimat yang hasilnya bagus. - [Kredit](https://getuser.app/docs/id/credits): Biaya video kalau kamu minta lewat chat. Sebelum Claude atau ChatGPT bisa membuat sesuatu, Getuser butuh hal yang sama seperti di aplikasi. Video butuh profil aplikasimu, lima klip demo, dan klip reaksimu sendiri. Slideshow butuh profil aplikasimu dan lima gambar: foto apa saja tentang aplikasi atau brand-mu, misalnya tampilan aplikasinya, masalah yang diselesaikan, atau orang yang memakainya (bukan ikon aplikasi). Kalau ada yang kurang, chat akan memberi tahu apa yang perlu kamu tambahkan di Getuser. --- # Hubungkan Claude (https://getuser.app/docs/id/connect-claude) > Tambahkan Getuser ke Claude sekali saja. Setelah itu, minta video ke Claude dengan kalimat biasa. Kamu butuh akun Claude (claude.ai atau aplikasi Claude) dan akun Getuser. ### Salin link Getuser Di Getuser, buka **Pengaturan › Hubungkan ke AI** lalu klik **Hubungkan Claude**. Link ini otomatis tersalin: ```text https://mcp.getuser.app/mcp ``` ### Tambahkan ke Claude Di claude.ai, buka **Settings › Connectors**, klik **Add custom connector**, beri nama **Getuser**, lalu tempel link tadi. Klik **Add**. ### Masuk dan izinkan Claude membuka jendela Getuser. Masuk kalau diminta, baca apa saja yang boleh dilakukan Claude, lalu klik **Izinkan**. Jendelanya tertutup dan Claude sudah terhubung. **Tidak ada kata sandi yang perlu disalin:** Kamu tidak pernah menempel kata sandi atau kode ke Claude. Getuser bertanya sekali, di jendelanya sendiri, dan kamu bisa mencabut aksesnya kapan saja ([Putuskan](/docs/id/disconnect)). ## Coba sekarang Buka chat baru, nyalakan Getuser di menu alat (tools) kalau masih mati, lalu ketik: > Berapa sisa kreditku di Getuser? Lalu coba [contoh permintaan](/docs/id/things-to-ask). ## Di aplikasi Claude untuk HP Connector yang kamu tambahkan di claude.ai juga jalan di aplikasi Claude di HP. Cukup tambahkan sekali di web, tidak perlu diulang di HP. --- # Hubungkan ChatGPT (https://getuser.app/docs/id/connect-chatgpt) > Tambahkan Getuser ke ChatGPT sekali saja. Setelah itu, minta video ke ChatGPT dengan kalimat biasa. Kamu butuh akun ChatGPT dan akun Getuser. ### Salin link Getuser Di Getuser, buka **Pengaturan › Hubungkan ke AI** lalu klik **Hubungkan ChatGPT**. Link ini otomatis tersalin: ```text https://mcp.getuser.app/mcp ``` ### Tambahkan ke ChatGPT Di chatgpt.com, buka **Settings › Apps & Connectors**. Kalau ada **Advanced settings**, nyalakan **Developer mode** di sana dulu. Lalu klik **Create**, beri nama **Getuser**, dan tempel link tadi. Kalau ChatGPT bertanya cara masuknya, biarkan pilihan yang disarankan. Klik **Create**. ### Masuk dan izinkan ChatGPT membuka jendela Getuser. Masuk kalau diminta, baca apa saja yang boleh dilakukan ChatGPT, lalu klik **Izinkan**. **Menu bisa berubah:** ChatGPT kadang mengganti nama menunya. Kalau **Apps & Connectors** tidak ketemu, cari "connectors" di pengaturan ChatGPT. ## Coba sekarang Di chat baru, pilih Getuser dari menu alat (tombol **+**) lalu ketik: > Tunjukkan persona Getuser-ku. Lalu coba [contoh permintaan](/docs/id/things-to-ask). --- # Contoh permintaan (https://getuser.app/docs/id/things-to-ask) > Kalimat yang hasilnya bagus dengan Getuser di Claude atau ChatGPT. Bicara saja seperti ke asisten. Ia menyusun rencana dulu dan bertanya sebelum memakai kredit. ## Bikin video > Rencanakan 5 video dengan demo terbaruku, tunjukkan dulu sebelum dibuat. > Buat 3 video pakai persona yang mirip mahasiswa. Pakai kalimatku sendiri. > Susun ulang rencananya, dengan kalimat yang berbeda. > Oke, buat sekarang. ## Cek yang sudah jadi > Videoku sudah jadi? Kasih link unduhannya. > Video apa saja yang kubuat minggu ini? Link unduhan berlaku satu jam. Minta lagi kapan saja untuk link baru. ## Slideshow > Buat 3 slideshow dari format "5 tips"-ku. ## Kalimat > Tulis 10 kalimat baru untuk videoku. > Tulis caption TikTok untuk video terakhir. ## Rencana posting > Masukkan 5 video ini ke rencana TikTok-ku, satu per hari mulai Senin jam 7 malam. > Apa saja yang ada di rencana posting minggu depan? Kamu tetap posting dari Getuser. Chat hanya mengisi kalendernya. ## Kredit > Berapa sisa kreditku, dan kapan bertambah lagi? ## Tips - **Sebutkan jumlahnya.** "5 video" lebih jelas daripada "beberapa video". - **Minta rencananya dulu.** Kamu lihat kalimat dan biayanya sebelum apa pun dibuat. - **Unggah di aplikasi.** Rekaman layar baru masuk lewat Getuser; chat memakai yang sudah ada. --- # Kredit (https://getuser.app/docs/id/credits) > Biaya video kalau kamu minta lewat Claude atau ChatGPT. Minta lewat chat biayanya sama persis dengan di aplikasi. Kreditnya juga kredit yang sama. | Apa | Kredit | | --------------------------- | --------------------------- | | Satu video | 25 | | Satu slideshow | 25 | | Kalimat baru | sedikit, tergantung panjang | | Caption postingan | sedikit | | Menyusun rencana, cek, link | gratis | | Paket | Kredit | Kira-kira | | --- | --- | --- | | Free | 30 per hari, maks. 300 per bulan | 10 video per bulan | | Pro | 2.500 per bulan | 60 video per bulan | | Max | 12.500 per bulan | 300 video per bulan | ## Kapan kredit dipakai Kredit disisihkan saat video mulai dibuat dan dipotong saat video jadi. Kalau video gagal atau kamu membatalkannya selagi menunggu, kreditnya kembali. ## Kalau kredit habis Chat memberi tahu berapa kredit yang dibutuhkan dan berapa yang kamu punya. Tidak ada yang dibuat dan tidak ada yang dipotong. Kredit bertambah lagi di periode paketmu berikutnya, atau kamu bisa upgrade di [halaman harga](/pricing). ## Lihat pemakaian lewat chat Halaman kredit di Getuser mencatat setiap video. Video yang dibuat lewat Claude atau ChatGPT diberi tanda "lewat aplikasi AI". --- # Keamanan (https://getuser.app/docs/id/safety) > Apa yang bisa dan tidak bisa dilakukan Claude dan ChatGPT dengan akun Getuser-mu. ## Bertanya dulu sebelum memakai kredit Menyusun rencana itu gratis. Sebelum membuat apa pun, Claude atau ChatGPT menunjukkan rencana dan biayanya, lalu menunggu jawaban "ya" darimu. ## Tidak bisa memposting atau menghapus Tidak ada yang terkirim ke TikTok atau Instagram dari chat. Tidak ada yang bisa dihapus dari chat: video, unggahan, maupun kalimatmu. Kesalahan paling parah hanyalah membuat video yang tidak kamu mau, dan video yang masih menunggu bisa kamu batalkan. ## Kamu tetap yang pegang kendali - Lihat alat AI yang terhubung di **Pengaturan › Hubungkan ke AI**. - Putuskan kapan saja. Aksesnya langsung berhenti. - Kata sandimu tidak pernah sampai ke Claude atau ChatGPT. ## Apa yang dilihat chat Saat terhubung, Claude atau ChatGPT bisa membaca apa yang dibutuhkan untuk membantumu: video, kalimat, persona, rencana posting, dan kreditmu. Informasi itu masuk ke Claude atau ChatGPT lewat akunmu sendiri di sana, sama seperti apa pun yang kamu ketik di chat mereka. Getuser tidak mengirim apa pun ke mereka atas inisiatif sendiri. ## Persona AI Orang di klip reaksi Getuser dibuat oleh AI, termasuk di chat. Posting videonya dengan label AI dari tiap platform dinyalakan. --- # Putuskan (https://getuser.app/docs/id/disconnect) > Keluarkan Getuser dari Claude atau ChatGPT. ## Di Getuser Buka **Pengaturan › Hubungkan ke AI**. Di bagian **Terhubung**, cari Claude atau ChatGPT lalu klik **Putuskan**. Aksesnya langsung berhenti: saat chat mencoba memakai Getuser lagi, ia diminta menghubungkan ulang. ## Di Claude atau ChatGPT Kamu juga bisa menghapus connector dari sisi mereka: - **Claude:** Settings › Connectors › Getuser › Remove. - **ChatGPT:** Settings › Apps & Connectors › Getuser › Delete. Menghapusnya di sana hanya menyembunyikan Getuser dari chat. Supaya benar-benar tidak ada yang bisa mengakses akunmu, putuskan juga di Getuser. ## Video yang sudah dibuat Memutuskan tidak menyentuh videomu. Semua yang dibuat lewat chat tetap ada di Getuser. --- # Getuser dalam Claude dan ChatGPT (https://getuser.app/docs/ms) > Minta video tentang aplikasi anda daripada Claude atau ChatGPT, dan Getuser yang buatkan. Getuser boleh digunakan terus dari chat AI yang anda sudah guna. Sambungkan sekali, kemudian minta dengan ayat biasa: > Buatkan lima video untuk TikTok saya minggu ini. Claude atau ChatGPT merancang videonya, tunjukkan rancangan dan kosnya, dan buat selepas anda kata ya. Video yang siap juga muncul di halaman **Video** dalam Getuser. ## Apa yang boleh dibuat - Merancang video dan slideshow untuk aplikasi anda, dan tunjukkan rancangannya dahulu. - Membuatnya dengan kredit anda, harga sama seperti dalam aplikasi. - Memberitahu bila siap dan memberi pautan muat turun. - Menulis ayat baharu untuk video anda, dan kapsyen untuk post. - Meletakkan video dalam rancangan post (kalendar). - Memberitahu baki kredit anda. ## Apa yang tak boleh dibuat - **Tak boleh post** ke TikTok atau Instagram. Anda tetap post dari Getuser, macam sekarang. - **Tak boleh padam** apa-apa: video, muat naik atau ayat. - **Tak boleh ubah** pelan, bayaran atau tetapan anda. ## Mula di sini - [Sambungkan Claude](https://getuser.app/docs/ms/connect-claude): Tiga langkah di claude.ai atau aplikasi Claude. - [Sambungkan ChatGPT](https://getuser.app/docs/ms/connect-chatgpt): Tiga langkah di chatgpt.com. - [Contoh permintaan](https://getuser.app/docs/ms/things-to-ask): Ayat yang berkesan. - [Kredit](https://getuser.app/docs/ms/credits): Kos video bila anda minta melalui chat. Sebelum Claude atau ChatGPT boleh buat sesuatu, Getuser perlukan perkara yang sama seperti dalam aplikasi. Video perlukan profil aplikasi anda, lima klip demo dan klip reaksi anda sendiri. Slideshow perlukan profil aplikasi anda dan lima gambar: apa-apa foto tentang aplikasi atau jenama anda, seperti skrin aplikasi, masalah yang diselesaikan atau orang yang menggunakannya (bukan ikon aplikasi). Kalau ada yang kurang, chat akan beritahu apa yang perlu ditambah dalam Getuser. --- # Sambungkan Claude (https://getuser.app/docs/ms/connect-claude) > Tambah Getuser ke Claude sekali sahaja. Kemudian minta video daripada Claude dengan ayat biasa. Anda perlukan akaun Claude (claude.ai atau aplikasi Claude) dan akaun Getuser. ### Salin pautan Getuser Dalam Getuser, buka **Tetapan › Sambung ke AI** dan klik **Sambungkan Claude**. Pautan ini disalin untuk anda: ```text https://mcp.getuser.app/mcp ``` ### Tambah ke Claude Di claude.ai, buka **Settings › Connectors**, klik **Add custom connector**, namakan **Getuser** dan tampal pautan tadi. Klik **Add**. ### Log masuk dan benarkan Claude buka tetingkap Getuser. Log masuk jika diminta, baca apa yang Claude dibenarkan buat, dan klik **Benarkan**. Tetingkap tertutup dan Claude sudah bersambung. **Tiada kata laluan untuk disalin:** Anda tak pernah tampal kata laluan atau kod ke dalam Claude. Getuser tanya sekali, dalam tetingkapnya sendiri, dan anda boleh tarik balik akses bila-bila masa ([Putuskan](/docs/ms/disconnect)). ## Cuba sekarang Buka chat baharu, hidupkan Getuser dalam menu alat (tools) jika belum, dan taip: > Berapa baki kredit saya di Getuser? Kemudian cuba [contoh permintaan](/docs/ms/things-to-ask). ## Dalam aplikasi Claude di telefon Connector yang anda tambah di claude.ai juga berfungsi dalam aplikasi Claude di telefon. Tambah sekali di web sahaja, tak perlu ulang di telefon. --- # Sambungkan ChatGPT (https://getuser.app/docs/ms/connect-chatgpt) > Tambah Getuser ke ChatGPT sekali sahaja. Kemudian minta video daripada ChatGPT dengan ayat biasa. Anda perlukan akaun ChatGPT dan akaun Getuser. ### Salin pautan Getuser Dalam Getuser, buka **Tetapan › Sambung ke AI** dan klik **Sambungkan ChatGPT**. Pautan ini disalin untuk anda: ```text https://mcp.getuser.app/mcp ``` ### Tambah ke ChatGPT Di chatgpt.com, buka **Settings › Apps & Connectors**. Jika ada **Advanced settings**, hidupkan **Developer mode** di situ dahulu. Kemudian klik **Create**, namakan **Getuser** dan tampal pautan tadi. Jika ChatGPT tanya cara log masuk, biarkan pilihan yang dicadangkan. Klik **Create**. ### Log masuk dan benarkan ChatGPT buka tetingkap Getuser. Log masuk jika diminta, baca apa yang ChatGPT dibenarkan buat, dan klik **Benarkan**. **Menu boleh berubah:** ChatGPT kadang-kadang tukar nama menunya. Jika **Apps & Connectors** tiada, cari "connectors" dalam tetapan ChatGPT. ## Cuba sekarang Dalam chat baharu, pilih Getuser dari menu alat (butang **+**) dan taip: > Tunjukkan persona Getuser saya. Kemudian cuba [contoh permintaan](/docs/ms/things-to-ask). --- # Contoh permintaan (https://getuser.app/docs/ms/things-to-ask) > Ayat yang berkesan dengan Getuser dalam Claude atau ChatGPT. Cakap macam anda bercakap dengan pembantu. Ia merancang dahulu dan bertanya sebelum guna kredit. ## Buat video > Rancang 5 video dengan demo terbaharu saya, dan tunjukkan dulu sebelum buat. > Buat 3 video dengan persona yang nampak macam pelajar. Guna ayat saya sendiri. > Rancang semula, dengan ayat yang lain. > Ya, buat sekarang. ## Semak yang dah siap > Video saya dah siap? Beri pautan muat turun. > Video apa yang saya buat minggu ini? Pautan muat turun sah selama satu jam. Minta lagi bila-bila masa untuk pautan baharu. ## Slideshow > Buat 3 slideshow daripada format "5 tips" saya. ## Ayat > Tulis 10 ayat baharu untuk video saya. > Tulis kapsyen TikTok untuk video terakhir. ## Rancang post anda > Letak 5 video ini dalam rancangan TikTok saya, satu sehari mulai Isnin pukul 7 malam. > Apa yang ada dalam rancangan post minggu depan? Anda tetap post dari Getuser. Chat hanya mengisi kalendar. ## Kredit > Berapa baki kredit saya, dan bila ia bertambah semula? ## Petua - **Sebut berapa banyak.** "5 video" lebih jelas daripada "beberapa video". - **Minta rancangan dahulu.** Anda nampak ayat dan kosnya sebelum apa-apa dibuat. - **Muat naik dalam aplikasi.** Rakaman skrin baharu masuk melalui Getuser; chat guna apa yang sudah ada. --- # Kredit (https://getuser.app/docs/ms/credits) > Kos video bila anda minta melalui Claude atau ChatGPT. Minta melalui chat kosnya sama seperti dalam aplikasi. Kreditnya juga kredit yang sama. | Apa | Kredit | | --------------------------- | -------------------------------- | | Satu video | 25 | | Satu slideshow | 25 | | Ayat baharu | sedikit, bergantung pada panjang | | Kapsyen post | sedikit | | Merancang, menyemak, pautan | percuma | | Pelan | Kredit | Lebih kurang | | --- | --- | --- | | Free | 30 sehari, maks. 300 sebulan | 10 video sebulan | | Pro | 2.500 sebulan | 60 video sebulan | | Max | 12.500 sebulan | 300 video sebulan | ## Bila kredit digunakan Kredit diasingkan bila video mula dibuat dan ditolak bila video siap. Jika video gagal atau anda batalkan semasa menunggu, kredit dipulangkan. ## Bila kredit habis Chat beritahu berapa kredit yang diperlukan dan berapa yang anda ada. Tiada apa dibuat dan tiada apa ditolak. Kredit bertambah semula dalam tempoh pelan anda yang seterusnya, atau anda boleh naik taraf di [halaman harga](/pricing). ## Lihat penggunaan melalui chat Halaman kredit dalam Getuser menyenaraikan setiap video. Video yang dibuat melalui Claude atau ChatGPT ditanda "melalui aplikasi AI". --- # Keselamatan (https://getuser.app/docs/ms/safety) > Apa yang Claude dan ChatGPT boleh dan tak boleh buat dengan akaun Getuser anda. ## Ia bertanya sebelum guna kredit Merancang adalah percuma. Sebelum membuat apa-apa, Claude atau ChatGPT tunjukkan rancangan dan kosnya, dan tunggu anda kata ya. ## Tak boleh post atau padam Tiada apa dihantar ke TikTok atau Instagram dari chat. Tiada apa dalam Getuser boleh dipadam dari chat: video, muat naik atau ayat anda. Kesilapan paling teruk hanyalah membuat video yang anda tak mahu, dan video yang masih menunggu boleh dibatalkan. ## Anda tetap yang kawal - Lihat alat AI yang bersambung di **Tetapan › Sambung ke AI**. - Putuskan bila-bila masa. Akses terus berhenti. - Kata laluan anda tak pernah sampai ke Claude atau ChatGPT. ## Apa yang chat nampak Bila bersambung, Claude atau ChatGPT boleh baca apa yang perlu untuk membantu anda: video, ayat, persona, rancangan post dan kredit anda. Maklumat itu pergi ke Claude atau ChatGPT melalui akaun anda sendiri dengan mereka, sama seperti apa-apa yang anda taip dalam chat mereka. Getuser tak hantar apa-apa kepada mereka dengan sendiri. ## Persona AI Orang dalam klip reaksi Getuser dijana AI, termasuk dalam chat. Post video mereka dengan label AI setiap platform dihidupkan. --- # Putuskan (https://getuser.app/docs/ms/disconnect) > Keluarkan Getuser daripada Claude atau ChatGPT. ## Dalam Getuser Buka **Tetapan › Sambung ke AI**. Di bawah **Bersambung**, cari Claude atau ChatGPT dan klik **Putuskan**. Akses terus berhenti: bila chat cuba guna Getuser lagi, ia diminta sambung semula. ## Dalam Claude atau ChatGPT Anda juga boleh buang connector dari pihak mereka: - **Claude:** Settings › Connectors › Getuser › Remove. - **ChatGPT:** Settings › Apps & Connectors › Getuser › Delete. Membuangnya di situ hanya menyembunyikan Getuser daripada chat. Untuk pastikan tiada apa boleh capai akaun anda, putuskan juga dalam Getuser. ## Video yang sudah dibuat Memutuskan sambungan tidak menyentuh video anda. Semua yang dibuat melalui chat kekal dalam Getuser. --- # For developers (https://getuser.app/docs/api) > Getuser's REST API and MCP server, for scripts, coding tools and your own agents. Everything a founder does in Getuser's Studio and Batch pages, an API key can do too: plan videos, render them, make slideshows, write lines and fill the posting plan. Same credits, same limits, same videos on the founder's Videos page. - [Getting started](https://getuser.app/docs/getting-started): A key and your first video in four calls. - [API Reference](https://getuser.app/docs/api-reference): Every endpoint, with curl, JavaScript and Python. - [Agents & MCP](https://getuser.app/docs/agents): Use Getuser from Claude Code, Cursor or any MCP client. - [Errors](https://getuser.app/docs/errors): Every error code and what to do about it. ## At a glance | | | | ---------- | ----------------------------------------------------------------- | | Base URL | `https://getuser.app/api/v1` | | Auth | `Authorization: Bearer gu_…` | | Format | JSON in and out, UTF-8, snake_case | | MCP server | `https://mcp.getuser.app/mcp` (Streamable HTTP) | | OpenAPI | [`/openapi.json`](/openapi.json) | | Price | 25 credits per video or slideshow; AI writes are priced by length | ## What it does not do - **No posting.** Videos go on the posting plan; the founder posts from the app. See [The posting plan](/docs/posting-plan). - **No deleting.** An agent's mistake never destroys work. Cancel and retry are allowed. - **No webhooks yet.** Poll the status. See [Making videos](/docs/videos#wait-for-it). ## For agents - [`/llms.txt`](/llms.txt) lists every page; [`/llms-full.txt`](/llms-full.txt) is all of them in one file. - Add `.md` to any docs URL for its Markdown, e.g. [`/docs/errors.md`](/docs/errors.md). - The [Agent Skill](/docs/agents/skill) teaches Claude Code and other coding agents to use the API well. --- # Getting started (https://getuser.app/docs/getting-started) > Get a key and make your first video in four calls. ## 1. Get a key In Getuser, open **Settings › Connect to AI › For developers** and click **New key**. Copy it: it starts with `gu_` and is shown once. ```bash export GETUSER_API_KEY="gu_..." ``` Check it works: ```bash curl https://getuser.app/api/v1/health/auth \ -H "Authorization: Bearer $GETUSER_API_KEY" # {"ok":true} ``` ## 2. See your account ```bash curl https://getuser.app/api/v1/me -H "Authorization: Bearer $GETUSER_API_KEY" ``` ```json { "workspace": { "id": "…", "name": "Acme" }, "app_name": "Acme Notes", "plan": "pro", "credits": { "balance": 2350, "held": 0, "resets_at": "2026-11-18T00:00:00Z", "daily": false, "video_cost": 25, "slideshow_cost": 25 }, "storage": { "used_bytes": 1830000000, "limit_bytes": 20000000000 }, "setup": { "videos": { "ready": true, "missing": [] }, "slideshows": { "ready": false, "missing": ["images"] } }, "key": { "id": "…" } } ``` `setup` has one gate for videos and one for slideshows. Videos need the app's profile, 5 demos and the founder's own reaction; slideshows need the app's profile and 5 images. If a gate is not `ready`, the founder adds what its `missing` lists (`app`, `demos`, `reaction`, `images`) in the app first. ## 3. Plan, for free `POST /videos/plan` renders nothing and costs nothing. It returns the drafts the Batch page would make, and the cost. ```bash curl https://getuser.app/api/v1/videos/plan \ -H "Authorization: Bearer $GETUSER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "format": "hook-demo", "count": 3, "lines": "all", "music": true, "theme": "white" }' ``` ```json { "drafts": [ { "format": "hook-demo", "pattern_id": "p07", "hook_text": "POV: you finally found a notes app that keeps up", "ending_text": "Acme Notes", "clip_id": "…", "hook_asset_id": null, "demo_id": "…", "ending_id": "…", "track": { "id": "…", "source": "stock" }, "theme": "white", "ai_label": true, "keep_audio": false } ], "cost": 75, "credits_after": 2275, "note": null } ``` ## 4. Render, then wait Send the drafts back with an `Idempotency-Key`, so a retry never makes twins: ```bash curl https://getuser.app/api/v1/videos \ -H "Authorization: Bearer $GETUSER_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "drafts": [ … the drafts from step 3 … ] }' ``` ```json { "batch_id": "…", "videos": [{ "id": "6f1c…", "status": "queued" }], "refused": null, "credits_held": 75 } ``` Check each video until it is `ready` (most take 1–3 minutes): ```bash curl https://getuser.app/api/v1/videos/6f1c… -H "Authorization: Bearer $GETUSER_API_KEY" ``` ```json { "id": "6f1c…", "format": "hook-demo", "status": "ready", "error_code": null, "error": null, "hook_text": "POV: you finally found a notes app that keeps up", "persona_id": "…", "batch_id": "…", "created_at": "2026-10-26T09:12:44Z", "poster_url": "https://…", "download_url": "https://…", "credits": 25 } ``` `download_url` works for one hour; read the video again for a fresh one. The video is also on the founder's Videos page. ## Next - [Concepts](/docs/concepts): personas, lines, footage, formats. - [Making videos](/docs/videos): every option of the planner. - [Errors](/docs/errors): what each refusal means. --- # Authentication (https://getuser.app/docs/authentication) > API keys, where to make them, how to rotate and revoke them. Every request carries a Getuser API key: ```http Authorization: Bearer gu_7Hk2pQ... ``` `x-api-key: gu_…` works too, for tools that only send that. Never put a key in a URL. ## Keys - Made in **Settings › Connect to AI › For developers › New key**, with a name you choose. - `gu_` plus 40 random characters. Shown **once**; Getuser keeps only a hash of it and its first 10 characters ("gu_7Hk2pQ…") so you can tell keys apart. - One key = one workspace. It acts as the founder who made it, with the same credits and limits. - Up to 10 live keys per workspace. - There is no test key: every call that renders spends real credits. Use `POST /videos/plan` (free) while you build. ## Rotate Make a new key, switch your code to it, then revoke the old one. Both work in between. ## Revoke **Settings › Connect to AI** lists every key with when it was last used. **Revoke** stops it at once: the next call answers `401 invalid_key`. Claude and ChatGPT connections are keys too (made when the founder clicks **Allow**). Disconnecting one revokes its key. ## When a key leaks Revoke it straight away, then make a new one. If you cannot sign in, email support@getuser.app and we revoke it for you. Keys start with `gu_` so GitHub's secret scanning and log scrubbers can spot them. ## When a key is refused | Code | Why | | -------------------------- | ----------------------------------------------------------------------- | | `invalid_key` (401) | Missing, mistyped or revoked. | | `terms_not_accepted` (403) | The Terms changed. The founder opens getuser.app once and accepts them. | | `suspended` (403) | The account is paused. | --- # Credits & limits (https://getuser.app/docs/credits-and-limits) > What each call costs, and the limits every plan has. The API spends the founder's credits, at the app's prices, through the same database checks. Nothing is cheaper or skips a limit because it came through the API. ## Prices | What | Credits | | ------------------------------------------------------------------------ | --------------------- | | A video (`POST /videos`) | 25 each | | A slideshow (`POST /slideshows`, `/slideshows/batch`) | 25 each | | A retry of a failed video (`POST /videos/{id}/retry`) | 25, held again | | New lines (`POST /ai/lines`) | adaptive, usually 4–5 | | A caption (`POST /ai/captions`) | adaptive, a few | | Everything else: reads, `POST /videos/plan`, uploads, cancel, plan items | free | AI writes are priced from what the model really used: a hold for the most it can cost first, the real cost after. Every AI response includes `credits`. ## Plans | Plan | Credits | About | | --- | --- | --- | | Free | 30 a day, up to 300 a month | 10 videos a month | | Pro | 2,500 a month | 60 videos a month | | Max | 12,500 a month | 300 videos a month | ## When credits are taken 1. `POST /videos` holds 25 per video. The call fails with `402 not_enough_credits` if the balance cannot cover all of them; nothing is held then. 2. A video that becomes `ready` is charged. 3. A video that fails or is cancelled gets its credits back. ## Other limits These come from the plan and answer `422` with their code: - `queue_full`: 40 videos waiting at once. - `storage_full`: finished videos fill the plan's storage. The founder deletes old videos in the app; the API cannot delete. - `uploads_used`: uploads a day and a month. - `ai_hour_used`, `ai_day_used`: AI writes an hour and a day. - `rerenders_used`: re-renders a month. - `setup_incomplete`: videos need the app, 5 demos and the founder's own reaction; slideshows need the app and 5 images (`detail.gate` says which). See the [pricing page](/pricing) for each plan's numbers, and [Rate limits](/docs/rate-limits) for request limits. --- # Rate limits (https://getuser.app/docs/rate-limits) > How many requests a workspace may send. | Requests | Limit | | ----------------------------------------------------- | -------------------------- | | All requests | 120 a minute per workspace | | Paid POSTs (`/videos`, `/slideshows`, `/ai/*`, retry) | 20 a minute per workspace | The limits count every key of the workspace together, including connected apps like Claude: more keys do not raise them. An address that sends more than 10 wrong keys in a minute gets `429 rate_limited` for a minute, even with a good key. Every response says where you stand (`RateLimit-Remaining` is a best guess; the `429` itself is exact): ```http RateLimit-Limit: 120 RateLimit-Remaining: 117 ``` Over the limit, the API answers `429 rate_limited` with `Retry-After` in seconds. Wait that long, then retry with the same `Idempotency-Key`. Rate limits are technical and the same on every plan. The business limits (credits, the waiting queue, AI writes an hour, uploads a day) are in [Credits & limits](/docs/credits-and-limits). ## Polling politely A video usually takes 1–3 minutes. Ask for a whole batch with `GET /videos?batch_id=…` in one call, about every 30 seconds plus 15 seconds for each video still waiting (never more often than that, at most 5 minutes apart). --- # Errors (https://getuser.app/docs/errors) > Every error code the API returns, and what to do about it. Errors always have the same shape, with an HTTP status that fits: ```json { "error": { "code": "not_enough_credits", "message": "This needs 25 credits; you have 10.", "docs": "https://getuser.app/docs/errors#not_enough_credits" } } ``` - `code` is stable: switch on it. - `message` is English, for people; it may change. - `invalid_input` also has `issues[]` (field and problem); `setup_incomplete` has `detail.gate` (`videos` or `slideshows`) and `detail.missing`. ## All codes | Code | HTTP | Example message | What to do | | --- | --- | --- | --- | | `invalid_input` | 400 | The request is not valid. See issues. | Read `error.issues[]`: each names the field and what is wrong with it. | | `invalid_key` | 401 | The API key is missing, wrong or revoked. Make a new one at getuser.app/settings/api. | Send `Authorization: Bearer gu_…`. Make a new key in Settings › Connect to AI. | | `not_enough_credits` | 402 | This needs 25 credits; you have 10. | Wait for the next credits, make fewer, or upgrade. Nothing was charged. | | `suspended` | 403 | This account is paused. Email support@getuser.app if you think that is a mistake. | Email support@getuser.app. | | `terms_not_accepted` | 403 | The Terms changed. Open getuser.app once and accept them, then try again. | Sign in to getuser.app in a browser and accept the new Terms, then retry. | | `not_found` | 404 | Not found in this workspace. | Check the id. Ids from another workspace are never visible. | | `already_queued` | 409 | This video is already queued or rendering. | Poll `GET /v1/videos/{id}` instead of queueing again. | | `already_rendered` | 409 | This video is already done. | Read its `download_url` with `GET /v1/videos/{id}`. | | `already_scheduled` | 409 | This video is already scheduled. | Read the posting plan with `GET /v1/plan`. | | `idempotency_conflict` | 409 | This Idempotency-Key was used with a different request body. | Use a new key for a new request; reuse a key only to retry the same body. | | `request_in_progress` | 409 | A request with this Idempotency-Key is still running. | Wait a few seconds, then retry with the same key: it answers the first request’s result. | | `too_large` | 413 | The file is larger than your plan allows. | Trim or compress the file, or upgrade. | | `setup_incomplete` | 422 | Finish setting up at getuser.app first. Videos need your app, 5 demos and your own reaction. Missing: demos. | `detail.gate` says which: videos need the app, 5 demos and the founder’s own reaction; slideshows need the app and 5 images. The founder adds what `detail.missing` lists in the app. | | `storage_full` | 422 | Your storage is full. Delete videos you no longer need at getuser.app/videos, or upgrade. | The founder deletes old videos at getuser.app/videos (the API cannot delete), or upgrades. | | `queue_full` | 422 | 40 videos are already waiting. Let some finish first. | Let some finish, then queue more. | | `ai_paused` | 422 | AI writing is paused for a moment. Try again later. | Retry later. | | `ai_unavailable` | 422 | The AI writer did not answer. No credits were charged; try again later. | Retry later. | | `rerenders_used` | 422 | That's all the free re-renders this month. | Make a new video instead. | | `uploads_used` | 422 | That's all the uploads your plan allows for now. | Reuse uploads you have, wait, or upgrade. | | `posts_used` | 422 | That's all the posts your plan allows this month. | Wait for next month or upgrade. | | `ai_hour_used` | 422 | That is a lot of AI writes this hour. Try again in a bit. | Retry in a while. | | `ai_day_used` | 422 | That is all the AI writes for today. Try again tomorrow. | Retry tomorrow. | | `files_gone` | 422 | The files of this video are gone. Render it again first. | Render it again first. | | `not_failed` | 422 | Only a failed post can be tried again. | Check the status before retrying. | | `account_not_connected` | 422 | That account is not connected. | The founder connects the TikTok or Instagram account in the app. | | `text_too_long` | 422 | The text is too long for the screen. | Shorten the hook or ending text named in `detail.field`. | | `not_ready` | 422 | An upload it uses is still processing or was deleted. | Poll `GET /v1/assets/{id}` until `status` is `ready`. | | `no_demo` | 422 | Upload a demo of your app first. | Upload a demo (see Uploading footage). | | `no_personas` | 422 | No persona fits these settings. | Widen `persona_ids` or leave it out. | | `no_lines` | 422 | No hook line fits these settings. | Use `lines: 'all'`, or write lines with `POST /v1/ai/lines`. | | `too_many_keys` | 422 | A workspace can have 10 live keys. Revoke one first. | Revoke a key you no longer use. | | `rate_limited` | 429 | Too many requests. Wait for Retry-After seconds. | Wait for the `Retry-After` seconds, then retry. | | `internal` | 500 | Something went wrong on our side. Try again. | Retry with the same Idempotency-Key. | | `unavailable` | 503 | Getuser is paused for maintenance. Try again in a few minutes. | Retry in a few minutes. | ## Retrying Retry `429`, `500` and `503`, with the same `Idempotency-Key` and a growing wait. Do not retry `4xx` business refusals unchanged: they answer the same until something changes. --- # Idempotency (https://getuser.app/docs/idempotency) > Retry safely without making a video twice. Send `Idempotency-Key: ` on every POST that spends credits: `/videos`, `/slideshows`, `/slideshows/batch`, `/ai/lines` and `/ai/captions`. Other POSTs do not take one; to start an upload of a file safely twice, send its `fingerprint` (see [Uploading footage](/docs/uploading)). - Same key, same body: the API does the work once. A replay answers `200` with the first result and `Idempotent-Replayed: true`. - Same key, different body: `409 idempotency_conflict` (`/videos`). An AI write sent again with the same key answers its first text and is not charged again; sent again while the first is still writing, it answers `409 request_in_progress` (retry in a few seconds). Kept answers are deleted after a day. - No key: a retry may make a duplicate (and charge for it). For a batch, one key covers the whole request: each video gets its own key derived from it (`uuidv5(key, index)`), so a retried batch never makes twins, even if it stopped half way. The key must be a UUID. Make a new one for every new request: ```js const res = await fetch('https://getuser.app/api/v1/videos', { method: 'POST', headers: { Authorization: `Bearer ${process.env.GETUSER_API_KEY}`, 'Content-Type': 'application/json', 'Idempotency-Key': crypto.randomUUID(), }, body: JSON.stringify({ drafts }), }); ``` --- # Pagination (https://getuser.app/docs/pagination) > How lists are paged. Every list answers `{ "data": [ … ], "next_cursor": … }`. `GET /videos` is paged with a cursor; the short lists (`/personas`, `/lines`, `/assets`, `/recipes`, `/slide-formats`, `/music`, `/profiles`, `/plan`) come whole, with `next_cursor: null`. ```bash curl "https://getuser.app/api/v1/videos?limit=50" -H "Authorization: Bearer $GETUSER_API_KEY" ``` ```json { "data": [ … ], "next_cursor": "eyJ0IjoiMjAyNi0xMC0yNlQwOTo…" } ``` - `limit` (`GET /videos`): 1–100, default 20. - `cursor`: pass `next_cursor` back to get the next page. `null` means there is no next page. - Newest first. Cursors are opaque: do not build or edit them. ```python import os, requests url = "https://getuser.app/api/v1/videos" headers = {"Authorization": f"Bearer {os.environ['GETUSER_API_KEY']}"} params = {"limit": 100} while True: page = requests.get(url, headers=headers, params=params).json() for video in page["data"]: print(video["id"], video["status"]) if not page["next_cursor"]: break params["cursor"] = page["next_cursor"] ``` --- # Concepts (https://getuser.app/docs/concepts) > Personas, lines, footage, formats, batches and the posting plan. ## Personas The people who react at the start of a video. **Every persona is made by AI** and is labelled so: persona objects carry `ai_made: true`, and videos should be posted with each platform's AI label on. Never present a persona as a real customer. `GET /personas` lists the personas the founder can use: `id`, `name`, `language`, `poster_url`, `ai_made`, `chosen` (picked by the founder), `clip_ids`, and `clips` (each reaction clip's `id`, `name`, `duration` and whether it is an `opener`). Reactions the founder switched off are left out. ## Lines The words on screen at the start (`hook_text`). Two sources: - **Library lines**: Getuser's tested patterns, filled in for the founder's app. - **Own lines**: written by the founder, or by AI with `POST /ai/lines`. `GET /lines` (`?source=all|own`, `?lang=`) lists them: `id`, `kind`, `own`, `language`, the `template`, and `text`, the line filled in for the founder's app (`null` when it does not fit it). In the planner, `lines: "all"` uses both; `"own"` only the founder's. ## Footage Uploads (`GET /assets`), each with a `kind`: | Kind | What | | -------- | -------------------------------------------------------------------------------------- | | `demo` | A screen recording of the app. The middle of a Hook + Demo video. | | `hook` | The founder's own reaction clip, used instead of a persona. | | `ending` | The last seconds, naming the app. | | `image` | Photos for slideshows (B-roll about the app or brand). | | `music` | The founder's own music. Stock music is in `GET /music` (only tracks cleared for use). | Each asset has `id`, `kind`, `role` (images only), `name`, `status`, `uploaded`, `duration`, `url` (a one-hour link once ready), `reject_reason`, `expires_at` and `created_at`. An asset is `processing` after upload, then `ready` or `rejected` (`reject_reason` says why). Only `ready` assets can be used. Filter with `GET /assets?kind=demo`. ## Formats - **Hook + Demo** (`hook-demo`): a 2-second reaction with a line, then the app's demo, then the ending. - **One caption** (`one-caption`): one clip with one caption over it, often the founder's own. - **Slideshows**: still slides from a saved slide format (`GET /slide-formats`: `id`, `name`, `size` `portrait` or `story`, `slides`, `hooks`, `language`). ## Batches Several videos queued together share a `batch_id`. `GET /batches/{id}` returns them all and a zip download plan. Cancel a whole batch with `POST /batches/{id}/cancel`. ## Recipes Saved batch settings from the app (`GET /recipes`). Pass `recipe_id` to `POST /videos/plan` to reuse one. ## The posting plan The calendar of what goes out when, per social profile (`GET /profiles`). The API can add and remove items; posting stays in the app. See [The posting plan](/docs/posting-plan). ## Setup Videos and slideshows each have their own setup: - **Videos** need the app's profile, 5 demos and the founder's own reaction clip. - **Slideshows** need the app's profile and 5 images (any photos except the app icon: B-roll about the app or brand). No demos, no face. Until a gate is done, making that kind answers `422 setup_incomplete` with `detail.gate` (`videos` or `slideshows`) and `detail.missing` (`app`, `demos`, `reaction`, `images`). `GET /me` shows both under `setup.videos` and `setup.slideshows`. --- # Uploading footage (https://getuser.app/docs/uploading) > 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 ```bash 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 }' ``` ```json { "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 ```bash curl -X PUT "$UPLOAD_URL" -H "content-type: video/mp4" --data-binary @onboarding.mp4 ``` ## 3. Finish, then wait ```bash 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. - `kind` is one of `demo`, `hook`, `ending`, `image`, `music`. - The plan sets how many uploads a day and a month: `uploads_used` (422); bigger files answer `too_large` (413). - Uploads that go unused are kept for the plan's period (see the [pricing page](/pricing)); 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. --- # Making videos (https://getuser.app/docs/videos) > Plan for free, render for 25 credits each, then download. ## Plan `POST /videos/plan` runs the same planner as the Studio and Batch pages, on the server. It renders nothing and is free. | Field | Type | Meaning | | ------------- | -------------------------------------------------- | ---------------------------------------------------------------------- | | `format` | `"hook-demo"` \| `"one-caption"` | The video's shape. See [Concepts](/docs/concepts#formats). | | `count` | integer | How many videos: at most 20, and no more than the credits pay for. | | `persona_ids` | uuid[] | Only these personas. Leave out for all usable ones. | | `demo_ids` | uuid[] | Only these demos. Leave out for all. | | `lines` | `"all"` \| `"own"` | Library and own lines, or own only. | | `music` | boolean | Stock music under every video, or none. | | `theme` | `"white"` \| `"black"` \| `"box"` \| `"light-box"` | Caption style. | | `recipe_id` | uuid | Start from a saved recipe. | | `variant` | integer | Ask for a different plan with the same settings (the app's "Re-plan"). | The planner is deterministic: the same input and `variant` give the same drafts. The answer (`note` says why, when the plan has fewer drafts than asked; else `null`): ```json { "drafts": [ { "format": "hook-demo", "pattern_id": "p07", "hook_text": "POV: you finally found a notes app that keeps up", "ending_text": "Acme Notes", "clip_id": "…", "hook_asset_id": null, "demo_id": "…", "ending_id": "…", "track": { "id": "…", "source": "stock" }, "theme": "white", "ai_label": true, "keep_audio": false } ], "cost": 125, "credits_after": 2225, "note": null } ``` …or the blocker the app would show: `no_demo`, `no_personas`, `no_lines`, `not_enough_credits`, `setup_incomplete`. **Agents:** show the founder the drafts and the cost, and render only after they agree. ## Render ```bash curl https://getuser.app/api/v1/videos \ -H "Authorization: Bearer $GETUSER_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "drafts": [ … ] }' ``` 1–20 drafts of one format, from the planner or edited by you (change a `hook_text`, swap a `clip_id`). 25 credits each are held now and charged when each video is ready. Several drafts are queued as one batch, in order; if one is refused, the ones before it stay queued, the ones after it are not tried, and `refused` says which and why: ```json { "batch_id": "…", "videos": [ { "id": "…", "status": "queued" }, { "id": "…", "status": "queued" } ], "refused": { "index": 2, "code": "not_enough_credits", "message": "This needs 25 credits; you have 10." }, "credits_held": 50 } ``` ## Wait for it ```bash curl "https://getuser.app/api/v1/videos?batch_id=…" -H "Authorization: Bearer $GETUSER_API_KEY" ``` `status` goes `queued` → `rendering` → `ready` (or `failed`, with `error_code` and `error`). A video usually takes 1–3 minutes; with a queue, longer. Check about every 30 seconds, plus 15 seconds for each video still waiting (at most every 5 minutes), and ask for a whole batch in one call. There are no webhooks yet. ## Download A `ready` video has `poster_url` and `download_url`, both valid for **one hour**. Read the video again for fresh links. `GET /batches/{id}` gives every link of a batch and a zip plan. ## Retry and cancel - `POST /videos/{id}/retry`: try a `failed` video again. It holds 25 credits again, as in the app, and gives them back if it fails again. - `POST /videos/{id}/cancel`: cancel a waiting video; its credits come back. - `POST /batches/{id}/cancel`: cancel every waiting video of a batch. Videos cannot be deleted through the API. When storage is full, rendering answers `422 storage_full`; the founder deletes old videos at getuser.app/videos. --- # Slideshows (https://getuser.app/docs/slideshows) > Make image slideshows from a saved slide format. Slideshows are still images in a row, from a slide format the founder saved in the app. 25 credits each, like a video. They need their own setup: the app's profile and 5 images (photos about the app or brand, not the app icon). No demos or reaction. `GET /me` shows it as `setup.slideshows`; until it is `ready`, making one answers `422 setup_incomplete` with `detail.gate: "slideshows"`. ## Find a format ```bash curl https://getuser.app/api/v1/slide-formats -H "Authorization: Bearer $GETUSER_API_KEY" ``` ```json { "data": [{ "id": "…", "name": "5 reasons", "size": "portrait", "slides": 6, "hooks": 3, "language": "en", "created_at": "…" }], "next_cursor": null } ``` ## Make one ```bash curl https://getuser.app/api/v1/slideshows \ -H "Authorization: Bearer $GETUSER_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "format_id": "…", "slides": "auto" }' ``` `slides` is how many slides in all, the first and last included (2–12), or `"auto"` (the default). The text is written from the founder's app profile. The answer is `{ "id": "…", "status": "queued" }`. ## Make several `POST /slideshows/batch` takes `{ "format_id": "…", "count": 5 }` (1–20) and makes that many from one format, each with the format's own number of slides, as the Batch page does. It answers like `POST /videos`: `{ "batch_id", "videos", "refused", "credits_held" }`. ## Get the images `GET /slideshows/{id}` returns the same fields as a video, plus `slides` (`[{ "url": "…" }]`, one per slide once `ready`) and `zip` (a name and the files to put in it). Links last one hour. --- # AI writing (https://getuser.app/docs/ai-writing) > New lines and post captions, written by AI and priced by length. ## New lines ```bash curl -X POST https://getuser.app/api/v1/ai/lines \ -H "Authorization: Bearer $GETUSER_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" ``` No body: the lines are written from the founder's app profile and saved as their own lines. The answer lists the new lines and the `credits` charged (usually 4–5). ## A caption ```bash curl https://getuser.app/api/v1/ai/captions \ -H "Authorization: Bearer $GETUSER_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "video_id": "6f1c…" }' ``` ## Cost and limits AI writes hold the most they can cost, then charge what the model really used. Limits per hour and per day follow the plan (`ai_hour_used`, `ai_day_used`). When the AI writer is switched off or does not answer, the call fails with `ai_paused` or `ai_unavailable` and nothing is charged. --- # The posting plan (https://getuser.app/docs/posting-plan) > Put videos on the calendar. Posting stays in the app. ## Profiles ```bash curl https://getuser.app/api/v1/profiles -H "Authorization: Bearer $GETUSER_API_KEY" ``` Each profile card (`id`, `name`, `accounts`) holds up to one TikTok and one Instagram account (`platform`, `username`, `display_name`, `connected`). No tokens or stats are returned. ## Read the calendar ```bash curl "https://getuser.app/api/v1/plan?from=2026-11-02T00:00:00Z&to=2026-11-09T00:00:00Z" -H "Authorization: Bearer $GETUSER_API_KEY" ``` `from` and `to` are ISO times with a zone; left out, the next 30 days. Each item is the video itself: `id` (the video's id), `video_id`, `profile_id`, `planned_at`, `hook_text`, `format`. ## Add and remove ```bash curl https://getuser.app/api/v1/plan \ -H "Authorization: Bearer $GETUSER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "video_id": "6f1c…", "profile_id": "…", "planned_at": "2026-11-02T12:00:00Z" }' ``` Only a finished video can go on the plan. Leave out `profile_id` to keep the profile of a video already on the plan. Captions are not set through the API yet: the founder writes them when posting, or asks for one with `POST /ai/captions`. `DELETE /plan/{id}` (the video's id) takes it off the calendar. The video stays. ## Why the API does not post TikTok requires the person posting to see the post, pick its privacy and confirm it inside the app, and Getuser's TikTok review is still pending. So the API and agents fill the calendar, and the founder posts from Getuser (or with the app's auto-post, set up in the app). This may change after the review; [Changelog](/docs/changelog) will say. --- # Agents & MCP (https://getuser.app/docs/agents) > Use Getuser from Claude, ChatGPT, Claude Code, Cursor or any MCP client. Getuser's MCP server gives an AI agent the same tools a founder has in the app, shaped for chat: plan first (free), render second (paid), check and download. ```text https://mcp.getuser.app/mcp ``` Streamable HTTP, stateless. Two ways to sign in: | Client | Sign-in | | ----------------------------------------------- | -------------------------------------------------------------------------------- | | claude.ai, Claude Desktop and mobile, ChatGPT | OAuth: the founder signs in on getuser.app and clicks **Allow**. No key to copy. | | Claude Code, Cursor, scripts, other MCP clients | A Bearer API key, `Authorization: Bearer gu_…` (OAuth works there too). | Both end in the same thing: access to the founder's workspace, shown in **Settings › Connect to AI** (one row per app under **Connected**), and stopped at once with **Disconnect**. With OAuth, the client opens `getuser.app/connect/agent`. It shows the app's name (marked "not verified" unless the app publishes its details on its own domain), where access goes, a warning when it is an app on the founder's computer, what the app can and cannot do, and the credit balance. The founder clicks **Allow** or **Cancel**. Connecting the same app again replaces its earlier connection. ## What an agent can do - Read the account (with what setup is still missing), personas, footage, lines, slideshow formats and profiles. - Plan videos for free, then render them (25 credits each) after the founder agrees. - Make slideshows from a saved format (25 credits each). - Write lines and captions with AI (priced by length). - Check status and hand out 1-hour download links. A video usually takes 1–3 minutes. - Add videos to the posting plan and take them off. ## What it cannot do - Post to TikTok or Instagram. - Delete videos, uploads, lines or profiles. - Change the plan, billing, settings, the app's profile or the global personas. ## What it costs The same credits as the app; see [Credits & limits](/docs/credits-and-limits). Every paid tool says its cost in its description, and `render_videos` takes only the drafts `plan_videos` returned, so an agent always shows the plan first. Spending through an AI app shows on the founder's Credits page as "via an AI app". - [Claude](https://getuser.app/docs/agents/claude) - [ChatGPT](https://getuser.app/docs/agents/chatgpt) - [Claude Code](https://getuser.app/docs/agents/claude-code) - [Cursor and others](https://getuser.app/docs/agents/cursor) - [Tools](https://getuser.app/docs/agents/tools) - [Agent Skill](https://getuser.app/docs/agents/skill) --- # Claude (https://getuser.app/docs/agents/claude) > Add Getuser as a custom connector on claude.ai, Claude Desktop and the Claude apps. 1. On claude.ai, open **Settings › Connectors › Add custom connector**. 2. Name: `Getuser`. URL: `https://mcp.getuser.app/mcp`. Leave the advanced OAuth fields empty. 3. Click **Add**, then **Connect**. Getuser's consent page opens: sign in, check the list of what Claude may do, click **Allow**. 4. In a chat, ask: "Plan 5 videos for my app with Getuser." In Getuser, **Settings › Connect to AI › Connect Claude** copies the address and shows the same steps. The connector then works in claude.ai, Claude Desktop and the Claude mobile apps on the same account. On Team and Enterprise plans, an owner may need to allow custom connectors first. Do not paste a key into the connector URL. Claude's own guidance forbids credentials in URLs, and Getuser does not read them there. The plain-words version for founders: [Connect Claude](/docs/guides/connect-claude). ## Claude Desktop with a key If you prefer a key over OAuth, add Getuser to `claude_desktop_config.json` the way [Cursor and others](/docs/agents/cursor) do. --- # ChatGPT (https://getuser.app/docs/agents/chatgpt) > Add Getuser as a connector (app) in ChatGPT. 1. On chatgpt.com, open **Settings › Apps & Connectors**. Under **Advanced settings**, turn on **Developer mode** (needed for custom connectors on most plans). 2. Click **Create**. Name: `Getuser`. MCP server URL: `https://mcp.getuser.app/mcp`. Keep the suggested sign-in option (OAuth). 3. Click **Create**. Getuser's consent page opens: sign in, click **Allow**. 4. In a new chat, pick Getuser from the **+** menu (or Developer mode's tool list). In Getuser, **Settings › Connect to AI › Connect ChatGPT** copies the address and shows the same steps. ChatGPT renames these menus from time to time; the URL and the OAuth sign-in stay the same. The plain-words version for founders: [Connect ChatGPT](/docs/guides/connect-chatgpt). --- # Claude Code (https://getuser.app/docs/agents/claude-code) > One command adds Getuser to Claude Code. With an API key (make one in **Settings › Connect to AI › For developers**): ```bash claude mcp add --transport http getuser https://mcp.getuser.app/mcp \ --header "Authorization: Bearer $GETUSER_API_KEY" ``` Or without a key, signing in through the browser: ```bash claude mcp add --transport http getuser https://mcp.getuser.app/mcp ``` Then run `/mcp` in Claude Code and pick **Authenticate** next to getuser. Getuser's page opens in the browser: sign in and click **Allow**. It warns that the app runs on your computer; that is expected. Check it: ask Claude Code "How many Getuser credits do I have?". ## Add the skill The [Agent Skill](/docs/agents/skill) teaches Claude Code the habits that keep costs right: plan before rendering, poll politely, never invent ids. --- # Cursor and others (https://getuser.app/docs/agents/cursor) > JSON config for Cursor, Claude Desktop, Windsurf and other MCP clients. Most clients take the same JSON. Put your key in an environment variable rather than in the file when the client allows it. `~/.cursor/mcp.json` (or `.cursor/mcp.json` in a project). Leave out `headers` to sign in through the browser instead: ```json { "mcpServers": { "getuser": { "url": "https://mcp.getuser.app/mcp", "headers": { "Authorization": "Bearer gu_..." } } } } ``` `claude_desktop_config.json`, through the `mcp-remote` bridge: ```json { "mcpServers": { "getuser": { "command": "npx", "args": ["-y", "mcp-remote", "https://mcp.getuser.app/mcp", "--header", "Authorization: Bearer ${GETUSER_API_KEY}"], "env": { "GETUSER_API_KEY": "gu_..." } } } } ``` Or skip the key and add Getuser as a connector on claude.ai: see [Claude](/docs/agents/claude). - Transport: Streamable HTTP at `https://mcp.getuser.app/mcp`. - Auth: `Authorization: Bearer gu_…`, or OAuth 2.1 with PKCE (S256 only). Discovery at `/.well-known/oauth-protected-resource/mcp` and `/.well-known/oauth-authorization-server`; clients register with `/oauth/register` (dynamic registration) or a Client ID Metadata Document; tokens at `/oauth/token`. Access tokens last 1 hour, refresh tokens 30 days. - Try it with the MCP Inspector: `npx @modelcontextprotocol/inspector`. --- # Tools (https://getuser.app/docs/agents/tools) > Every tool the MCP server offers, and what it costs. Nineteen tools. None of them posts or deletes. | Tool | What it does | Cost | | --- | --- | --- | | `get_account` | Plan, credits and about how many videos they make, when they reset, and whether videos and slideshows are ready to make or what each still needs. | free | | `list_personas` | Personas (AI-made, labelled as AI) with poster links and clip ids. | free | | `list_footage` | Uploads (`kind`: demo, hook, ending, image, music) with their status. | free | | `list_lines` | Hook lines, from the library and your own (`source`, `lang`). | free | | `list_slideshow_formats` | Your saved slideshow formats, for make_slideshows. | free | | `plan_videos` | A numbered plan with the drafts, the cost and the credits after; renders nothing (`count`, `format`, `persona_ids`, `demo_ids`, `lines`, `music`, `theme`, `variant`). | free | | `render_videos` | Renders the `drafts` from plan_videos (1–20, one format). | 25 credits per video (held, charged when ready, back on failure) | | `get_videos` | Status and 1-hour download links, by `ids`, `batch_id`, or the 10 newest; says when to check again. | free | | `cancel_videos` | Cancels waiting videos (`ids` or `batch_id`); their credits come back. | free | | `retry_video` | Tries a failed video again. | 25 credits held again, as in the app | | `make_slideshows` | Slideshows from a saved format (`format_id`, `count` 1–20). | 25 credits each | | `write_lines` | AI writes hook lines from your app profile and saves them as your own. | AI credits (about 4–5) | | `write_caption` | AI writes a post caption for one video (`video_id`, `platform`). | AI credits (about 1–3) | | `list_profiles` | TikTok and Instagram profile cards, and which accounts are connected. | free | | `get_plan` | The posting calendar (`from`, `to`). | free | | `add_to_plan` | Puts a video on the calendar (`video_id`, `profile_id`, `planned_at`); does not post. | free | | `remove_from_plan` | Takes a video off the calendar; the video stays. | free | | `start_upload` | Starts an upload and returns a URL to PUT the file to (for apps that can send bytes; in a chat, upload in the app). | free | | `finish_upload` | Says the bytes are in, so Getuser processes the file. | free | ## How the tools behave - **Plan, then pay.** `render_videos` takes the `drafts` from `plan_videos` (1–20, one format); a bare "make 5 videos" is refused, so the founder always sees the plan and its cost first. - **No double charges.** The server sends an idempotency key with every paid call itself: the same drafts sent twice answer the same videos ("These drafts were already sent … no new charge"). - **Waiting.** A video usually takes 1–3 minutes. While videos render, `get_videos` answers "check again in about N seconds" (30 seconds plus 15 for each waiting video, at most 5 minutes); follow that hint. There are no webhooks yet. - **Short results.** Plain sentences, then short JSON. Posters come as links, not images, to keep the chat small. Download links last one hour. - **Annotations.** Paid tools carry `destructiveHint: false` and `openWorldHint: false`; tools that are safe to repeat carry `idempotentHint: true`. - **Setup.** `get_account` says for videos and for slideshows whether they are ready or what each still needs. Videos need the app, 5 demos and the founder's own reaction; slideshows need the app and 5 images. - **Uploads.** `start_upload` and `finish_upload` are for apps that can send file bytes. In a chat, the founder uploads in the app and the chat uses it. - **Refusals.** A refusal comes back as a tool error with the API's message and what to do: credits at `getuser.app/settings?tab=plan`, setup at `getuser.app`, full storage at `getuser.app/videos`, new Terms by opening getuser.app once, a disconnected app by connecting again. --- # Agent Skill (https://getuser.app/docs/agents/skill) > A SKILL.md that teaches Claude Code and other coding agents to use Getuser well. The Getuser skill is a folder with a `SKILL.md` and an API reference. It tells an agent when to reach for Getuser, to plan before rendering, how to poll, what to do on `not_enough_credits`, and never to invent ids. - Download: https://getuser.app/docs/getuser-skill.zip - SKILL.md: https://getuser.app/skill.md ## Install in Claude Code Unzip it into your skills folder: ```bash mkdir -p ~/.claude/skills && unzip getuser-skill.zip -d ~/.claude/skills ``` That gives `~/.claude/skills/getuser/SKILL.md`. For one project only, unzip into `.claude/skills/` in the project instead. ## Other agents Point the agent at [`/skill.md`](/skill.md), or paste it into its instructions. It works with the REST API alone, or with the MCP server. --- # Example prompts (https://getuser.app/docs/agents/prompts) > Prompts that work well once Getuser is connected. ## Videos > Plan 5 Hook + Demo videos with my newest demo, show me before rendering. > Re-plan with different lines, keep the same personas. > Render the first three only. > Make one One caption video with my own reaction clip and the line "I built this in a weekend". ## Status and downloads > Are the videos from this morning ready? Give me the links. > Cancel the ones still waiting. ## Slideshows > Make 3 slideshows from my "5 tips" format. ## Writing > Write 10 new lines for my app, then plan 5 videos that use only my own lines. ## Posting plan > Put the 5 new videos on my TikTok profile, one a day at 19:00 Jakarta time from Monday. ## Account > How many credits do I have, and how many videos is that? Ask in any language: the tools answer in English and the agent translates. --- # Safety (https://getuser.app/docs/agents/safety) > The guard rails around agents. - **Plans before paying.** Planning is free; rendering needs drafts from a plan. Paid tools state their cost. - **Cannot post or delete.** Nothing reaches TikTok or Instagram, and nothing can be deleted, so an agent mistake never destroys work. Waiting videos can be cancelled and their credits come back. - **Same limits as the app.** Credits, the waiting queue, storage, uploads and AI writes are checked by the same database functions. - **Disconnect any time.** Each connection is a key in **Settings › Connect to AI**; revoking it stops the next call. - **No credentials in URLs.** OAuth for chat apps, Bearer headers for everything else. - **Workspace walls.** A key reads and writes only its own workspace; ids from another workspace answer `not_found`. - **AI personas stay labelled.** Persona objects carry `ai_made: true`; posts should keep each platform's AI label on. What an agent reads (videos, lines, captions) goes to that agent's provider under the founder's own account with it. Getuser sends nothing to them on its own. --- # Changelog (https://getuser.app/docs/changelog) > What changed in the API, newest first. `/v1` only gets additive changes: new endpoints, new fields, new error codes. Anything that would break a working integration waits for `/v2`, and we tell you ahead. ## 2026-10-26 - The v1 docs: REST API, MCP server, Agent Skill, `llms.txt`. --- # API Reference (https://getuser.app/docs/api-reference) > Every endpoint of the Getuser API, with examples in curl, JavaScript and Python. Base URL `https://getuser.app/api/v1`. Every request needs `Authorization: Bearer gu_…` ([Authentication](/docs/authentication)). The pages in this tab are made from [`openapi.json`](/openapi.json) (OpenAPI 3.1). Point your own tools at it to generate a client. - [Account](https://getuser.app/docs/api-reference/account/get-me): Your plan, credits and setup. - [Videos](https://getuser.app/docs/api-reference/videos/post-videos-plan): Plan, render and download. - [Uploads](https://getuser.app/docs/api-reference/uploads/post-uploads): Send footage to Getuser. - [Errors](https://getuser.app/docs/errors): Every error code. --- # Check that a key works (https://getuser.app/docs/api-reference/account/get-health-auth) OpenAPI: https://getuser.app/openapi.json --- # Your workspace, plan, credits, storage and setup (https://getuser.app/docs/api-reference/account/get-me) OpenAPI: https://getuser.app/openapi.json --- # Write a post caption for a video (AI credits) (https://getuser.app/docs/api-reference/ai/post-ai-captions) OpenAPI: https://getuser.app/openapi.json --- # Write new hook lines for your app (AI credits) (https://getuser.app/docs/api-reference/ai/post-ai-lines) Written from your app profile and saved as your own lines. OpenAPI: https://getuser.app/openapi.json --- # One upload (https://getuser.app/docs/api-reference/library/get-assets-by-id) OpenAPI: https://getuser.app/openapi.json --- # Your uploads (https://getuser.app/docs/api-reference/library/get-assets) OpenAPI: https://getuser.app/openapi.json --- # Hook lines: the library and your own (https://getuser.app/docs/api-reference/library/get-lines) OpenAPI: https://getuser.app/openapi.json --- # Stock music cleared for your videos (https://getuser.app/docs/api-reference/library/get-music) OpenAPI: https://getuser.app/openapi.json --- # Personas you can use, with their reactions (https://getuser.app/docs/api-reference/library/get-personas) Every persona is an AI-made person, and every video labels it as AI. Reactions you switched off are left out. OpenAPI: https://getuser.app/openapi.json --- # Your saved Batch settings (https://getuser.app/docs/api-reference/library/get-recipes) OpenAPI: https://getuser.app/openapi.json --- # Your slideshow formats (https://getuser.app/docs/api-reference/library/get-slide-formats) OpenAPI: https://getuser.app/openapi.json --- # Take a video off the calendar (the video stays) (https://getuser.app/docs/api-reference/posting-plan/delete-plan-by-id) OpenAPI: https://getuser.app/openapi.json --- # The posting calendar (https://getuser.app/docs/api-reference/posting-plan/get-plan) Defaults to the next 30 days. OpenAPI: https://getuser.app/openapi.json --- # Your TikTok and Instagram profile cards (https://getuser.app/docs/api-reference/posting-plan/get-profiles) OpenAPI: https://getuser.app/openapi.json --- # Put a finished video on the calendar (https://getuser.app/docs/api-reference/posting-plan/post-plan) Placing is not posting: you post from the app. OpenAPI: https://getuser.app/openapi.json --- # A slideshow and its slides (https://getuser.app/docs/api-reference/slideshows/get-slideshows-by-id) OpenAPI: https://getuser.app/openapi.json --- # Make several slideshows from one format: 25 credits each (https://getuser.app/docs/api-reference/slideshows/post-slideshows-batch) OpenAPI: https://getuser.app/openapi.json --- # Make a slideshow from a format: 25 credits (https://getuser.app/docs/api-reference/slideshows/post-slideshows) OpenAPI: https://getuser.app/openapi.json --- # Say the bytes are in; processing starts (https://getuser.app/docs/api-reference/uploads/post-uploads-by-id-complete) Poll GET /v1/assets/{id} until status is ready. A file larger than the size its upload declared is deleted and refused. OpenAPI: https://getuser.app/openapi.json --- # Start an upload (https://getuser.app/docs/api-reference/uploads/post-uploads) Then PUT the bytes to upload_url and call /v1/uploads/{id}/complete. The same file again answers the upload already there. OpenAPI: https://getuser.app/openapi.json --- # A batch, its videos and a zip download plan (https://getuser.app/docs/api-reference/videos/get-batches-by-id) OpenAPI: https://getuser.app/openapi.json --- # A video, with its download link once ready (https://getuser.app/docs/api-reference/videos/get-videos-by-id) OpenAPI: https://getuser.app/openapi.json --- # Your videos, newest first (https://getuser.app/docs/api-reference/videos/get-videos) OpenAPI: https://getuser.app/openapi.json --- # Stop what of a batch still waits (https://getuser.app/docs/api-reference/videos/post-batches-by-id-cancel) OpenAPI: https://getuser.app/openapi.json --- # Stop a waiting video; its credits come back (https://getuser.app/docs/api-reference/videos/post-videos-by-id-cancel) OpenAPI: https://getuser.app/openapi.json --- # Render a failed video again (https://getuser.app/docs/api-reference/videos/post-videos-by-id-retry) OpenAPI: https://getuser.app/openapi.json --- # Plan videos (free, renders nothing) (https://getuser.app/docs/api-reference/videos/post-videos-plan) The app's own planner. Show the drafts and their cost, then send them to POST /v1/videos. OpenAPI: https://getuser.app/openapi.json --- # Render drafts: 25 credits each (https://getuser.app/docs/api-reference/videos/post-videos) Credits are held now and charged when each video is ready; a failed or cancelled video gives them back. Send an Idempotency-Key. OpenAPI: https://getuser.app/openapi.json