Przejdź do dokumentacji
API

Wypisz reguły

Każda reguła na połączeniu, w kolejności, w jakiej są sprawdzane.

GETapi.openemail.uk/rules

Uruchamia prawdziwe wywołanie na twojej przestrzeni roboczej, twoim własnym kluczem.

GET /rules

Każda reguła na połączeniu, w kolejności, w jakiej są sprawdzane.

Jak działa reguła

shell
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"

Reguła to lista warunków wobec przychodzącej wiadomości i lista akcji do wykonania na wszystkim, co do nich pasuje. Reguły należą do POŁĄCZENIA, a nie do tego, kto je napisał. Klucz przestrzeni roboczej widzi te same reguły co kolega z zespołu, a usunięcie konta autora ich nie zabiera.

Połączenie mieści 100 reguł, a każda z nich najwyżej 20 warunków i 10 akcji. To zabezpieczenia przed rozbieganym skryptem, a nie limity planu: sto pierwsza reguła to rule_limit_reached, 422, a dwudziesty pierwszy warunek odrzuca schemat, zanim cokolwiek zostanie zapisane.

match: "all" łączy warunki spójnikiem AND, match: "any" — OR, a negate na pojedynczym warunku to NOT. Nie ma zagnieżdżonego drzewa logicznego: (A and B) or C to dwie reguły. To decyzja, a nie pójście na skróty. Rekurencyjnego schematu nie da się opisać w dokumencie OpenAPI przy $refStrategy: "none", nie da się podać klientowi MCP jako JSON Schema i jest to dokładnie ten kształt, który już wcześniej wysadził w tym repozytorium limit instancjonowania TypeScriptu. Dwie reguły to też sposób, w jaki człowiek odczyta to pół roku później.

Każda włączona reguła na połączeniu jest sprawdzana wobec każdej przychodzącej wiadomości, w kolejności position, od najmniejszej. Sprawdzanie kończy się po pasującej regule z stopProcessing: true i nic poniżej niej nie jest brane pod uwagę. Gdy dwie pasujące reguły wskazują folder, wygrywa PÓŹNIEJSZA i wiadomość ląduje w jej folderze, co jest odczytem, jaki daje numerowana lista, i jedyną rzeczą o kolejności wartą powiedzenia wprost, zamiast zostawienia jej do odkrycia.

Reguły zawodzą OTWARCIE. Warunek napisany przez starszego klienta, wartość, która nie skompiluje się do wzorca, baza, która nie odpowiada: każde z nich jest pomijane, a wiadomość zostaje doręczona tak, jak zostałaby doręczona, z awarią zapisaną przy uruchomieniu. Silnik reguł, który rzuca wyjątkiem, to wiadomość, która nigdy nie dociera; silnik reguł, który zostaje pominięty, to jedna wiadomość w złym folderze.

Nic nie działa wstecz. Reguła decyduje o poczcie przychodzącej po tym, jak powstała, i celowo nie ma endpointu, który zastosowałby ją do skrzynki, którą już masz. Zobacz POST /rules/{id}/test, który odpowiada na pytanie, o które ludziom naprawdę chodzi, gdy po tamto sięgają.

Przykład

Wymaga rules:read. limit sięga 100, cursor jest nieprzejrzysty (odeślij nextCursor, który dostałeś), a enabled zawęża do jednej strony przełącznika.

curl
curl "$OE/rules?limit=25&enabled=true" -H "$AUTH"
Odpowiedź
{  "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 przyjmuje stringi true i false, a nie skoercowany boolean, i to nie jest czepialstwo: Boolean("false") to true, więc skoercowane zapytanie odpowiedziałoby na „pokaż moje wyłączone reguły” tymi włączonymi i wyglądałoby na działające.

Kolejność listy to kolejność sprawdzania, więc czytanie jej z góry na dół to czytanie tego, co dzieje się z wiadomością. position nie jest unikalne i nie jest identyfikatorem (przenumerowuje je POST /rules/reorder), więc trzymaj się reguły po jej identyfikatorze rul_, a nigdy po tym, gdzie akurat stoi.

matchCount i lastMatchedAt są zliczane w bazie w miarę napływu poczty, a nie odczytywane i przepisywane, więc dwie wiadomości, które wpadną naraz, nie zgubią między sobą zliczenia. Reguła, która nigdy nie odpaliła, pokazuje 0 i null, i to jest odpowiedź warta działania, gdy ktoś mówi, że reguła nie działa.