Hosted chat for your product
Every message,
patched through.
RelayCentre runs the chat inside your app — conversations, live delivery, moderation and usage billing — so your team builds the product, not the plumbing.
Free Dev plan · 5,000 credits every month · no card
How it works
One message, four stops
- 01
Checked
Moderation reads it before anything is stored. Phone numbers, links and abuse are redacted, held for review or refused, as you choose.
- 02
Numbered
It takes the next number in its thread. No gaps and no duplicates, even when a phone on a bad network sends it twice.
- 03
Stored
It is written to your centre only. Isolation is enforced inside the database, not just in our code.
- 04
Delivered
Open apps receive it live over SSE or WebSocket. Your server gets a signed webhook, retried until it answers.
Safety
Safe on day one
Built for tutoring centres, schools and communities where the people chatting may be young. The defaults protect them before you change a setting; you decide how strict each rule is.
Held and removed messages are kept as evidence. Their sender cannot delete them.
What the other person sees
call me on [removed] after class
rule: phone numbers · action: redact · stored without the number
- Phone numbersRedact
- E-mail addressesRedact
- LinksRedact
- ProfanityRedact
- Invites to other appsOff
- Your own blocked wordsHold for review
Pricing
Pay for what moves
Integration
Two calls from your server
Keep your secret key on your server. Give each signed-in user a short-lived token, and the browser chats directly with RelayCentre — no chat traffic through your backend.
// On your server — never in the browser.
const RC = 'https://api.relaycentre…/v1';
const headers = { 'X-Api-Key': process.env.RELAYCENTRE_SECRET_KEY,
'Content-Type': 'application/json' };
// 1. Make sure the signed-in user exists in your centre.
await fetch(`${RC}/chat/participants`, { method: 'POST', headers,
body: JSON.stringify({ external_id: user.id, display_name: user.name }) });
// 2. Hand the browser a token that lasts 15 minutes.
const res = await fetch(`${RC}/chat/participant-tokens`, { method: 'POST', headers,
body: JSON.stringify({ external_id: user.id, ttl_seconds: 900 }) });Open your centre in a minute
Your e-mail, a name for your centre, and you have an API key.
Create a centre