PUBLIC REST API · v1

Build with our AI in minutes.

Drop-in compatible with the OpenAI Chat Completions format. Per-user quotas, audit logs, model allow-lists and IP blocking. Production-ready.

Get your API key →≈ 380ms p50🟢99.95% uptime🧠Frontier models🛡️Audit logged

Introduction

The Prancy Fairy API lets you integrate frontier AI models into your own application using an endpoint that is fully compatible with the OpenAI Chat Completions format. Access is private and must be enabled by an administrator.

  • API-Key authentication (Authorization: Bearer pf_live_...).
  • Per-user quotas (per-minute, daily, monthly).
  • Admin-controlled model allow-list.
  • Full audit trail, every request is logged (no content).
  • Automatic and manual IP blocking.

Quick start

  1. 1. Create an account on Prancy Fairy.
  2. 2. Upgrade to a MAX plan to unlock API access.
  3. 3. Open the Developer panel and generate a key.
  4. 4. Make your first request (see Examples).
bash
curl -X POST https://unlimitedlab.org/api/v1/chat \
  -H "Authorization: Bearer pf_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-opus-4-7",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Authentication

Every request requires the Authorization header with your API key:

http
Authorization: Bearer pf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • Keys always start with pf_live_.
  • The plaintext key is shown only ONCE, right after creation.
  • We only store a SHA-256 hash of the key in our database.
  • If you lose a key, you must revoke it and generate a new one.
  • Never embed the key on the client side (frontend, mobile). Always use a backend.

Endpoints

POST/api/v1/chatGenerate a chat completion. OpenAI-compatible format. Optional stream:true.
GET/api/v1/modelsList the models available to your account.
Base URL: https://unlimitedlab.org

Limits & quotas

Each account has individually configurable quotas. When exceeded, the server responds with HTTP 429 and a specific error code.

WindowError codeMeaning
60 secondsrate_limit_minuteToo many requests in a minute
24 hoursquota_dayDaily quota exhausted
30 daysquota_monthMonthly quota exhausted

Live usage is visible in the Developer dashboard.

Models

The models available to your account depend on your plan and your admin-approved allow-list. List them in your panel or call GET /api/v1/models.

If you call a model not allowed: 403 model_not_allowed.
Ensemble · 1 model
Unlimited Merge AI
unlimited-mergeMAX
Anthropic · 6 models
Claude Opus 4.7
claude-opus-4-7MAX
Claude Opus 4.6
claude-opus-4-6MAX
Claude Opus 4.5
claude-opus-4-5MAX
Claude Opus 4.1
claude-opus-4-1
Claude Sonnet 4.6
claude-sonnet-4-6
Claude Sonnet 4
claude-sonnet-4
OpenAI · 14 models
GPT-5
gpt-5MAX
GPT-5.1
gpt-5-1MAX
GPT-5.3
gpt-5-3MAX
GPT-5.4
gpt-5-4MAX
GPT-5.5
gpt-5-5MAX
GPT-5 Mini
gpt-5-mini
GPT-5 Nano
gpt-5-nano
GPT-5 Online
gpt-5-onlineMAX
GPT-4.1 Mini
gpt-4-1-mini
GPT-4.1 Nano
gpt-4-1-nano
GPT-4o
gpt-4o
o3
o3MAX
o3 Mini
o3-mini
o4-mini
o4-mini
Google · 4 models
Gemini 2.5 Pro
gemini-2-5-pro
Gemini 3 Pro
gemini-3-proMAX
Gemini 3.1 Pro
gemini-3-1-proMAX
Gemini 2.5 Flash
gemini-2-5-flash
DeepSeek · 4 models
DeepSeek V4 Pro
deepseek-v4-proMAX
DeepSeek V4 Flash
deepseek-v4-flash
DeepSeek R1
deepseek-r1
DeepSeek V3
deepseek-v3
xAI · 2 models
Grok 4
grok-4MAX
Grok 3
grok-3
Qwen · 2 models
Qwen 3 Max
qwen-3-max
Qwen QwQ 32B
qwen-qwq-32b
Moonshot · 1 model
Kimi K2
kimi-k2
Meta · 1 model
Llama 3.3 70B
llama-3-3-70b
Image · 3 models
Flux 1
flux-1
Flux Pro
flux-proMAX
SDXL
sdxl-1

Errors

Error bodies follow the OpenAI format:

json
{
  "error": {
    "type": "rate_limit_error",
    "code": "rate_limit_minute",
    "message": "Rate limit: 60/min"
  }
}
HTTPCodeCause
400invalid_messagesMalformed messages
400missing_modelMissing model field
400unknown_modelUnknown model
401missing_authMissing Authorization header
401invalid_keyInvalid or unknown key
401key_revokedKey revoked
401key_expiredKey expired
403access_disabledAPI access not enabled
403plan_no_apiYour plan does not include API
403ip_blockedYour IP is blocked
403model_not_allowedModel not allowed for your account
429rate_limit_minuteToo many requests per minute
429quota_dayDaily quota reached
429quota_monthMonthly quota reached
502upstream_errorProvider failure (retry)
502pool_emptyNo accounts available in the supply pool

Security

  • Keys are stored only as SHA-256 hashes (one-way). Only the public prefix is kept for display.
  • All traffic is encrypted in transit (HTTPS/TLS).
  • Logs store metadata (model, status, latency, tokens, IP), never the message content.
  • Malicious IPs can be blocked in real time from the admin panel.
  • Each key can have an optional expiry date.
  • Administrators can suspend a user's access at any time.
  • Treat keys like passwords, they are NEVER returned after creation.

Examples

cURL

bash
curl -X POST https://unlimitedlab.org/api/v1/chat \
  -H "Authorization: Bearer $PF_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-opus-4-7",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Explain entropy in one sentence."}
    ],
    "max_tokens": 256
  }'

JavaScript (fetch)

javascript
const res = await fetch("https://unlimitedlab.org/api/v1/chat", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.PF_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "claude-opus-4-7",
    messages: [{ role: "user", content: "Hello world" }],
  }),
});
const data = await res.json();
console.log(data.choices[0].message.content);

Python (requests)

python
import os, requests

resp = requests.post(
    "https://unlimitedlab.org/api/v1/chat",
    headers={
        "Authorization": f"Bearer {os.environ['PF_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "claude-opus-4-7",
        "messages": [{"role": "user", "content": "Hello"}],
    },
    timeout=60,
)
resp.raise_for_status()
print(resp.json()["choices"][0]["message"]["content"])

Drop-in with the OpenAI SDK

You can use the official OpenAI SDK pointed at our endpoint:

python
from openai import OpenAI
import os

client = OpenAI(
    base_url="https://unlimitedlab.org/api/v1",
    api_key=os.environ["PF_KEY"],
)
resp = client.chat.completions.create(
    model="claude-opus-4-7",
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)

FAQ

How do I request access?
Sign up and upgrade to a MAX plan via the Discord ticket flow. Once activated you can generate keys from the panel.
Do you support SSE streaming?
Yes. Pass "stream": true in the request body. Response is OpenAI-compatible Server-Sent Events.
What if I lose a key?
Revoke it from the panel and create a new one. Lost keys cannot be recovered, we only store the hash.
Do you store my messages?
No. We only store metadata: timestamp, model, status, latency, estimated tokens, and IP. Never the text.
Can I raise my quotas?
Yes, contact an administrator. Limits are configurable per user.
© 2026 Prancy Fairy