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
Crea una clave de API
Abre Ajustes, Desarrolladores, y crea una clave con solo los permisos necesarios. Se muestra una única vez.
- 2
Llama a la API
Envía la clave como token Bearer. Crea reuniones, lista grabaciones, obtén transcripciones y resúmenes.
- 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.
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://…" } ] }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.
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.
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"])Referencia
Todo lo que necesitas, nada de más
Doce endpoints cubren reuniones, grabaciones, transcripciones, resúmenes, registros en seminarios web y eventos.
- 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.
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.