Friday
Gateway is live. Enter an active fri_ key in the top-right, then send me a task. I route to the best model automatically.
API Keys
Create, edit, and manage your API keys from the Dashboard.
Manage Keys in Dashboard
Create scoped keys with custom personalities, industry presets, model routing, and tone. View usage stats, edit, or delete keys — all from the Dashboard.
Go to DashboardOr say "create a key called MyApp" directly in Friday chat.
Key Format Reference
fri_[uuid_no_dashes][timestamp_base36]
Keys are stored in Firestore under
friday_keys/{key} with name, system prompt, and model routing.
Endpoints & SDK
Every Friday Worker endpoint with copy-ready code samples. All requests POST to the gateway URL with a JSON body containing
fridayKey.Endpoint Catalogue
POST/ (type: chat)Main chat — auto-routed across Llama 3.1 / 3.3 / Gemini 2.5 / DeepSeek R1
POST/ (type: image_proxy)Authenticated Pollinations image generation with retry-on-429
POST/ (type: oauth_exchange)Server-side OAuth token exchange for Google / Spotify
POST/ (type: connector_call)Invoke a connected app: Slack, Notion, GitHub, HubSpot, Trello, Spotify, Shopify, Stripe, Telegram, Google Workspace
POST/ (type: connector_save)Encrypt + store an OAuth or API token at rest (AES-GCM, per-user HKDF key)
POST/ (type: connector_disconnect)Revoke and erase a stored token
POST/ (type: bot_save · bot_log · bot_stats)Bot Builder lifecycle + telemetry endpoints
POST/ (type: bot_telegram_deploy)Set the Telegram webhook for a published bot
POST/ (type: kb_url_fetch)Worker-side fetch + extract for knowledge-base URLs
GET/b/<slug>Public bot landing page — embeddable iframe
POST/ (type: morning_brief)Daily brief — calendar, top emails, news, weather
POST/ (type: meeting_agent · crm_lite · compliance · drive_kb)Higher-order automations across connected apps
Quick start — Chat
bashcurl -X POST https://friday.zylink-corp.workers.dev/ \
-H "Content-Type: application/json" \
-d '{
"type": "chat",
"fridayKey": "fri_xxxxxxxxxxxx",
"prompt": "Summarise the latest AI safety paper",
"model": "auto"
}'
javascriptconst res = await fetch('https://friday.zylink-corp.workers.dev/', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
type: 'chat',
fridayKey: 'fri_xxxxxxxxxxxx',
prompt: 'Summarise the latest AI safety paper',
model: 'auto', // or 'default' | 'pro' | 'browse' | 'think'
}),
});
const data = await res.json();
console.log(data.response);
pythonimport requests
r = requests.post(
"https://friday.zylink-corp.workers.dev/",
json={
"type": "chat",
"fridayKey": "fri_xxxxxxxxxxxx",
"prompt": "Summarise the latest AI safety paper",
"model": "auto",
},
timeout=60,
)
print(r.json()["response"])
Image generation
javascriptconst res = await fetch('https://friday.zylink-corp.workers.dev/', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
type: 'image_proxy',
fridayKey: 'fri_xxxxxxxxxxxx',
prompt: 'a futuristic Lagos skyline at sunset, cinematic',
width: 1280,
height: 720,
model: 'flux', // flux | turbo | flux-realism | flux-anime | flux-logo | flux-3d | any-dark
seed: 42,
}),
});
// Response is an image/* blob — `await res.blob()` and URL.createObjectURL it
const blob = await res.blob();
document.querySelector('img').src = URL.createObjectURL(blob);
Call a connector
javascript// Slack — post a message to a channel
await fetch('https://friday.zylink-corp.workers.dev/', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
type: 'connector_call',
fridayKey: 'fri_xxxxxxxxxxxx',
uid: 'firebase-user-uid',
connector: 'slack',
action: 'post_message',
args: { channel: '#announcements', text: 'Build green ✅' },
}),
});
// Google Sheets — append a row
await fetch('https://friday.zylink-corp.workers.dev/', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
type: 'connector_call',
fridayKey: 'fri_xxxxxxxxxxxx',
uid: 'firebase-user-uid',
connector: 'google',
action: 'sheets_append',
args: {
spreadsheetId: '1AbC...',
range: 'Sheet1!A1',
values: [['Friday', 'is', 'live']],
},
}),
});
Publish & embed a bot
html<!-- Drop this anywhere on your site to embed your published bot -->
<iframe
src="https://friday.zylink-corp.workers.dev/b/your-bot-slug"
style="width:100%;height:640px;border:0;border-radius:14px;"
allow="clipboard-write; microphone">
</iframe>
Response shape (chat)
json{
"response": "Here's a concise summary…",
"model": "llama-3.3-70b-versatile",
"tokens_in": 142,
"tokens_out": 389,
"intent": "summarise",
"routed_via": "pro",
"elapsed_ms": 842
}
Error responses
All errors return JSON:
{ "error": "…", "details": "…" }.
401Invalid or missing
fridayKey202Retry signal — back off using the
waitMs field429Rate limit — apply exponential backoff
5xxUpstream model failure — auto-fallbacks to a secondary model where possible
Usage & Analytics
Gateway performance and routing status.
Gateway Status
Online
Operational
Models Available
4
Llama 3.1
Llama 3.3 70B
Gemini 2.5 Flash
DeepSeek R1
Auth Provider
Firebase
Firestore · friday-9286b
Gateway Configuration
Worker URL
https://friday.zylink-corp.workers.dev/
Auth Method
Firebase REST API · Firestore
Auto-Route Logic
image → Pollinations · think → DeepSeek R1 · browse → Gemini 2.5 · pro → Llama 3.3 70B · default → Llama 3.1
Token Storage
AES-GCM at rest · HKDF-SHA256 per-user key
CORS Policy
Allow-Origin: *
Cron
scheduled() — Morning Brief, compliance scan, KB refresh
Cloudflare Worker Code
Deploy the master gateway script to Cloudflare Workers. Set environment variables:
FIREBASE_PROJECT_ID,
FIREBASE_WEB_API_KEY,
GEMINI_API_KEY,
GROQ_API_KEY,
DEEPSEEK_API_KEY,
TAVILY_API_KEY,
ENCRYPTION_MASTER.