Перейти до вмісту

Розробникам

Створюйте на основі Mets

REST API та підписані вебхуки для зустрічей, записів, транскриптів і підсумків ШІ. Ваші дані залишаються в ЄС.

Швидкий старт

Від нуля до зустрічі за три кроки

SDK не потрібен. Звичайний HTTPS і JSON.

  1. 1

    Створіть ключ API

    Відкрийте «Налаштування», «Розробникам» і створіть ключ лише з потрібними вам дозволами. Його показують один раз.

  2. 2

    Викличте API

    Надсилайте ключ як токен Bearer. Створюйте зустрічі, перелічуйте записи, отримуйте транскрипти й підсумки.

  3. 3

    Слухайте події

    Додайте кінцеву точку вебхука й реагуйте, коли зустріч завершується або транскрипт готовий, чи опитуйте стрічку подій.

Створення зустрічі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", … }
Перелік записівbash
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://…" } ] }

Вебхуки

Дізнавайтеся в ту мить, коли щось відбувається

Кожна доставка — це підписаний HTTPS POST. Невдалі доставки повторюються з експоненційною затримкою, усього п’ять спроб.

  • meeting.startedПерший учасник приєднався, і зустріч розпочалася.
  • meeting.endedЗустріч завершилася.
  • recording.readyЗапис оброблено, і його можна завантажити.
  • transcript.readyТранскрипт готовий.
  • summary.readyПідсумок ШІ доступний.
  • registration.createdХтось зареєструвався на один із ваших вебінарів.
Доставка вебхукаhttp
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" } }
}

Перевіряйте кожен запит

Mets підписує тіло запиту секретом вашої кінцевої точки: X-Mets-Signature — це sha256= і далі HMAC-SHA256 від позначки часу, крапки та необробленого тіла. Порівнюйте за сталий час і відхиляйте позначки часу старші за п’ять хвилин.

Перевірка вебхука (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))
  );
}
Перевірка вебхука (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"])

Автоматизація

Zapier, Make і n8n без коду

Тригери з опитуванням і вихідні вебхуки – ті самі події, що Ви бачите в застосунку. А також сповіщення в Slack і Teams.

Тригери з опитуванням

GET /api/v1/public/triggers/{event}?since= повертає події після Вашого останнього курсору. Без since Ви отримаєте найновіші – ідеально для тестових даних.

  • meeting.started
  • meeting.ended
  • recording.ready
  • transcript.ready
  • summary.ready
  • registration.created
  • Zapier: застосунок в integrations/zapier (автентифікація API-ключем, 6 тригерів, дії: створити зустріч, зареєструвати учасника).
  • n8n: пакет вузла integrations/n8n (Mets + Mets Trigger).
  • Make: модуль HTTP + підписані вихідні вебхуки.
  • Slack і Teams: Налаштування → Інтеграції → Сповіщення в каналах.
Опитування тригера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

Зустрічі для ШІ-агентів (MCP)

Сервер Model Context Protocol (Streamable HTTP). Claude, Cursor та інші агенти читають транскрипти, шукають зустрічі й планують нові.

Інструменти

Ендпоінт: POST https://mets.ulewicz.space/api/v1/mcp. Ресурси: mets://meetings/{id}/transcript і /summary.

  • list_meetingsСписок зустрічей (фільтр за статусом).
  • get_meetingДеталі зустрічі за ID або кодом.
  • get_transcriptТранскрипт простим текстом, за потреби з перекладом.
  • get_summaryПідсумок ШІ: коротко, рішення, пункти дій.
  • search_contentПовнотекстовий пошук у транскриптах і чаті.
  • ask_meetingsЗапитання природною мовою (RAG) із цитатами.
  • list_tasksЗавдання зустрічі та посилання на трекери.
  • create_meetingМиттєва зустріч із посиланням для приєднання.
  • schedule_meetingЗапланувати зустріч на вказаний час.

Автентифікуйтеся за допомогою API-ключа (Налаштування → Розробник). Доступні інструменти залежать від прав доступу ключа.

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_..."
Прямий виклик JSON-RPCbash
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?"}}}'

Вбудовування

Вбудуйте зустріч Mets у свій продукт

SDK, незалежний від фреймворку, відображає кімнату в iframe і взаємодіє з Вашою сторінкою через невеликий версіонований протокол postMessage.

  1. 1

    Дозвольте свої origin

    Вбудовувати кімнату можуть лише сторінки з origin зі списку. Браузер застосовує цей список через CSP frame-ancestors.

  2. 2

    Підключіть SDK

    Додайте тег script, ES-модуль або компонент React і вкажіть код зустрічі чи токен вбудовування.

  3. 3

    Видавайте токени на своєму сервері

    Створюйте короткочасний токен для іменованого гостя за допомогою API-ключа, щоб код і ключ ніколи не потрапляли в браузер.

Дозволити батьківські originhttp
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"] }'
Тег scripthtml
<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-модульtypescript
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>
  );
}
Токен вбудовування на серверіhttp
# 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 }

Події (з iframe на сторінку)

  • readyВбудована сторінка завантажилась і приймає команди.
  • joinedГість увійшов до кімнати (дані про учасника й зустріч).
  • leftГість вийшов, був видалений або зустріч завершилася (із зазначенням причини).
  • participant-countКількість людей у кімнаті зараз.
  • recordingЗапис розпочато або зупинено (active, mode).
  • mediaЛокальний мікрофон або камеру ввімкнено чи вимкнено.
  • errorЗустріч недоступна (не знайдено, завершена, скасована).

Команди (зі сторінки в iframe)

  • muteВимкнути локальний мікрофон або камеру з kind: "video".
  • unmuteЗнову ввімкнути мікрофон (або камеру).
  • leaveВийти із зустрічі.
  • toggleChatВідкрити або закрити панель чату.
  • setThemeПеремкнути світлу, темну або системну тему.
Протокол postMessagejs
// 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" }

Типово заблоковано

Без дозволених origin кімнату ніхто не може вбудувати. Події надсилаються лише на один перевірений origin, команди приймаються тільки від нього, а токени вбудовування підписані, швидко спливають і фіксують ім’я гостя.

Довідник

Усе потрібне, нічого зайвого

Дванадцять кінцевих точок охоплюють зустрічі, записи, транскрипти, підсумки, реєстрації на вебінари та події.

Базова 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

Ключі API з обмеженим доступом

Authorization: Bearer mets_sk_…. Ключі мають лише ті дозволи, які ви надали, їх можна обмежити однією організацією, задати термін дії або відкликати будь-коли.

Справедливі ліміти запитів

120 запитів на хвилину та сплески по 20 на секунду на ключ. Кожна відповідь містить заголовки X-RateLimit.

OpenAPI 3

Повна машиночитна схема й інтерактивна консоль для спроб запитів.

Відкрити інтерактивний довідник

API входить у Business

Публічний API та вебхуки йдуть разом із тарифом Business, без плати за запити. Потрібні вищі ліміти чи індивідуальна угода? Напишіть нам.

Випустіть першу інтеграцію уже сьогодні

Створіть обліковий запис, згенеруйте ключ і зробіть перший запит за лічені хвилини.