Kūrėjams
Kurkite su Mets
REST API ir pasirašyti webhooks susitikimams, įrašams, transkripcijoms ir DI santraukoms. Jūsų duomenys lieka ES.
Greita pradžia
Nuo nulio iki susitikimo per tris žingsnius
SDK nereikalingas. Paprastas HTTPS ir JSON.
- 1
Sukurkite API raktą
Atidarykite Nustatymai, Kūrėjams ir sukurkite raktą tik su reikalingais leidimais. Jis rodomas vieną kartą.
- 2
Kvieskite API
Siųskite raktą kaip Bearer raktą. Kurkite susitikimus, išvardykite įrašus, gaukite transkripcijas ir santraukas.
- 3
Klausykite įvykių
Pridėkite webhook galinį tašką ir reaguokite, kai susitikimas baigiasi ar transkripcija paruošta, arba tikrinkite įvykių srautą.
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://…" } ] }Webhooks
Žinokite akimirką, kai kas nors įvyksta
Kiekvienas pristatymas yra pasirašytas HTTPS POST. Nepavykę pristatymai kartojami su eksponentiniu atidėjimu, iš viso penki bandymai.
meeting.startedPrisijungė pirmasis dalyvis ir susitikimas vyksta.meeting.endedSusitikimas baigėsi.recording.readyĮrašas apdorotas ir jį galima atsisiųsti.transcript.readyTranskripcija baigta.summary.readyDI santrauka prieinama.registration.createdKažkas užsiregistravo į vieną iš Jūsų internetinių seminarų.
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" } }
}Tikrinkite kiekvieną užklausą
Mets pasirašo turinį Jūsų galinio taško paslaptimi: X-Mets-Signature yra sha256= ir po jo laiko žymos, taško ir neapdoroto turinio HMAC-SHA256. Lyginkite pastoviu laiku ir atmeskite laiko žymas, senesnes nei penkios minutės.
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"])Automatizavimas
Zapier, Make ir n8n be kodo
Polling trigeriai ir siunčiamieji webhook – tie patys įvykiai, kuriuos matote programoje. Taip pat Slack ir Teams pranešimai.
Polling trigeriai
GET /api/v1/public/triggers/{event}?since= grąžina įvykius po Jūsų paskutinio žymeklio. Be since gausite naujausius – puikiai tinka pavyzdiniams duomenims.
meeting.startedmeeting.endedrecording.readytranscript.readysummary.readyregistration.created
- Zapier: programėlė integrations/zapier (API rakto autentifikavimas, 6 trigeriai, veiksmai: sukurti susitikimą, užregistruoti dalyvį).
- n8n: mazgų paketas integrations/n8n (Mets + Mets Trigger).
- Make: HTTP modulis + pasirašyti siunčiamieji webhook.
- Slack ir Teams: Nustatymai → Integracijos → Pranešimai kanaluose.
# 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
Susitikimai DI agentams (MCP)
Model Context Protocol serveris (Streamable HTTP). Claude, Cursor ir kiti agentai skaito transkripcijas, ieško susitikimų ir planuoja naujus.
Įrankiai
Galinis taškas: POST https://mets.ulewicz.space/api/v1/mcp. Ištekliai: mets://meetings/{id}/transcript ir /summary.
list_meetingsSusitikimų sąrašas (filtras pagal būseną).get_meetingSusitikimo informacija pagal ID arba kodą.get_transcriptGrynojo teksto transkripcija, pasirinktinai išversta.get_summaryDI santrauka: TL;DR, sprendimai, veiksmų punktai.search_contentViso teksto paieška transkripcijose ir pokalbiuose.ask_meetingsKlausimas natūralia kalba (RAG) su citatomis.list_tasksSusitikimo užduotys ir nuorodos į sekimo sistemas.create_meetingMomentinis susitikimas su prisijungimo nuoroda.schedule_meetingSuplanuoti susitikimą nurodytam laikui.
Autentifikuokitės API raktu (Nustatymai → Kūrėjams). Matomi įrankiai priklauso nuo rakto leidimų.
{
"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?"}}}'Įterpimas
Įdėkite Mets susitikimą į savo produktą
Nuo karkaso nepriklausomas SDK atvaizduoja kambarį iframe ir bendrauja su Jūsų puslapiu per nedidelį, versijuotą postMessage protokolą.
- 1
Leiskite savo kilmės šaltinius
Kambarį gali įrėminti tik puslapiai iš Jūsų nurodytų kilmės šaltinių. Sąrašą naršyklė vykdo per CSP frame-ancestors.
- 2
Prijunkite SDK
Įkelkite script žymę, ES modulį arba React komponentą ir nurodykite susitikimo kodą ar įterpimo raktą.
- 3
Išduokite raktus savo serveryje
Sukurkite trumpai galiojantį raktą įvardytam svečiui su savo API raktu, kad kodas ir raktas niekada nepatektų į naršyklę.
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 }Įvykiai (iš iframe į puslapį)
readyĮterptas puslapis pasileido ir priima komandas.joinedSvečias įėjo į kambarį (dalyvio ir susitikimo informacija).leftSvečias išėjo, buvo pašalintas arba susitikimas baigėsi (su priežastimi).participant-countŠiuo metu kambaryje esančių žmonių skaičius.recordingĮrašymas prasidėjo arba sustojo (aktyvus, režimas).mediaVietinis mikrofonas ar kamera buvo įjungti arba išjungti.errorSusitikimas nepasiekiamas (nerastas, pasibaigęs, atšauktas).
Komandos (iš puslapio į iframe)
muteIšjungti vietinį mikrofoną arba kamerą su kind: "video".unmuteVėl įjungti mikrofoną (arba kamerą).leaveIšeiti iš susitikimo.toggleChatAtidaryti arba uždaryti pokalbio skydelį.setThemePerjungti šviesią, tamsią ir sistemos temas.
// 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" }Pagal numatytuosius nustatymus užrakinta
Be leidžiamų kilmės šaltinių kambario įrėminti negalima. Įvykiai siunčiami vienam patikrintam kilmės šaltiniui, komandos priimamos tik iš jo, o įterpimo raktai yra pasirašyti, greitai nustoja galioti ir užfiksuoja svečio vardą.
Žinynas
Viskas, ko reikia, nieko perteklinio
Dvylika galinių taškų apima susitikimus, įrašus, transkripcijas, santraukas, seminarų registracijas ir įvykius.
- 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
Apimties API raktai
Authorization: Bearer mets_sk_…. Raktai turi tik Jūsų suteiktus leidimus, juos galima apriboti organizacijai, nustatyti galiojimo pabaigą arba bet kada atšaukti.
Sąžiningi užklausų limitai
120 užklausų per minutę ir 20 per sekundę viename rakte. Kiekviename atsakyme yra X-RateLimit antraštės.
OpenAPI 3
Pilna mašininiu būdu skaitoma schema ir interaktyvi konsolė užklausoms išbandyti.
API įeina į Business
Viešas API ir webhooks yra Business plano dalis, be mokesčių už užklausas. Reikia didesnių limitų ar individualios sutarties? Rašykite mums.
Išleiskite pirmąją integraciją šiandien
Sukurkite paskyrą, sugeneruokite raktą ir pateikite pirmą užklausą per kelias minutes.