Pro vývojáře
Stavte na Mets
REST API a podepsané webhooky pro schůzky, nahrávky, přepisy a shrnutí od AI. Vaše data zůstávají v EU.
Rychlý start
Od nuly ke schůzce ve třech krocích
Není potřeba žádné SDK. Obyčejné HTTPS a JSON.
- 1
Vytvořte API klíč
Otevřete Nastavení, Pro vývojáře a vytvořte klíč jen s oprávněními, která potřebujete. Zobrazí se pouze jednou.
- 2
Zavolejte API
Pošlete klíč jako token Bearer. Vytvářejte schůzky, vypisujte nahrávky, získávejte přepisy a shrnutí.
- 3
Naslouchejte událostem
Přidejte koncový bod webhooku a reagujte, když schůzka skončí nebo je hotový přepis, případně se dotazujte na kanál událostí.
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
Zjistěte v tu chvíli, kdy se něco stane
Každé doručení je podepsaný požadavek HTTPS POST. Neúspěšná doručení se opakují s exponenciálním odstupem, celkem pětkrát.
meeting.startedPřipojil se první účastník a schůzka běží.meeting.endedSchůzka skončila.recording.readyNahrávka byla zpracována a lze ji stáhnout.transcript.readyPřepis je kompletní.summary.readyShrnutí od AI je k dispozici.registration.createdNěkdo se zaregistroval na jeden z Vašich webinářů.
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" } }
}Ověřujte každý požadavek
Mets podepisuje tělo požadavku tajným klíčem Vašeho koncového bodu: X-Mets-Signature má podobu sha256= následované HMAC-SHA256 z časového razítka, tečky a nezpracovaného těla. Porovnávejte v konstantním čase a odmítejte časová razítka starší než pět minut.
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"])Automatizace
Zapier, Make a n8n bez kódu
Pollingové triggery a odchozí webhooky – stejné události, které vidíte v aplikaci. K tomu oznámení do Slacku a Teams.
Pollingové triggery
GET /api/v1/public/triggers/{event}?since= vrátí události po Vašem posledním kurzoru. Bez since dostanete ty nejnovější – ideální pro ukázková data.
meeting.startedmeeting.endedrecording.readytranscript.readysummary.readyregistration.created
- Zapier: aplikace v integrations/zapier (ověření API klíčem, 6 triggerů, akce: vytvořit schůzku, zaregistrovat účastníka).
- n8n: balíček uzlu integrations/n8n (Mets + Mets Trigger).
- Make: modul HTTP + podepsané odchozí webhooky.
- Slack a Teams: Nastavení → Integrace → Oznámení do kanálů.
# 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
Schůzky pro AI agenty (MCP)
Server Model Context Protocol (Streamable HTTP). Claude, Cursor a další agenti čtou přepisy, vyhledávají ve schůzkách a plánují nové.
Nástroje
Endpoint: POST https://mets.ulewicz.space/api/v1/mcp. Zdroje: mets://meetings/{id}/transcript a /summary.
list_meetingsSeznam schůzek (filtr podle stavu).get_meetingPodrobnosti schůzky podle ID nebo kódu.get_transcriptPřepis ve formě prostého textu, volitelně přeložený.get_summaryAI shrnutí: TL;DR, rozhodnutí, úkoly.search_contentFulltextové hledání v přepisech a chatu.ask_meetingsDotaz v přirozeném jazyce (RAG) s citacemi.list_tasksÚkoly ze schůzek a odkazy na správce úkolů.create_meetingOkamžitá schůzka s odkazem pro připojení.schedule_meetingNaplánovat schůzku na zadaný čas.
Ověřte se API klíčem (Nastavení → Vývojáři). Nástroje, které uvidíte, závisejí na oprávněních klíče.
{
"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žení
Vložte schůzku Mets do svého produktu
SDK nezávislé na frameworku vykreslí místnost v iframe a komunikuje s Vaší stránkou přes malý, verzovaný protokol postMessage.
- 1
Povolte své originy
Místnost mohou vkládat pouze stránky z uvedených originů. Seznam vynucuje prohlížeč pomocí CSP frame-ancestors.
- 2
Připojte SDK
Načtěte značku script, modul ES nebo komponentu React a nasměrujte ji na kód schůzky nebo embed token.
- 3
Vydávejte tokeny na svém serveru
Pomocí svého API klíče vytvořte krátkodobý token pro pojmenovaného hosta, aby se kód ani klíč nikdy nedostaly do prohlížeče.
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 }Události (z iframe do stránky)
readyVložená stránka se spustila a přijímá příkazy.joinedHost vstoupil do místnosti (údaje o účastníkovi a schůzce).leftHost odešel, byl odebrán nebo schůzka skončila (s uvedením důvodu).participant-countPočet lidí aktuálně v místnosti.recordingNahrávání bylo spuštěno nebo zastaveno (active, mode).mediaMístní mikrofon nebo kamera byly zapnuty či vypnuty.errorSchůzka není dostupná (nenalezena, skončila, zrušena).
Příkazy (ze stránky do iframe)
muteZtlumit místní mikrofon, nebo kameru pomocí kind: "video".unmuteZnovu zapnout mikrofon (nebo kameru).leaveOpustit schůzku.toggleChatOtevřít nebo zavřít panel chatu.setThemePřepnout mezi světlým, tmavým a systémovým motivem.
// 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" }Ve výchozím stavu zamčeno
Bez povolených originů nemůže místnost nikdo vložit. Události se odesílají na jediný ověřený origin, příkazy se přijímají pouze z něj a embed tokeny jsou podepsané, rychle vyprší a pevně určují jméno hosta.
Reference
Vše, co potřebujete, nic navíc
Dvanáct koncových bodů pokrývá schůzky, nahrávky, přepisy, shrnutí, registrace na webináře a události.
- 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 klíče s omezeným rozsahem
Authorization: Bearer mets_sk_…. Klíče nesou jen oprávnění, která jim udělíte, lze je omezit na organizaci, nastavit jim platnost nebo je kdykoli odvolat.
Férové limity požadavků
120 požadavků za minutu a špičky 20 za sekundu na klíč. Každá odpověď obsahuje hlavičky X-RateLimit.
OpenAPI 3
Kompletní strojově čitelné schéma a interaktivní konzole pro vyzkoušení požadavků.
API je součástí tarifu Business
Veřejné API a webhooky jsou součástí tarifu Business, bez poplatků za jednotlivé požadavky. Potřebujete vyšší limity nebo individuální smlouvu? Napište nám.
Nasaďte svou první integraci ještě dnes
Vytvořte si účet, vygenerujte klíč a odešlete první požadavek během několika minut.