Si leíste nuestra documentación y entendiste que una key met_test_ te daba un entorno aparte, la documentación tuvo la culpa. No lo da, y nunca lo dio. La API no cambió; lo que cambió hoy es lo que decimos de ella.
Lo que una key de prueba sí hace, y sigue haciendo igual:
- Los runs no debitan Energía y quedan marcados con
livemode: false. - Hay un tope diario de runs de prueba por workspace. Al alcanzarlo,
429 con test_run_daily_cap — un código que hasta hoy no estaba en ninguna guía y ahora vive en Límites y cuotas. - Los siete scopes con efecto externo responden
403 test_mode_restricted: enviar por WhatsApp, ejecutar integraciones, reportar conversiones, provisionar y recargar cuentas, tocar el medio de pago de un partner e instalar plantillas. Vale igual por REST y por el servidor MCP, donde esas herramientas ni siquiera aparecen en el catálogo.
Y lo que no hace, dicho sin rodeos:
- Corre contra la misma base y las mismas tablas que producción. No hay copia, ni espejo, ni reversión.
- Escribe de verdad. Lo que está bloqueado es el efecto externo, no la escritura: una key de prueba con
items:write o contacts:write crea registros que tu equipo ve en el panel, y nada los borra cuando la key vence. - No se puede recoger después. Solo los runs y los eventos llevan la marca
livemode; lo demás que escribas queda indistinguible de tu producción, así que no hay forma de pedir "bórrame lo de prueba".
Qué hacer en su lugar: emite la key de prueba con scopes de lectura únicamente (más runs:execute si vas a ejecutar Mets) — lo que no tiene scope de escritura no escribe. Si necesitas escribir, hazlo en un workspace aparte creado para desarrollo, que puedes borrar entero.
Eventos: revisa esto si escuchas con una key de prueba
El filtro por livemode no cruza los dos mundos, pero hoy casi nada se emite como evento de prueba: solo run.completed y run.failed de un run que disparaste con esa key, billing.threshold de la key misma, y el ping de una entrega de prueba. Todo lo demás del catálogo —contact.*, task.completed, conversation.handoff, channel.run.*, app.*, snapshot.*, conversion.*— se emite siempre en vivo, así que una key met_test_ no lo recibe nunca, ni por stream() ni desde el registro.
Si montaste un handler contra esos tipos y lo probaste con una key met_test_, lo que viste no fue un handler que funciona: fue un stream vacío. Pruébalo con una key met_live_.
La clave de demostración del portal sí está aislada
La que te damos en la portada sin pedirte registro es otra cosa, y es lo que buscabas: de solo lectura, con los permisos fijados por el servidor y no por la petición, contra un negocio ficticio cuyo Met solo tiene herramientas de consulta, con su propio tope de Energía y 24 horas de vida. Para mirar la forma real de las respuestas antes de escribir nada, empieza por ahí.