Aller au contenu

Développeurs

Construisez sur Mets

Une API REST et des webhooks signés pour les réunions, enregistrements, transcriptions et résumés IA. Vos données restent dans l’UE.

Démarrage rapide

De zéro à une réunion en trois étapes

Aucun SDK requis. Du HTTPS et du JSON.

  1. 1

    Créez une clé d’API

    Ouvrez Paramètres, Développeurs, et créez une clé avec uniquement les autorisations nécessaires. Elle n’est affichée qu’une fois.

  2. 2

    Appelez l’API

    Envoyez la clé comme jeton Bearer. Créez des réunions, listez les enregistrements, récupérez transcriptions et résumés.

  3. 3

    Écoutez les événements

    Ajoutez un point de terminaison webhook et réagissez quand une réunion se termine ou qu’une transcription est prête, ou interrogez le flux d’événements.

Créer une réunionbash
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", … }
Lister les enregistrementsbash
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

Sachez à l’instant où quelque chose se passe

Chaque livraison est un HTTPS POST signé. Les livraisons échouées sont retentées avec un délai exponentiel, cinq tentatives au total.

  • meeting.startedLe premier participant a rejoint, la réunion est en cours.
  • meeting.endedLa réunion est terminée.
  • recording.readyUn enregistrement a été traité et peut être téléchargé.
  • transcript.readyLa transcription est complète.
  • summary.readyLe résumé IA est disponible.
  • registration.createdQuelqu’un s’est inscrit à l’un de vos webinaires.
Une livraison de webhookhttp
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" } }
}

Vérifiez chaque requête

Mets signe le corps avec le secret de votre point de terminaison : X-Mets-Signature vaut sha256= suivi du HMAC-SHA256 de l’horodatage, d’un point et du corps brut. Comparez en temps constant et rejetez les horodatages de plus de cinq minutes.

Vérifier un 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))
  );
}
Vérifier un 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"])

Référence

Tout ce qu’il faut, rien de superflu

Douze points d’accès couvrent réunions, enregistrements, transcriptions, résumés, inscriptions aux webinaires et événements.

URL de base : 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

Clés d’API avec autorisations

Authorization: Bearer mets_sk_…. Une clé ne porte que les autorisations accordées, peut être limitée à une organisation, expirer ou être révoquée à tout moment.

Limites raisonnables

120 requêtes par minute et des pics de 20 par seconde par clé. Chaque réponse contient des en-têtes X-RateLimit.

OpenAPI 3

Un schéma complet lisible par machine et une console interactive pour essayer les requêtes.

Ouvrir la référence interactive

API incluse dans Business

L’API publique et les webhooks sont inclus dans l’offre Business, sans frais par requête. Besoin de limites plus élevées ou d’un contrat sur mesure ? Écrivez-nous.

Livrez votre première intégration dès aujourd’hui

Créez un compte, générez une clé et faites votre première requête en quelques minutes.