Розробникам
Створюйте на основі Mets
REST API та підписані вебхуки для зустрічей, записів, транскриптів і підсумків ШІ. Ваші дані залишаються в ЄС.
Швидкий старт
Від нуля до зустрічі за три кроки
SDK не потрібен. Звичайний HTTPS і JSON.
- 1
Створіть ключ API
Відкрийте «Налаштування», «Розробникам» і створіть ключ лише з потрібними вам дозволами. Його показують один раз.
- 2
Викличте API
Надсилайте ключ як токен Bearer. Створюйте зустрічі, перелічуйте записи, отримуйте транскрипти й підсумки.
- 3
Слухайте події
Додайте кінцеву точку вебхука й реагуйте, коли зустріч завершується або транскрипт готовий, чи опитуйте стрічку подій.
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://…" } ] }Вебхуки
Дізнавайтеся в ту мить, коли щось відбувається
Кожна доставка — це підписаний HTTPS POST. Невдалі доставки повторюються з експоненційною затримкою, усього п’ять спроб.
meeting.startedПерший учасник приєднався, і зустріч розпочалася.meeting.endedЗустріч завершилася.recording.readyЗапис оброблено, і його можна завантажити.transcript.readyТранскрипт готовий.summary.readyПідсумок ШІ доступний.registration.createdХтось зареєструвався на один із ваших вебінарів.
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 від позначки часу, крапки та необробленого тіла. Порівнюйте за сталий час і відхиляйте позначки часу старші за п’ять хвилин.
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"])Автоматизація
Zapier, Make і n8n без коду
Тригери з опитуванням і вихідні вебхуки – ті самі події, що Ви бачите в застосунку. А також сповіщення в Slack і Teams.
Тригери з опитуванням
GET /api/v1/public/triggers/{event}?since= повертає події після Вашого останнього курсору. Без since Ви отримаєте найновіші – ідеально для тестових даних.
meeting.startedmeeting.endedrecording.readytranscript.readysummary.readyregistration.created
- Zapier: застосунок в integrations/zapier (автентифікація API-ключем, 6 тригерів, дії: створити зустріч, зареєструвати учасника).
- n8n: пакет вузла integrations/n8n (Mets + Mets Trigger).
- Make: модуль HTTP + підписані вихідні вебхуки.
- Slack і Teams: Налаштування → Інтеграції → Сповіщення в каналах.
# 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-ключа (Налаштування → Розробник). Доступні інструменти залежать від прав доступу ключа.
{
"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?"}}}'Вбудовування
Вбудуйте зустріч Mets у свій продукт
SDK, незалежний від фреймворку, відображає кімнату в iframe і взаємодіє з Вашою сторінкою через невеликий версіонований протокол postMessage.
- 1
Дозвольте свої origin
Вбудовувати кімнату можуть лише сторінки з origin зі списку. Браузер застосовує цей список через CSP frame-ancestors.
- 2
Підключіть SDK
Додайте тег script, ES-модуль або компонент React і вкажіть код зустрічі чи токен вбудовування.
- 3
Видавайте токени на своєму сервері
Створюйте короткочасний токен для іменованого гостя за допомогою API-ключа, щоб код і ключ ніколи не потрапляли в браузер.
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 }Події (з iframe на сторінку)
readyВбудована сторінка завантажилась і приймає команди.joinedГість увійшов до кімнати (дані про учасника й зустріч).leftГість вийшов, був видалений або зустріч завершилася (із зазначенням причини).participant-countКількість людей у кімнаті зараз.recordingЗапис розпочато або зупинено (active, mode).mediaЛокальний мікрофон або камеру ввімкнено чи вимкнено.errorЗустріч недоступна (не знайдено, завершена, скасована).
Команди (зі сторінки в iframe)
muteВимкнути локальний мікрофон або камеру з kind: "video".unmuteЗнову ввімкнути мікрофон (або камеру).leaveВийти із зустрічі.toggleChatВідкрити або закрити панель чату.setThemeПеремкнути світлу, темну або системну тему.
// 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, команди приймаються тільки від нього, а токени вбудовування підписані, швидко спливають і фіксують ім’я гостя.
Довідник
Усе потрібне, нічого зайвого
Дванадцять кінцевих точок охоплюють зустрічі, записи, транскрипти, підсумки, реєстрації на вебінари та події.
- 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, без плати за запити. Потрібні вищі ліміти чи індивідуальна угода? Напишіть нам.
Випустіть першу інтеграцію уже сьогодні
Створіть обліковий запис, згенеруйте ключ і зробіть перший запит за лічені хвилини.