Pereiti prie turinio

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. 1

    Sukurkite API raktą

    Atidarykite Nustatymai, Kūrėjams ir sukurkite raktą tik su reikalingais leidimais. Jis rodomas vieną kartą.

  2. 2

    Kvieskite API

    Siųskite raktą kaip Bearer raktą. Kurkite susitikimus, išvardykite įrašus, gaukite transkripcijas ir santraukas.

  3. 3

    Klausykite įvykių

    Pridėkite webhook galinį tašką ir reaguokite, kai susitikimas baigiasi ar transkripcija paruošta, arba tikrinkite įvykių srautą.

Sukurti susitikimąbash
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", … }
Išvardyti įrašusbash
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ų.
Webhook pristatymashttp
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.

Patikrinti webhook (Node.js)node.js
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))
  );
}
Patikrinti webhook (Python)python
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.started
  • meeting.ended
  • recording.ready
  • transcript.ready
  • summary.ready
  • registration.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.
Trigerio užklausimas (polling)bash
# 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ų.

Claude Desktop (claude_desktop_config.json)json
{
  "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_..." }
    }
  }
}
Cursor (.cursor/mcp.json)json
{
  "mcpServers": {
    "mets": {
      "url": "https://mets.ulewicz.space/api/v1/mcp",
      "headers": { "Authorization": "Bearer mets_sk_..." }
    }
  }
}
Claude Codebash
claude mcp add --transport http mets https://mets.ulewicz.space/api/v1/mcp \
  --header "Authorization: Bearer mets_sk_..."
Neapdorotas JSON-RPC iškvietimasbash
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. 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. 2

    Prijunkite SDK

    Įkelkite script žymę, ES modulį arba React komponentą ir nurodykite susitikimo kodą ar įterpimo raktą.

  3. 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ę.

Leisti pirminius kilmės šaltiniushttp
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"] }'
Script žymėhtml
<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>
ES modulistypescript
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(); },
});
Reacttsx
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>
  );
}
Serverio pusės įterpimo raktashttp
# 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.
postMessage protokolasjs
// 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.

Bazinis URL: https://mets.ulewicz.space/api/v1/public
  • 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.

Atidaryti interaktyvų žinyną

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.