Przejdź do treści

Dla deweloperów

Buduj na Mets

REST API i podpisane webhooki dla spotkań, nagrań, transkrypcji i podsumowań AI. Twoje dane zostają w UE.

Szybki start

Od zera do spotkania w trzech krokach

Bez SDK. Zwykłe HTTPS i JSON.

  1. 1

    Utwórz klucz API

    Otwórz Ustawienia, Dla deweloperów i utwórz klucz z samymi potrzebnymi uprawnieniami. Pokazujemy go tylko raz.

  2. 2

    Wywołaj API

    Wyślij klucz jako token Bearer. Twórz spotkania, listuj nagrania, pobieraj transkrypcje i podsumowania.

  3. 3

    Nasłuchuj zdarzeń

    Dodaj adres webhooka i reaguj, gdy spotkanie się kończy lub transkrypcja jest gotowa, albo odpytuj kanał zdarzeń.

Utwórz spotkaniebash
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", … }
Lista nagrań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://…" } ] }

Webhooki

Wiesz od razu, kiedy coś się dzieje

Każda dostawa to podpisane żądanie HTTPS POST. Nieudane dostawy ponawiamy z rosnącym odstępem, łącznie pięć prób.

  • meeting.startedDołączył pierwszy uczestnik, spotkanie trwa.
  • meeting.endedSpotkanie się zakończyło.
  • recording.readyNagranie zostało przetworzone i można je pobrać.
  • transcript.readyTranskrypcja jest kompletna.
  • summary.readyPodsumowanie AI jest dostępne.
  • registration.createdKtoś zarejestrował się na Twój webinar.
Dostawa webhookahttp
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" } }
}

Weryfikuj każde żądanie

Mets podpisuje treść sekretem Twojego adresu: X-Mets-Signature to sha256= i HMAC-SHA256 z sygnatury czasu, kropki i surowej treści. Porównuj w stałym czasie i odrzucaj sygnatury starsze niż pięć minut.

Weryfikacja webhooka (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))
  );
}
Weryfikacja webhooka (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"])

Dokumentacja

Wszystko, co potrzebne, nic ponad to

Dwanaście endpointów obejmuje spotkania, nagrania, transkrypcje, podsumowania, rejestracje na webinary i zdarzenia.

Adres bazowy: 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

Klucze z uprawnieniami

Authorization: Bearer mets_sk_…. Klucz ma tylko nadane uprawnienia, można go ograniczyć do organizacji, ustawić wygaśnięcie lub w każdej chwili unieważnić.

Rozsądne limity

120 żądań na minutę i do 20 na sekundę na klucz. Każda odpowiedź zawiera nagłówki X-RateLimit.

OpenAPI 3

Kompletny schemat do przetwarzania maszynowego i interaktywna konsola do wypróbowania żądań.

Otwórz interaktywną dokumentację

API w pakiecie Business

Publiczne API i webhooki są częścią pakietu Business, bez opłat za żądania. Potrzebujesz wyższych limitów lub indywidualnej umowy? Napisz do nas.

Wdróż pierwszą integrację już dziś

Załóż konto, wygeneruj klucz i wykonaj pierwsze żądanie w kilka minut.