Pre vývojárov
Stavajte na Mets
REST API a podpísané webhooky pre stretnutia, nahrávky, prepisy a zhrnutia od AI. Vaše dáta zostávajú v EÚ.
Rýchly štart
Od nuly po stretnutie v troch krokoch
SDK nie je potrebné. Obyčajné HTTPS a JSON.
- 1
Vytvorte API kľúč
Otvorte Nastavenia, Vývojári a vytvorte kľúč iba s oprávneniami, ktoré potrebujete. Zobrazí sa raz.
- 2
Zavolajte API
Odošlite kľúč ako token Bearer. Vytvárajte stretnutia, zobrazujte zoznam nahrávok, sťahujte prepisy a zhrnutia.
- 3
Počúvajte udalosti
Pridajte koncový bod webhooku a reagujte, keď sa stretnutie skončí alebo je prepis hotový, prípadne sledujte kanál udalostí.
curl -X POST https://mets.ulewicz.space/api/v1/public/meetings \
-H "Authorization: Bearer $METS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Weekly sync",
"scheduled_at": "2026-11-03T09:00:00+01:00",
"duration_minutes": 30,
"settings": { "waiting_room": true, "transcription_auto": true }
}'
# -> 201 { "id": "…", "code": "abc-defg-hjk", "join_url": "https://mets.ulewicz.space/m/abc-defg-hjk", … }curl https://mets.ulewicz.space/api/v1/public/meetings/abc-defg-hjk/recordings \
-H "Authorization: Bearer $METS_API_KEY"
# -> { "data": [ { "id": "…", "kind": "video", "status": "ready",
# "duration_seconds": 1834, "download_url": "https://…" } ] }Webhooky
Vedzte v okamihu, keď sa niečo stane
Každé doručenie je podpísaný HTTPS POST. Neúspešné doručenia sa opakujú s exponenciálnym odstupom, spolu päť pokusov.
meeting.startedPripojil sa prvý účastník a stretnutie prebieha.meeting.endedStretnutie sa skončilo.recording.readyNahrávka bola spracovaná a dá sa stiahnuť.transcript.readyPrepis je kompletný.summary.readyZhrnutie od AI je k dispozícii.registration.createdNiekto sa zaregistroval na jeden z vašich webinárov.
POST https://your-server.example/webhooks/mets
X-Mets-Event: meeting.ended
X-Mets-Delivery: 7c0f…
X-Mets-Timestamp: 1790000000
X-Mets-Signature: sha256=9f2b…
{
"id": "evt_1042",
"type": "meeting.ended",
"created_at": "2026-11-03T09:31:07Z",
"data": { "meeting": { "id": "…", "code": "abc-defg-hjk", "title": "Weekly sync", "status": "ended" } }
}Overujte každú požiadavku
Mets podpisuje telo požiadavky tajným kľúčom vášho koncového bodu: X-Mets-Signature je sha256= nasledované HMAC-SHA256 z časovej pečiatky, bodky a surového tela. Porovnávajte v konštantnom čase a odmietnite časové pečiatky staršie než päť minút.
import crypto from "node:crypto";
// Express: use express.raw({ type: "application/json" }) so you get the exact bytes.
export function verify(rawBody, headers, secret) {
const ts = headers["x-mets-timestamp"];
const expected =
"sha256=" + crypto.createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
const given = headers["x-mets-signature"] ?? "";
const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300; // reject replays
return (
fresh &&
given.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected))
);
}import hashlib, hmac, time
def verify(raw_body: bytes, headers: dict, secret: str) -> bool:
ts = headers["X-Mets-Timestamp"]
mac = hmac.new(secret.encode(), ts.encode() + b"." + raw_body, hashlib.sha256).hexdigest()
expected = "sha256=" + mac
fresh = abs(time.time() - int(ts)) < 300 # reject replays
return fresh and hmac.compare_digest(expected, headers["X-Mets-Signature"])Automatizácia
Zapier, Make a n8n bez kódu
Pollingové triggery plus odchádzajúce webhooky – tie isté udalosti, ktoré vidíte v aplikácii. Navyše upozornenia v Slacku a Teams.
Pollingové triggery
GET /api/v1/public/triggers/{event}?since= vráti udalosti po Vašom poslednom kurzore. Bez since dostanete najnovšie – ideálne ako vzorové údaje.
meeting.startedmeeting.endedrecording.readytranscript.readysummary.readyregistration.created
- Zapier: aplikácia v integrations/zapier (autentifikácia kľúčom API, 6 triggerov, akcie: vytvoriť stretnutie, zaregistrovať účastníka).
- n8n: balík uzlov integrations/n8n (Mets + Mets Trigger).
- Make: modul HTTP + podpísané odchádzajúce webhooky.
- Slack a Teams: Nastavenia → Integrácie → Upozornenia v kanáloch.
# newest first (first poll / sample), then follow next_cursor
curl -s -H "Authorization: Bearer $METS_API_KEY" \
"https://mets.ulewicz.space/api/v1/public/triggers/summary.ready?limit=5"
curl -s -H "Authorization: Bearer $METS_API_KEY" \
"https://mets.ulewicz.space/api/v1/public/triggers/registration.created?since=evt_1234&slug=my-webinar"MCP
Stretnutia pre agentov AI (MCP)
Server Model Context Protocol (Streamable HTTP). Claude, Cursor a ďalší agenti čítajú prepisy, vyhľadávajú v stretnutiach a plánujú nové.
Nástroje
Endpoint: POST https://mets.ulewicz.space/api/v1/mcp. Zdroje: mets://meetings/{id}/transcript a /summary.
list_meetingsZoznam stretnutí (filter podľa stavu).get_meetingPodrobnosti stretnutia podľa ID alebo kódu.get_transcriptPrepis ako čistý text, voliteľne preložený.get_summarySúhrn AI: TL;DR, rozhodnutia, akčné body.search_contentFulltextové vyhľadávanie v prepisoch a chate.ask_meetingsOtázka v prirodzenom jazyku (RAG) s citáciami.list_tasksÚlohy zo stretnutí a odkazy na nástroje.create_meetingOkamžité stretnutie s odkazom na pripojenie.schedule_meetingNaplánuje stretnutie na zadaný čas.
Autentifikujte sa kľúčom API (Nastavenia → Pre vývojárov). Nástroje, ktoré uvidíte, závisia od oprávnení kľúča.
{
"mcpServers": {
"mets": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://mets.ulewicz.space/api/v1/mcp",
"--header", "Authorization: Bearer ${METS_API_KEY}"
],
"env": { "METS_API_KEY": "mets_sk_..." }
}
}
}{
"mcpServers": {
"mets": {
"url": "https://mets.ulewicz.space/api/v1/mcp",
"headers": { "Authorization": "Bearer mets_sk_..." }
}
}
}claude mcp add --transport http mets https://mets.ulewicz.space/api/v1/mcp \
--header "Authorization: Bearer mets_sk_..."curl -s https://mets.ulewicz.space/api/v1/mcp \
-H "Authorization: Bearer $METS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"ask_meetings","arguments":{"question":"What did we decide about pricing?"}}}'Vloženie
Vložte stretnutie Mets do svojho produktu
SDK nezávislé od frameworku zobrazí miestnosť v iframe a komunikuje s Vašou stránkou cez malý, verzovaný protokol postMessage.
- 1
Povoľte svoje originy
Miestnosť môžu vložiť iba stránky z uvedených originov. Zoznam presadzuje prehliadač cez CSP frame-ancestors.
- 2
Pripojte SDK
Načítajte značku script, modul ES alebo komponent React a nasmerujte ho na kód stretnutia alebo token vloženia.
- 3
Vydávajte tokeny na svojom serveri
Pomocou svojho kľúča API vytvorte krátkodobý token pre pomenovaného hosťa, aby sa kód ani kľúč nikdy nedostali do prehliadača.
curl -X PUT https://mets.ulewicz.space/api/v1/public/meetings/abc-defg-hjk/embed-origins \
-H "Authorization: Bearer mets_sk_..." \
-H "Content-Type: application/json" \
-d '{ "origins": ["https://app.example.com", "https://*.example.com"] }'<div id="meeting" style="height: 640px"></div>
<script src="https://mets.ulewicz.space/embed/mets-embed.js"></script>
<script>
const meeting = MetsEmbed.MetsMeeting.create({
container: "#meeting",
meetingCode: "abc-defg-hjk",
name: "Anna", // pre-filled guest name
locale: "en",
theme: "dark",
features: { chat: true, participants: true },
onEvent: (e) => console.log(e.type, e),
});
meeting.on("joined", (e) => console.log("in the room as", e.participant.name));
meeting.on("participant-count", (e) => console.log(e.count, "people"));
document.querySelector("#mute").onclick = () => meeting.mute();
</script>npm install @mets/embed
import { MetsMeeting } from "@mets/embed";
const meeting = MetsMeeting.create({
container: document.getElementById("meeting")!,
joinToken, // from your server, see below
onEvent: (e) => { if (e.type === "left") showThanks(); },
});npm install @mets/embed @mets/embed-react
import { MetsMeeting } from "@mets/embed-react";
export function Room({ joinToken }: { joinToken: string }) {
const ref = useRef<MetsMeetingHandle>(null);
return (
<div style={{ height: 640 }}>
<MetsMeeting ref={ref} joinToken={joinToken} locale="en" onEvent={(e) => console.log(e)} />
<button onClick={() => ref.current?.mute()}>Mute</button>
</div>
);
}# server side — the browser never sees the meeting code or your API key
curl -X POST https://mets.ulewicz.space/api/v1/public/embed/tokens \
-H "Authorization: Bearer mets_sk_..." \
-H "Content-Type: application/json" \
-d '{ "meeting": "abc-defg-hjk", "name": "Anna Kowalska", "ttl_seconds": 600,
"features": { "chat": false } }'
# 201
{ "token": "mets_et_eyJj...", "expires_at": "2026-10-09T12:10:00Z",
"embed_url": "https://mets.ulewicz.space/en/embed/mets_et_eyJj...", "embeddable": true }Udalosti (iframe → stránka)
readyVložená stránka sa spustila a prijíma príkazy.joinedHosť vstúpil do miestnosti (informácie o účastníkovi a stretnutí).leftHosť odišiel, bol odstránený alebo stretnutie skončilo (s dôvodom).participant-countPočet ľudí, ktorí sú práve v miestnosti.recordingNahrávanie sa spustilo alebo zastavilo (active, mode).mediaLokálny mikrofón alebo kamera bola zapnutá či vypnutá.errorStretnutie nie je dostupné (nenájdené, skončilo, zrušené).
Príkazy (stránka → iframe)
muteVypne lokálny mikrofón alebo kameru s kind: "video".unmuteZnova zapne mikrofón (alebo kameru).leaveOpustiť stretnutie.toggleChatOtvorí alebo zavrie panel chatu.setThemePrepne svetlý, tmavý a systémový motív.
// iframe -> host page (posted to exactly one validated origin)
{ source: "mets-embed", v: 1, dir: "event", type: "joined",
participant: { identity, name, role }, meeting: { code, title } }
// host page -> iframe (accepted only from an allow-listed origin)
{ source: "mets-embed", v: 1, dir: "command", type: "setTheme", theme: "dark" }Predvolene uzamknuté
Bez povolených originov nemôže miestnosť nikto vložiť. Udalosti sa odosielajú iba na jeden overený origin, príkazy sa prijímajú iba z neho a tokeny vloženia sú podpísané, rýchlo expirujú a pevne určujú meno hosťa.
Referencia
Všetko, čo potrebujete, nič navyše
Dvanásť koncových bodov pokrýva stretnutia, nahrávky, prepisy, zhrnutia, registrácie na webináre a udalosti.
- GET
/me— - GET
/meetingsmeetings:read - POST
/meetingsmeetings:write - GET
/meetings/{id}meetings:read - PATCH
/meetings/{id}meetings:write - DELETE
/meetings/{id}meetings:write - GET
/meetings/{id}/participantsmeetings:read - GET
/meetings/{id}/recordingsrecordings:read - GET
/meetings/{id}/transcripttranscripts:read - GET
/meetings/{id}/summarytranscripts:read - POST
/webinars/{slug}/registrationswebinars:write - GET
/eventsmeetings:read
API kľúče s obmedzeným rozsahom
Authorization: Bearer mets_sk_…. Kľúče nesú iba oprávnenia, ktoré udelíte, a možno ich obmedziť na organizáciu, nastaviť expiráciu alebo kedykoľvek zrušiť.
Férové limity požiadaviek
120 požiadaviek za minútu a dávky po 20 za sekundu na kľúč. Každá odpoveď obsahuje hlavičky X-RateLimit.
OpenAPI 3
Kompletná strojovo čitateľná schéma a interaktívna konzola na vyskúšanie požiadaviek.
API v pláne Business
Verejné API a webhooky sú súčasťou plánu Business, bez poplatkov za jednotlivé požiadavky. Potrebujete vyššie limity alebo individuálnu zmluvu? Napíšte nám.
Nasaďte svoju prvú integráciu ešte dnes
Vytvorte si účet, vygenerujte kľúč a odošlite prvú požiadavku za pár minút.