Saltar al contenido

Desarrolladores

Construye sobre Mets

Una API REST y webhooks firmados para reuniones, grabaciones, transcripciones y resúmenes con IA. Tus datos se quedan en la UE.

Guía rápida

De cero a una reunión en tres pasos

Sin SDK. Solo HTTPS y JSON.

  1. 1

    Crea una clave de API

    Abre Ajustes, Desarrolladores, y crea una clave con solo los permisos necesarios. Se muestra una única vez.

  2. 2

    Llama a la API

    Envía la clave como token Bearer. Crea reuniones, lista grabaciones, obtén transcripciones y resúmenes.

  3. 3

    Escucha los eventos

    Añade un endpoint de webhook y reacciona cuando termine una reunión o esté lista una transcripción, o consulta el feed de eventos.

Crear una reuniónbash
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", … }
Listar grabacionesbash
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

Entérate al instante de lo que ocurre

Cada entrega es un POST HTTPS firmado. Las entregas fallidas se reintentan con espera exponencial, cinco intentos en total.

  • meeting.startedSe unió el primer participante y la reunión está en curso.
  • meeting.endedLa reunión ha terminado.
  • recording.readyUna grabación se ha procesado y puede descargarse.
  • transcript.readyLa transcripción está completa.
  • summary.readyEl resumen con IA está disponible.
  • registration.createdAlguien se registró en uno de tus seminarios web.
Una entrega 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" } }
}

Verifica cada solicitud

Mets firma el cuerpo con el secreto de tu endpoint: X-Mets-Signature es sha256= seguido del HMAC-SHA256 de la marca de tiempo, un punto y el cuerpo sin procesar. Compara en tiempo constante y rechaza marcas de tiempo de más de cinco minutos.

Verificar 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))
  );
}
Verificar 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"])

Referencia

Todo lo que necesitas, nada de más

Doce endpoints cubren reuniones, grabaciones, transcripciones, resúmenes, registros en seminarios web y eventos.

URL 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

Claves con permisos

Authorization: Bearer mets_sk_…. Las claves llevan solo los permisos concedidos, pueden limitarse a una organización, caducar o revocarse en cualquier momento.

Límites razonables

120 solicitudes por minuto y ráfagas de 20 por segundo por clave. Cada respuesta incluye cabeceras X-RateLimit.

OpenAPI 3

Un esquema completo legible por máquinas y una consola interactiva para probar solicitudes.

Abrir la referencia interactiva

API incluida en Business

La API pública y los webhooks vienen con el plan Business, sin coste por solicitud. ¿Necesitas límites más altos o un acuerdo a medida? Escríbenos.

Lanza hoy tu primera integración

Crea una cuenta, genera una clave y haz tu primera solicitud en minutos.