DEV Community

john lee
john lee

Posted on

Three hackathon agents, one card-free API key: what I learned building on Qwen Cloud

Over the past month I shipped three entries to the Global AI Hackathon Series with Qwen Cloud — an autonomous bounty-hunting agent, a GitLab CI diagnosis agent, and an AI "showrunner" that turns one line of premise into a finished, subtitled vertical short-drama episode. All three run on the same card-free Qwen Cloud free-tier API key.

That last part matters. I'm in Malaysia, I don't put credit cards into cloud consoles for hackathons, and Qwen Cloud turned out to be one of the few platforms where a genuinely free, no-payment-method tier covers LLM, video, image and speech generation. This post is the map of the gotchas I hit so you don't have to.

Getting the key (the card-free path)

There are two signup flows and they look confusingly similar:

  • Model Studio "Free Quota" via home.qwencloud.com/benefits — email/phone signup, ~1M tokens per model across 200+ models, no payment method required.
  • ❌ The broader Alibaba Cloud free trial ("Activate full account", ECS etc.) — this one is card-gated.

If any screen asks for a card, you're in the wrong flow — back out.

The endpoint maze

The free-tier sk-… key works on the international endpoint only:

https://dashscope-intl.aliyuncs.com/compatible-mode/v1      # OpenAI-compatible chat
https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/…  # video / image / speech
Enter fullscreen mode Exit fullscreen mode

Three things that cost me hours:

  1. Beijing-region model names don't exist on intl. Docs and blog posts written for the China region will point you at wanx2.1-* or qwen-tts — on dashscope-intl the working IDs are wan2.2-t2v-plus / wan2.1-t2v-turbo (video), wan2.2-t2i-flash (image) and qwen3-tts-flash (speech). When in doubt, probe the endpoint: an auth-valid request with a wrong model returns InvalidParameter: "Model not exist" with a request ID, which tells you your key is fine and only the name is wrong.
  2. TTS must be called synchronously. Sending the X-DashScope-Async header to qwen3-tts-flash gets you AccessDenied: does not support asynchronous calls. Video and image are the opposite — async submit + poll.
  3. The token-plan/MaaS endpoint 401s the free-tier key. Don't mix them up; compatible-mode/v1 is the one you want for chat.

Project 1: AutoPR — an agent that hunts open-source bounties

AutoPR scans bounty platforms every 15 minutes, triages issues with Qwen-Max (structured JSON out: {score, reason, approach, skip}), then hands tractable ones to a Qwen-Plus tool loop — six tools (list_files, read_file, search_code, write_file, run_command, finish) against a cloned repo until the tests pass, then opens the PR.

What I learned: Qwen-Max's structured output is reliable enough to be a gate (skip anything scoring < 0.45), and Qwen-Plus handles well-scoped bugs — null checks, missing coverage, small API changes — while the triage layer correctly filters out the architectural stuff it would flounder on.

Repo: https://github.com/64johnlee/autopr

Project 2: QwenPipelineGuard — CI failure diagnosis over MCP

A GitLab CI watcher that pulls failed pipeline logs and has Qwen produce a root-cause diagnosis and a suggested fix, exposed as an MCP server so any MCP-capable client can call it. The interesting part was how little glue code is needed once the chat endpoint is OpenAI-compatible — the same client library talks to Qwen with one base-URL swap.

Repo: https://github.com/64johnlee/qwen-pipelineguard

Project 3: Qwen Showrunner — premise in, episode out

The fun one. Give it "a KL hawker discovers his rival stole his recipe" and it:

  1. writes a shot-by-shot screenplay with Qwen-Max (validated JSON: title, characters, assigned voices),
  2. films every shot with Wan text-to-video,
  3. voices every character with Qwen3-TTS in the spoken language,
  4. translates subtitles into a different language (spoken 中文, subtitled English — the SEA localization angle),
  5. cuts it all with ffmpeg into a vertical 9:16 episode.mp4 with burned subtitles.

Wan-specific lessons:

  • Free-tier clips are fixed at ~5 seconds. The duration parameter is accepted at submit time and then rejected at execution ("duration customization is not supported"). Episode length is therefore controlled by shot count.
  • Submit all shots up front, then await. Wan tasks are async; a 10-shot episode submitted in parallel renders in roughly the wall-clock time of one shot.
  • Video quota is metered in seconds, not tokens — and "stop-on-exhaust" means the service just stops with a 403 instead of billing you. Exactly what you want on a card-free account.
  • ffmpeg on Windows with CJK subtitles: one -filter_complex only, and the font path needs single quotes plus escaped colon: fontfile='C\:/Windows/Fonts/msyh.ttc'.

Repo: https://github.com/64johnlee/qwen-showrunner

Proof of deployment

The hackathon requires evidence your project actually ran on Alibaba Cloud. The Qwen Cloud console's Analytics → Usage/Logs pages are perfect for this: per-request logs with request IDs, timestamps, models and status codes. Screenshot those rather than your billing page — "running resources", not "quota remaining".

The economics

36.8K tokens and 435 requests across a week of building and demos, all inside the free tier. For the bounty agent the math is fun: at fractions of a cent per triage call and $20–$250 bounties, a low single-digit merge rate breaks even.

If you've been putting off trying the Qwen/Wan stack because you assumed it needed an Alibaba Cloud account with a card on file — it doesn't. One email signup, one key, all four modalities.

Built solo in Kuala Lumpur with an agentic coding setup (Claude Code driving the builds, Qwen models doing the runtime work). Questions welcome.

Top comments (0)