Get started
Quickstart
Your first video in five minutes.
1. Get an API key
Sign in to Qulture and open the Console. Under API keys, click Create key, give it a name and copy the key — it starts with qk_live_ and is shown only once.
Save it as an environment variable so it never ends up in your code:
export QULTURE_API_KEY="qk_live_…"Check it works:
curl https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/developer/me \
-H "Authorization: Bearer $QULTURE_API_KEY"2. Add funds
The API is pay as you go: requests are paid from your API balance, in US dollars. In the Console, choose an amount (from $5) and pay by card. A 5-second Draft video costs $0.50, so $10 is enough for 20 of them.
GET /api/v1/developer/me shows your balance in billing.balance_usd. Without enough balance, create requests return 402 insufficient_balance and nothing is made.
3. Create a video
Describe what you want. A 5-second draft is the cheapest way to try — $0.50 (see pricing).
curl -X POST https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/jobs \
-H "Authorization: Bearer $QULTURE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "text_to_video",
"prompt": "A neon-lit street market at night, slow camera push in",
"tier": "draft",
"duration": 5,
"aspect": "9:16"
}'You get the job back straight away with status: "queued". Keep its id.
4. Get the result
Ask for the job every 5 seconds until status is ready (or failed / blocked). When it's ready, video_url is a link to the MP4.
curl https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/jobs/JOB_ID \
-H "Authorization: Bearer $QULTURE_API_KEY"Don't want to poll?
Add"webhook_url": "https://your.app/hooks/qulture" to the create request and Qulture calls you when the video is done. Webhooks →Full script
Create, wait and print the video link in one go:
# Create
JOB=$(curl -s -X POST https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/jobs \
-H "Authorization: Bearer $QULTURE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"text_to_video","prompt":"A neon-lit street market at night","tier":"draft","duration":5}' \
| jq -r .data.id)
# Wait
while :; do
S=$(curl -s https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/jobs/$JOB -H "Authorization: Bearer $QULTURE_API_KEY")
STATUS=$(echo "$S" | jq -r .data.status)
echo "$STATUS"
case $STATUS in ready|failed|blocked) break;; esac
sleep 5
done
echo "$S" | jq -r .data.video_url