Build with Free.ai - one Bearer token, 400+ AI tools.
Chat, image, video, music, voice, OCR, translate - all on a single OpenAI-compatible endpoint. Generous free pool, transparent markup, partner pricing at scale.
30,000 free tokens/day. Cards never required to start.
Single endpoint per modality
One URL handles every chat model. One URL for every image model. Pick the model with a single string. No per-provider SDK shuffle.
Honest, markup-friendly billing
Self-hosted models bill at raw cost. Premium models add a transparent markup that drops as you scale. Every response reports the exact token cost.
99 languages out of the box
Chat, translate, TTS, STT - every major modality covers 99 languages with no extra config. Pass a language code and it works.
60-second quickstart
Same API, five languages. Drop your sk-free-... key in and run.
curl https://api.free.ai/v1/chat/ \
-H "Authorization: Bearer sk-free-YOUR-KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-7b",
"messages": [{"role":"user","content":"Hello!"}]
}'import requests
r = requests.post(
"https://api.free.ai/v1/chat/",
headers={"Authorization": "Bearer sk-free-YOUR-KEY"},
json={
"model": "qwen2.5-7b",
"messages": [{"role": "user", "content": "Hello!"}],
},
)
print(r.json()["choices"][0]["message"]["content"])const r = await fetch("https://api.free.ai/v1/chat/", {
method: "POST",
headers: {
"Authorization": "Bearer sk-free-YOUR-KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "qwen2.5-7b",
messages: [{role: "user", content: "Hello!"}],
}),
});
const data = await r.json();
console.log(data.choices[0].message.content);package main
import (
"bytes"; "fmt"; "io"; "net/http"
)
func main() {
body := []byte(`{"model":"qwen2.5-7b","messages":[{"role":"user","content":"Hello!"}]}`)
req, _ := http.NewRequest("POST", "https://api.free.ai/v1/chat/", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer sk-free-YOUR-KEY")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}require "net/http"
require "json"
uri = URI("https://api.free.ai/v1/chat/")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer sk-free-YOUR-KEY",
"Content-Type" => "application/json",
})
req.body = {
model: "qwen2.5-7b",
messages: [{role: "user", content: "Hello!"}],
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts JSON.parse(res.body)["choices"][0]["message"]["content"]Pricing - discounts kick in automatically
Self-hosted models run free on your 30,000-token daily pool, then bill at raw cost. Premium models are pay-as-you-go; markup drops with 30-day spend.
API request tiers
Your plan lifts every key's monthly request cap automatically - no new key needed. Token billing per request is unchanged.
| Plan | Price | Requests / month | Rate / minute |
|---|---|---|---|
| Free | $0 | 1,000 | 60 |
| Basic | $5/mo | 10,000 | 120 |
| Pro | $19/mo | 100,000 | 300 |
| Business | $49/mo | 1,000,000 | 600 |
Shipping AI features inside your own product? See the Platform API for the business plans and volume pricing.
What you can build
Embed your @handle as a chat agent
Train an AI persona on your knowledge, drop a one-line script tag on any page. Visitors chat your AI; your account picks up the cost.
Webhooks
Configure a signed callback for long-running jobs (video gen, batch transcription, share-link creation, low-credit alerts). HMAC-SHA256 signature in X-Free-Signature.
Set up webhooks →