Chat Interface
Chat
KEY
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.
Enter to send · Shift+Enter for new line · Routed via Cloudflare Worker
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 Dashboard
Or 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 fridayKey
202Retry signal — back off using the waitMs field
429Rate 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_IDFIREBASE_WEB_API_KEYGEMINI_API_KEYGROQ_API_KEYDEEPSEEK_API_KEYTAVILY_API_KEYENCRYPTION_MASTER.