Take1 Docs
How Take1 works, from the wallet signature to the finished video.
Overview
Take1 is an AI production studio on Solana. One account makes images, video, voice and music. Your account is your Solana wallet, you pay in SOL, and everything you make is saved to that wallet. Internet Capital Markets, the movie on our home page, was made entirely with Take1.
Quickstart
- Open the studio and pick Phantom, Solflare or Backpack. On a phone, tapping a wallet opens the studio inside that wallet app.
- Approve the connection and sign the login message. Signing is free and sends nothing.
- Tap your credit balance and top up with SOL.
- Pick Image, Video, Voice or Music, choose a model, write a prompt and hit Generate.
- Results appear in Your takes as soon as they are ready. Tap Save to download.
Architecture
Take1 has four parts.
| Part | What it does |
|---|---|
| Studio | The web app. Talks to your wallet extension or wallet app, and to the Take1 API over HTTPS. |
| Take1 API | Verifies signatures and payments, keeps your credit balance, prices and queues jobs, and stores results. |
| Render engine | Runs each job on the selected model and returns the finished file. |
| Storage | A private bucket. Each file sits under your wallet address and is only reachable through short-lived signed links. |
wallet ──sign──▶ studio ──HTTPS──▶ Take1 API ──▶ render engine
│
Solana RPC ◀───┤ (payment checks)
▼
private storage ──signed link──▶ you
Wallet sign-in
Take1 uses a sign-in message, the same pattern most Solana apps use. There is no email and no password.
- The studio asks the API for a one-time nonce for your public key.
- Your wallet signs this message with its Ed25519 key:
Sign in to Take1
Wallet: <your public key>
Nonce: <random 128-bit value>
This does not cost anything.
- The API checks the signature against your public key. The nonce is deleted on use and expires after 10 minutes, so a signature cannot be replayed.
- The API returns a session token valid for 7 days. The token is bound to your wallet and signed by the server, so it cannot be edited or moved to another wallet.
Signing the login message is not a transaction. It cannot move funds, and it costs no fees.
Credits
- Credits are the unit for every generation. 100 credits is 1 USD.
- Each model has a price in credits. Video scales with length and resolution, and voice scales with the length of the text.
- The Generate button shows the estimate before you start. The exact charge is fixed when the job is accepted.
- Credits are taken when the job starts. If a job fails, the full amount goes back to your balance automatically.
- Credits do not expire.
Paying with SOL
A top-up is a normal SOL transfer from your wallet to the Take1 treasury. You approve it in your own wallet, and Take1 never holds your keys.
loading- Pick an amount (0.05, 0.1, 0.25 or 0.5 SOL) and approve the transfer in your wallet.
- The studio sends the transaction signature to the API.
- The API reads the transaction from Solana at
confirmedcommitment and checks that it succeeded, that SOL moved from your wallet and to the treasury, and how many lamports moved. - The amount is converted at the live SOL/USD price at that moment:
credits = floor( SOL sent × SOL/USD price × 100 )
- Each transaction signature can be counted once. Sending the same signature again returns
already_used.
Credits usually arrive within a few seconds. If the network is slow, the studio says so and you can try confirming again with the same payment; it will never be counted twice.
Generation lifecycle
| Step | What happens |
|---|---|
| 1. Quote | The API prices the exact request: model, length, resolution and shape. |
| 2. Debit | The price is taken from your balance in one step. If the balance is too low, nothing is charged and you get insufficient_credits. |
| 3. Render | The job goes to the render engine. Images take seconds; video usually takes 1 to 5 minutes. |
| 4. Collect | The studio checks for finished jobs every few seconds while any are running. |
| 5. Store | The finished file is saved to private storage under your wallet. |
| 6. Deliver | You get a signed link valid for 1 hour. A fresh link is made every time you open the studio. |
Job states: running, done, failed. A failed job is refunded in full.
Models and prices
Live from the API. Prices are the starting price in credits for the shortest length and lowest resolution.
Loading models.
API reference
Base URL:
https://take1.video/api
Requests and responses are JSON. Pick the action with ?a=. Signed-in actions need the session token:
Authorization: Bearer <token>
GET ?a=models
Public. Lists every model with its options and starting price.
{
"models": [
{ "id": "cinema-studio-4", "title": "Take1 Studio", "kind": "video",
"durations": [4, 5, ... 15], "resolutions": ["480p", "720p"],
"aspects": ["16:9", "9:16", ...], "credits": 524 }
],
"treasury": "<address>",
"credits_per_usd": 100
}
POST ?a=nonce
// request
{ "wallet": "<public key>" }
// response
{ "message": "Sign in to Take1\n\nWallet: ...\nNonce: ...\n\nThis does not cost anything." }
POST ?a=verify
// request: signature of the exact message, base64
{ "wallet": "<public key>", "signature": "<base64>" }
// response
{ "token": "<session token>" }
GET ?a=me token
Your balance and your latest 40 jobs, each with a fresh signed link when done.
{ "wallet": "...", "credits": 1250,
"jobs": [ { "id": "...", "kind": "video", "model": "veo-3.1", "prompt": "...",
"status": "done", "credits": 436, "url": "https://..." } ] }
POST ?a=topup token
// request: signature of your SOL transfer to the treasury
{ "signature": "<transaction signature>" }
// response
{ "credits": 1840, "balance": 3090, "sol_usd": 184.2 }
POST ?a=gen token
// request
{ "model": "seedance-2.5", "prompt": "Handheld, a trader alone at his desk at night, monitor glow",
"aspect": "9:16", "duration": 8, "resolution": "720p" }
// response
{ "id": "<job id>", "credits": 342, "balance": 2748 }
Fields a model does not support are ignored and fall back to that model's default. Voice models take voice and read the prompt aloud. Prompts are limited to 3,000 characters (4,000 for voice).
Errors
Errors come back as { "error": "<code>" } with an HTTP status.
| Code | Status | Meaning |
|---|---|---|
signed_out | 401 | Missing, expired or invalid token. Sign in again. |
bad_signature | 401 | The signature does not match the wallet and message. |
nonce_expired | 400 | Ask for a new nonce. Each one lasts 10 minutes and works once. |
insufficient_credits | 402 | Balance too low. The response includes need. |
empty_prompt | 400 | Write a prompt first. |
unknown_model | 400 | The model id is not in ?a=models. |
tx_not_found | 404 | The payment is not visible on chain yet. Try again shortly. |
tx_failed | 400 | The payment failed on chain. Nothing was sent. |
no_transfer_to_treasury | 400 | The transaction has no SOL transfer from your wallet to the treasury. |
already_used | 409 | That payment was already counted. |
treasury_not_set | 503 | Top-ups are not open yet. |
Security
- Take1 only ever asks your wallet for two things: the free login signature and a plain SOL transfer you approve.
- Take1 never sees or stores private keys or seed phrases. Never type them anywhere.
- Payments are verified on chain, not trusted from the browser.
- Balance changes happen in single database steps, so a balance cannot go below zero or be spent twice.
- Sessions last 7 days. Disconnect from the studio menu to end one early.
Privacy
- No email, no name, no password. Your account is your public key.
- Your prompts and results are private to your wallet. There is no public feed.
- Files are only reachable through signed links that expire after 1 hour.