← Back to articles
Free API Overview

Pollinations AI Free API Verified: Image Truly Keyless, Text Free Only When Anonymous (Dummy Key Triggers 402)

Pollinations AI Free API Verified: Image Truly Keyless, Text Free Only When Anonymous

Verified 2026-08-31 00:35 CST (UTC+8) · 3 curls reproducible · Fixed "any string works" error

Pollinations AI offers image and text generation, but "keyless" means different things for the two endpoints. Every claim below is from live requests.

TL;DR Verified Result

Endpoint Truly Keyless? Correct Way Wrong Way Live Result
Image GET https://image.pollinations.ai/prompt/{prompt} ✅ Yes GET with no Authorization header — 200 31KB JPEG 512x512
Text POST https://text.pollinations.ai/openai ⚠️ Anonymous only POST without Authorization With Authorization: Bearer not-needed / any string Anonymous 200 gpt-oss-20b; with key 402 PAYMENT_REQUIRED

Critical pitfall: Any Authorization on text triggers 402 API key budget too low ... costs ~0.0001 pollen, but this key has 0.0000 with note legacy text API is being deprecated for authenticated users. Anonymous requests are NOT affected. Please migrate to https://enter.pollinations.ai. For free text, do NOT send Authorization.

Reproducible Verification (3 curls)

Test 1: Image — No Auth Needed

curl -o image.jpg "https://image.pollinations.ai/prompt/A%20beautiful%20sunset%20over%20mountains?width=512&height=512&model=flux&seed=42&enhance=true" -i
# => HTTP/1.1 200 OK
# => Content-Type: image/jpeg
# => ~31KB JPEG 512x512
import requests
r = requests.get("https://image.pollinations.ai/prompt/A%20cute%20cat%20wearing%20spacesuit",
                 params={"width":1024,"height":1024,"model":"flux","seed":42}, timeout=30)
open("cat.jpg","wb").write(r.content)
print(r.status_code, len(r.content), r.headers.get("Content-Type")) # 200 31xxx image/jpeg

Test 2: Text — Anonymous POST = 200

curl -X POST https://text.pollinations.ai/openai \
  -H "Content-Type: application/json" \
  -d '{"model":"openai","messages":[{"role":"user","content":"Hello!"}],"stream":false}' -i
# => 200 {"model":"gpt-oss-20b","choices":[{"message":{"role":"assistant","content":"Hello!"}}]}
import requests
resp = requests.post("https://text.pollinations.ai/openai", json={
    "model":"openai",
    "messages":[{"role":"user","content":"Explain quantum computing in one sentence"}],
    "stream": False
}, timeout=30)
print(resp.status_code) # 200
print(resp.json()["choices"][0]["message"]["content"])
# Do NOT add Authorization header

Test 3: Text — Dummy Key = 402 (Wrong)

curl -X POST https://text.pollinations.ai/openai \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer not-needed" \
  -d '{"model":"openai","messages":[{"role":"user","content":"Hello!"}],"stream":false}' -i
# => 402 Payment Required
# => {"code":"PAYMENT_REQUIRED","message":"API key budget too low... Please go to https://enter.pollinations.ai ... legacy text API is being deprecated for authenticated users. Anonymous requests are NOT affected."}

Previous api_key="not-needed" + OpenAI(base_url="https://text.pollinations.ai/openai") was wrong and removed. SDK only works with https://enter.pollinations.ai/api/v1 + real pk_... pollen key.

Correct vs Wrong Code

✅ Correct (anonymous, free):

import requests
resp = requests.post("https://text.pollinations.ai/openai", json={
    "model":"openai",
    "messages":[{"role":"user","content":"Write a short poem about spring"}]
})

❌ Wrong (402):

import openai
client = openai.OpenAI(base_url="https://text.pollinations.ai/openai", api_key="not-needed")

For SDK, use new domain with balance:

import openai
client = openai.OpenAI(base_url="https://enter.pollinations.ai/api/v1", api_key="pk_xxx")
// Node.js correct (anonymous)
fetch("https://text.pollinations.ai/openai", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ model: "mistral", messages: [{ role:"user", content:"Hello!" }] })
}).then(r=>r.json()).then(console.log);

Free Tier & Models (Verified)

Resource Free Quota Notes
Image Unlimited* Fair use, verified 200 repeatedly
Text (anonymous) Unlimited* Anonymous 200, with key 402
Rate Generous Recommend 1-2 req/s
Validity Permanent No signup

*Fair use for personal/small-medium traffic.

Image models: flux, turbo, sdxl via ?model=flux. Text models: openai (returns gpt-oss-20b), mistral (32K), llama via {"model":"openai"}. OpenAI Chat Completions compatible.

Comparison (Corrected)

Platform Free Image Free Text Key Required OpenAI Compat Verified
Pollinations Image Unlimited* — No — GET 200
Pollinations Text Anonymous — Unlimited* No (must be anonymous) Yes POST anon 200
Pollinations Text with Key — Pollen Yes Yes 402 on legacy, migrate
Hugging Face Rate-limited Rate-limited Yes No Token required
Together AI $5 trial $5 trial Yes Yes Card required

Use Cases & Limits

Good for: Personal prototypes, teaching, bots, frontend-direct image. Not for: Mission-critical SLA, high concurrency.

Tips:

  1. Never send Authorization for free text; buy pollen at enter.pollinations.ai if you need billing.
  2. Cache identical image prompts locally.
  3. Wrap with retry + Apishare fallback for prod.

Conclusion

Pollinations "keyless" is real with a caveat: image unconditional; text only when anonymous — any key triggers 402. Use the 3 verified curls above for zero-cost integration; migrate to enter.pollinations.ai for SDK/billing. Verified and copy-paste ready.


🚀 Get Started: One-Click Free API Access

Want to call all the free models above with a single API key, no need to sign up for each provider? Apishare.cc provides a unified API Key — one key, 100+ models, free models at zero cost.

👉 Register on Apishare.cc → Get your unified API Key

📊 Want to see more free model rankings? Check out the Sep 2026 Free LLM API Rankings →


About the Free API Aggregator

The models covered in this guide are all served through the APIShare free API aggregator, which gives you one key for the whole catalog.

More in this category

Free API Cost and Quota Control in Practice: 429 Backoff, RPM Budgets, and Multi-Model Fallback2026 Free OneAPI Unified Gateway: Connect 100+ LLM APIs at Zero Cost in One GuideRun a 550B-Parameter Model for Free: 2026 Nemotron 3 Ultra Complete Guide (OpenRouter Free Tier Tested)2026 Free Embedding Vector Model API Panorama: BGE-M3 / Voyage / Nomic / Google / Azure and 6 Options Tested (September Update)Free Function Calling / Tool Use API Tutorial: DeepSeek / Gemini / Qwen — Zero-Cost Agent Tooling (2026-09-16 Verified)

Ready to use free LLM APIs?

APIShare aggregates free AI APIs worldwide — sign up and get bonus credits.