Giving an AI assistant or a script access to a paid service raises two fair questions: what stops it from spending without asking, and what happens if the key leaks? The Yeşilçam Studios CLI and MCP server answer both with the same design. Every operation that spends tokens returns a price first and charges nothing, and every API key is limited in what it can do. This guide explains both, so you can decide how much freedom to give your assistant. Installation is covered in the setup guide.
Why does every paid tool return a quote first?
Tools that spend tokens never charge on the first call. They return a quote marked quote_only_nothing_charged, with the line items, the total, your current balance and whether you can afford it. The assistant is instructed to show you this price and ask. Only when you agree does it call the same tool again with confirm=true, and only then is the work started and the tokens deducted.
In practice the conversation looks like this: you ask for a draft image, the assistant replies with the price and your balance, you say yes, and it produces the image. If you say no, nothing has been spent.
Monthly free uses included in a paid plan show as 0 tokens in the quote, and they still ask for approval, because they use up an allowance.
How do approvals work in the terminal?
Run a paid command without extra flags and the CLI prints the quote and asks Spend about … tokens? [y/N]. Answer y to go ahead. For scripts there are three options:
--yesapproves the quoted price without asking.--max-tokens <n>refuses the job if the quote is aboven, even with--yes. Use it as a safety limit in every script.--quoteonly shows the price and exits.
When there is no interactive terminal, or when you use --json, a paid command without --yes prints the quote, charges nothing and exits with code 3. A script can therefore tell "quote shown, not approved" apart from a finished job. Exit code 2 means you are not signed in.
yesilcam video create "ocean waves at sunset" --tier draft --duration 5 --quote
yesilcam image "a lighthouse at dusk, 35mm film" --tier draft --aspect 16:9 --max-tokens 50000 --yes --out lighthouse.png
The assistant has the same limit: ask it to stay under a number of tokens and it passes max_tokens, which makes the tool refuse anything more expensive.
What do prices and refunds look like?
The prices are the same as in the app, with your plan applied, and failed jobs are refunded automatically. yesilcam account pricing lists the token prices of every operation and yesilcam account price gives the exact price of one operation for your plan. Two features have their own spending rules:
- Long videos are charged chapter by chapter while they are produced. If your tokens run out, production pauses and you continue with
longvideo resume. - Automations are saved with a monthly cap. Approving an automation authorises spending up to that cap, and it never goes above it.
Read only or Read and create?
When you create a key in Account → Developer you choose its access. A Read only key can see your account, balance, prices, library and the status of your jobs, and download results. It cannot create, edit, delete or spend anything. A Read and create key can also start work and spend tokens, always through the quote and approval step.
The MCP server has a separate switch: started with --read-only, it loads only reading tools even if the key could do more. Use a read-only key for reporting scripts and dashboards, and a create key only where something should actually be produced.
What can an API key never do?
Some actions stay in the web app, whatever the key's access:
- deleting the account, or changing its password or email;
- paying, buying tokens or plans, or turning on automatic top-ups for automations;
- creating or revoking API keys;
- connecting social media accounts.
So a leaked key can at most spend the tokens already in your balance, through the same quotes, and it cannot lock you out or buy more.
How are keys stored, and how do I revoke one?
On your computer the key is saved in ~/.config/yesilcam/config.json, readable only by your user, and it is never printed. On our side only a secure fingerprint of the key is stored, not the key itself, which is why it is shown only once. Each key can expire after 30, 90 or 365 days, or never. If a key may have leaked, revoke it in Account → Developer and create a new one. yesilcam logout only removes the key from one computer; the key itself stays valid until it expires or is revoked.
What about privacy and safety?
- Your media is private. Links to your files are signed and expire after a few hours; downloading through the tools refreshes them. A public link or a post on The Wall goes through a share request, which may need approval.
- People and characters. Characters are always adults, and real public figures cannot be used. Your own photo or video is used only with explicit consent (
photo_consent,video_consent) and after a safety check. - Plans. Some features need Basic or Pro, for example cinema tiers, Story to Film and Flow (Pro), videos over 30 seconds (Basic) or over 60 seconds (Pro), and automations (Basic). The tools say so in plain words.
Good habits with an assistant
- Tell it your budget at the start: "Ask me before anything over 100,000 tokens."
- Explore on the draft tier, then produce the keepers on a higher tier.
- Ask for the balance at the beginning and the end of a session.
- Give each computer or server its own key, with the shortest validity that works, so you can revoke one without affecting the others.
Frequently asked
Can the assistant approve a quote by itself? The tools are built so that it must call again with approval, and the server instructs it to ask you first. Keep a human answer in that loop for anything that costs tokens, and use a read-only key where nothing should be spent.
Why does a free monthly use still ask for approval? Because it uses up part of your plan's allowance. The quote shows 0 tokens so you know nothing is deducted from your balance.
Can a key buy tokens when my balance runs out? No. Buying tokens, plans and automatic top-ups are only possible in the web app.
