Listar reglas
Todas las reglas de la conexión, en el orden en que se evalúan.
Ejecuta la llamada real contra tu espacio de trabajo, con tu propia clave.
GET /rules
Todas las reglas de la conexión, en el orden en que se evalúan.
Cómo se ejecuta una regla
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"Una regla es una lista de condiciones sobre un mensaje entrante y una lista de acciones que aplicar a todo lo que coincida con ellas. Las reglas pertenecen a la CONEXIÓN, no a quien las escribió. Una clave del espacio de trabajo ve las mismas reglas que un compañero, y eliminar la cuenta del autor no se las lleva.
Una conexión admite 100 reglas, y cada una admite como mucho 20 condiciones y 10 acciones. Son protecciones contra scripts descontrolados, no límites de plan: la regla número 101 es rule_limit_reached, un 422, y la condición número 21 la rechaza el esquema antes de escribir nada.
match: "all" combina las condiciones con AND, match: "any" las combina con OR, y negate en una condición suelta es NOT. No hay árbol booleano anidado: (A and B) or C son dos reglas. Eso es una decisión, no un atajo. Un esquema recursivo no se puede describir en el documento de OpenAPI con $refStrategy: "none", no se puede entregar a un cliente MCP como JSON Schema, y es exactamente la forma que ya ha reventado antes el límite de instanciación de TypeScript en este repositorio. Dos reglas es también como lo lee una persona seis meses después.
Todas las reglas activadas de la conexión se evalúan contra cada mensaje entrante, en orden de position, de menor a mayor. La evaluación se detiene tras una regla coincidente que lleve stopProcessing: true, y no se considera nada por debajo de ella. Cuando dos reglas coincidentes nombran una carpeta, gana la ÚLTIMA y el mensaje acaba en su carpeta, que es la lectura que da una lista numerada y lo único sobre el orden que conviene decir en vez de dejar que se descubra.
Las reglas fallan en ABIERTO. Una condición que escribió un cliente antiguo, un valor que no compila como patrón, una base de datos que no responde: cada uno de esos casos se omite y el mensaje se entrega como se habría entregado, con el fallo anotado en la ejecución. Un motor de reglas que lanza una excepción es un mensaje que nunca llega; un motor de reglas que se omite es un mensaje en la carpeta equivocada.
Nada es retroactivo. Una regla decide qué pasa con el correo que llega después de que exista, y deliberadamente no hay ningún endpoint que la aplique a un buzón que ya tienes. Consulta POST /rules/{id}/test, que responde a la pregunta que la gente realmente hace cuando busca eso.
Ejemplo
Requiere rules:read. limit llega hasta 100, cursor es opaco (devuelve el nextCursor que se te dio) y enabled restringe a uno de los dos lados del interruptor.
curl "$OE/rules?limit=25&enabled=true" -H "$AUTH"{ "object": "list", "data": [ { "object": "rule", "id": "rul_7f3a1c94e05d3862c1f0a44b", "name": "Receipts to their own label", "description": null, "enabled": true, "position": 0, "match": "all", "conditions": [ { "field": "from_domain", "op": "matches", "value": "*.stripe.com", "negate": false }, { "field": "subject", "op": "contains", "value": "receipt", "negate": false } ], "actions": [ { "type": "label", "value": "USER_RECEIPTS" }, { "type": "archive" } ], "stopProcessing": true, "lastMatchedAt": "2026-08-29T11:04:12.000Z", "matchCount": 148, "createdAt": "2026-08-01T09:00:00.000Z", "updatedAt": "2026-08-20T16:31:00.000Z" } ], "hasMore": false, "nextCursor": null}enabled acepta los strings true y false en lugar de un boolean convertido, y no es quisquillosidad: Boolean("false") es true, así que una consulta con conversión habría respondido a «muéstrame mis reglas desactivadas» con las activadas y habría parecido que funcionaba.
El orden de la lista es el orden de evaluación, así que leerla de arriba abajo es leer lo que le ocurre a un mensaje. position no es único ni es un id (lo renumera POST /rules/reorder), así que identifica una regla por su id rul_ y nunca por el lugar que ocupa en este momento.
matchCount y lastMatchedAt se cuentan en la base de datos a medida que llega el correo, en lugar de leerse y reescribirse, así que dos mensajes que caen a la vez no pueden perder una cuenta entre ellos. Una regla que nunca se ha disparado muestra 0 y null, que es la respuesta sobre la que conviene actuar cuando alguien dice que una regla no funciona.