Documentation
Everything you need to set up your Razorpay integration, configure 3D stream overlays, tune AI moderation, and start receiving donations — from day one.
Getting Started
Schat is a donation overlay platform built exclusively for Indian live streamers. It removes the platform fee entirely by routing payments directly through your own Razorpay account — we never touch your money. Setup takes around 20 minutes from a fresh account to your first live alert.
Step 1 — Create Your Account
Click Sign In on the navigation bar and authenticate with Google OAuth. We use your Google account identity (name, email, profile photo) to populate your creator profile. We never store your password — authentication is fully delegated to Google.
Use your primary YouTube email
Signing in with the same Google account linked to your YouTube channel gives Schat permission to read your live chat and stream metadata automatically. If you sign in with a different account, the YouTube integration step will require you to reconnect manually.
Step 2 — Set Your Username
During onboarding, choose a username. This becomes your public donation page URL: https://schat.webasthetic.in/[username]. Usernames must be lowercase, 3–30 characters, and contain only letters, numbers, and hyphens. Usernames cannot be changed after they are set, so choose carefully.
Step 3 — Connect Razorpay
Without a connected Razorpay account, Schat cannot process payments. See the section for the full walkthrough.
Step 4 — Add the OBS Browser Source
Add your overlay URL to OBS as a Browser Source. See for step-by-step instructions and recommended settings.
Platform Architecture
Understanding how the platform works helps you diagnose issues quickly and configure integrations correctly.
Next.js 15 (App Router)
The web application, dashboard, and all API routes run on Vercel edge infrastructure. Server-rendered pages ensure fast initial loads for your public donation page.
Supabase (PostgreSQL)
All data — creator profiles, donation records, stream goals, moderation logs — is stored in a PostgreSQL database with Row-Level Security enforced at the database layer. Creators can only read their own data even if an API key were compromised.
Razorpay BYOK
When a donor pays, the Razorpay order is created against YOUR merchant account using your API keys. Schat stores a webhook confirmation to trigger the overlay. Your money settles directly to your bank account via Razorpay's standard settlement cycle — Schat never has access to it.
Three.js Overlays
Donation alert animations are rendered using Three.js/WebGL inside a browser source window. This is why hardware acceleration must be enabled in OBS — WebGL requires GPU access to render 3D scenes.
Groq AI Moderation
Each donor message is passed to Groq's inference API (running llama-3.3-70b-versatile) before the alert fires. The model returns an allow/deny/uncertain decision. Uncertain results fall back to your configured strictness threshold.
TTS Fallback Chain
Audio alerts use a multi-provider fallback: Google Cloud TTS (up to 1M characters/month) → Azure Cognitive Services (up to 500K characters/month) → Kokoro (local, unlimited) → Edge TTS (unlimited, Microsoft network). The chain moves to the next provider only on failure or quota exhaustion.
Connecting Razorpay
Schat uses a BYOK (Bring Your Own Key) architecture with Razorpay. You register directly with Razorpay, complete their KYC process, generate API keys, and paste them into your Schat settings. Schat stores your secret key using AES-256-CBC encryption — it is never stored in plaintext.
KYC takes 2–3 business days
Razorpay requires identity and bank account verification before enabling live payments. Your Schat overlays will not receive real donations until Razorpay marks your account as "Live". If you are an individual creator, apply as a Sole Proprietor with a Udyam certificate for faster approval.
Step-by-step setup
- 1
Create a Razorpay account
Go to razorpay.com and register. Use your business PAN and the bank account where you want donations to settle. For individual creators, "Individual / Sole Proprietor" is the correct entity type.
- 2
Complete KYC
Upload your PAN card, proof of business (GST certificate or Udyam registration), and a cancelled cheque or bank statement. Razorpay will send an approval email once verification is complete.
- 3
Generate API keys
In the Razorpay Dashboard, go to Settings → API Keys → Generate Key. You will receive a Key ID (starting with
rzp_live_) and a Key Secret. Copy both immediately — the secret is shown only once. - 4
Add keys to Schat
In your Schat Dashboard, go to Settings → Payments → Razorpay. Paste your Key ID and Key Secret. Click Save. Schat will validate the keys immediately by making a test API call.
- 5
Configure webhooks (critical)
See the section below. Without webhooks, donations will process but alerts will never fire.
Webhook Configuration
Razorpay notifies Schat about completed payments by sending a webhook POST request to your unique endpoint. This is what triggers your overlay alert. If webhooks are misconfigured, donors can pay successfully but your stream will never show the alert.
Your webhook URL
https://schat.webasthetic.in/api/razorpay/webhookSetup steps in Razorpay Dashboard
- 1
In Razorpay, go to Settings → Webhooks → Add New Webhook.
- 2
Paste your webhook URL from above into the Webhook URL field.
- 3
In Schat, go to Settings → Payments → Razorpay and copy your Webhook Secret. Paste this into the Razorpay "Secret" field. This is a shared HMAC secret used to verify that webhook events genuinely come from Razorpay.
- 4
Under "Active Events", enable at minimum:
payment.capturedandpayment.authorized. - 5
Save the webhook. Use the Razorpay test tool to send a test event and confirm your Schat overlay receives it. You can also send a test alert directly from the Schat Studio page.
Webhook secret must match exactly
The webhook secret shown in Schat and the secret entered in Razorpay must be byte-for-byte identical. Even a trailing space will cause all webhooks to fail with a 400 Invalid Signature error. If alerts stop working after you rotate your keys, regenerate the webhook secret in Schat and update Razorpay immediately.
Understanding 0% Fees
Schat charges 0% platform commission on all donations. When a viewer sends ₹500, your Razorpay account receives ₹500 minus Razorpay's standard processing fee. Schat takes nothing.
Razorpay's fee varies by payment method (UPI is 0% for transactions up to ₹2,000 under certain conditions; cards and net banking are typically 2% + GST). Check your Razorpay account for the exact rates applicable to your business category. Schat has no visibility into or control over Razorpay's fee structure.
OBS Integration
Schat overlays run inside an OBS Browser Source. They use WebGL (Three.js) to render 3D alert animations, which requires GPU hardware acceleration to be enabled in OBS. Without hardware acceleration, overlays will show as a black screen or render in a severely degraded fallback mode.
Your overlay URL
https://schat.webasthetic.in/overlay/[your_username]OBS setup steps
- 1
In OBS, click the + button under Sources and select Browser.
- 2
Paste your overlay URL. Set Width to 1920 and Height to 1080 (or match your canvas resolution).
- 3
Enable "Use hardware acceleration when available". This is required for WebGL 3D rendering.
- 4
Enable "Control audio via OBS" if you want TTS audio routed through a specific OBS audio track (recommended for separating alert audio from game audio in multitrack recordings).
- 5
Position the Browser Source layer above all other sources in your scene to ensure alerts appear on top of your game capture.
- 6
Test from Dashboard → Studio → Send Test Alert. You should see the animation and hear the TTS audio within 2–3 seconds.
Black screen troubleshooting
If the overlay shows as a black screen: (1) Right-click the Browser Source → Properties → check "Use hardware acceleration". (2) In OBS menu → Tools → Settings → Advanced → enable hardware acceleration globally. (3) Ensure your GPU drivers are up to date. On laptops with dual GPUs, ensure OBS is running on the dedicated GPU, not integrated graphics.
Superchat Tiers
Superchat tiers let you customise the visual and audio style of alerts based on donation amount. A ₹10 tip might show a brief green flash; a ₹1,000 donation triggers a full 3D animation with a longer display duration.
Each tier is defined by:
- Min/Max amount (₹): The donation range that triggers this tier. Ranges must not overlap between tiers.
- Expand duration (seconds): How long the alert displays in its expanded/animated state.
- Collapse duration (seconds): How long the alert remains visible in a smaller, collapsed form after the animation completes.
- Background, text, and accent colours: Full hex colour control for each tier's visual card.
- Max message length (characters): Higher-tier donors are permitted longer messages (up to 500 characters at the highest tier).
Configure tiers in Dashboard → Overlays → Superchat Tiers. Changes take effect immediately for new donations without restarting OBS.
Stream Goals
Stream goals are live fundraising progress bars that update in real-time as donations come in. They are tied to a specific YouTube stream ID so that progress resets cleanly at the start of each broadcast.
Goal overlay URL
https://schat.webasthetic.in/overlay/goals/[your_username]Add this as a second Browser Source in OBS, positioned wherever you want the goal progress bar to appear on screen. Recommended size: 400×240 pixels. Configure goal appearance (colours, fonts, border radius) in Dashboard → Goals → Appearance.
When you go live on YouTube, Schat automatically detects the new stream ID and creates a fresh goal entry. Donations received during that stream are attributed to that stream's goal progress. Historical streams remain visible in your financials dashboard.
Moderation AI (Groq)
Schat uses the Groq inference API to classify donor messages before they are displayed on screen or spoken via TTS. Every message passes through the moderation pipeline regardless of donation amount. The model used is llama-3.3-70b-versatile.
Strictness levels
Moderation strictness (1–5) controls how aggressively borderline content is blocked:
1
Minimal
Blocks only clear slurs and explicit threats.
2
Light
Blocks hate speech and repeated spam patterns.
3
Balanced
Default. Blocks toxicity, harassment, and spam.
4
Strict
Also blocks mildly offensive and sexually suggestive content.
5
Maximum
Blocks all content with any ambiguity. Family-friendly streams.
The AI returns one of three decisions: allow (message is clean), deny (message is blocked — the donation still processes, only the message is suppressed), or uncertain (falls back to your strictness threshold to decide). All decisions are logged in Dashboard → Moderation with the reasoning the AI provided.
Banned Words
In addition to AI moderation, you can define a custom list of literal words or phrases that are always blocked, regardless of AI decision. This is useful for community-specific terms or competitor names you do not want appearing on your stream.
Banned words matching is case-insensitive and uses whole-word or substring detection (configurable). A message matching any banned word is immediately denied without being sent to the AI model, saving API quota.
Configure your banned word list in Dashboard → Moderation → Banned Words. Changes apply immediately to new donations.
TTS Overview
Text-to-Speech converts donor messages into spoken audio that plays through your OBS scene. Schat uses a multi-provider fallback chain to guarantee maximum uptime. Audio is generated server-side and streamed to your overlay — your viewers and your OBS browser source both hear the same audio simultaneously.
TTS is triggered only after a message passes the moderation pipeline. If a message is blocked, no audio is generated. Messages are sanitised before synthesis: HTML and SSML tags are stripped, repeated characters are collapsed (so "AAAAAAA" doesn't generate an unnaturally long audio clip), and messages are capped at 150 characters by default (configurable via your TTS settings).
TTS Providers
The TTS fallback chain runs in this order, moving to the next provider only if the current one fails or has exceeded its monthly character quota:
Google Cloud TTS
1,000,000 characters/monthHighest quality, natural-sounding voices. Requires Google Cloud credentials set in your Schat TTS settings. If you have not configured Google credentials, this provider is skipped.
Azure Cognitive Services
500,000 characters/monthHigh quality neural voices from Microsoft Azure. Requires Azure Speech API key and region. Used as the first fallback when Google is unavailable or over quota.
Kokoro (Local)
UnlimitedOpen-source TTS model running on a local or self-hosted endpoint. No cloud costs, no quota limits. Requires you to run the Kokoro server separately. Configure the endpoint URL in TTS settings.
Edge TTS
UnlimitedMicrosoft Edge browser TTS synthesis network. No configuration required — works out of the box as a final fallback. Quality is lower than Google or Azure but reliable for continuous uptime.
Public Donation Page
Your public donation page at https://schat.webasthetic.in/[username] is the link you share in your YouTube description, stream panels, and social profiles. Viewers visit this page to send you a donation.
The page displays:
- Your display name, avatar, and bio
- Your current active stream goal (if you are live)
- Your top donors leaderboard
- The donation form with your configured minimum amount and superchat tier information
- Any custom sections, featured links, or social links you have added in your Theme Config
Customise the page layout, colours, and content in Dashboard → Appearance. Changes are reflected immediately without a page reload for visitors.
YouTube Integration
Connecting your YouTube channel to Schat enables automatic live stream detection, live chat display in the Studio, and real-time stream goal synchronisation.
When you sign in with your YouTube account's Google email, Schat requests read-only access to your YouTube channel. Specifically, we request:
- youtube.readonly — to read your channel ID, subscriber count, and list your live/scheduled streams.
- youtube.force-ssl — required by YouTube's API to access live chat messages over a secure connection.
To revoke Schat's YouTube access at any time, visit your Google Account → Security → Third-party apps with account access and remove Schat. This will disconnect the YouTube integration but will not delete your Schat account or donation history.
Financial Dashboard
The Financials page in your Creator Dashboard gives you a full history of all completed donations, searchable and filterable by date range, minimum amount, and status. Key metrics shown:
- Total earned — sum of all completed donations in your selected date range.
- Donation count — number of completed transactions.
- Average donation — total earned divided by count.
- Top donor — the single donor with the highest cumulative contribution in the period.
Note: Amounts displayed in the dashboard are in INR (Rupees) and represent the gross donation amount before Razorpay's processing fees. Net settlement amounts are visible in your Razorpay Dashboard under Settlements.
Last updated May 2026
API Reference