# JSON Logic playground

Updated 2026-10-22. Free tool, no account: https://notifly.io/tools/json-logic-playground

Paste a JSON Logic rule and the data it should read, and see what it evaluates to, every variable it looked up with the value it found, and whether a Notifly workflow step with that condition would run or be skipped. The playground runs in your browser with the same operators Notifly's step conditions use.

On top of standard JSON Logic, Notifly's engine compares numbers that arrive as strings ("4" > 3 is true), compares dates, and adds the operators the condition editor writes: contains, startsWith and endsWith, between, in and notIn, empty checks and relative dates such as moreThanXAgo and withinLast.

## How to use it

1. **Write the rule.** Paste a JSON Logic rule, or the `skip` value of a step from the workflows API.
2. **Add the data.** Give the payload, subscriber and context the step would see, as JSON.
3. **Read the result.** A truthy result runs the step; anything else skips it. The variables list shows what each var resolved to.

## Where Notifly uses this

- [Step conditions: fields, operators and JSON Logic](https://notifly.io/docs/step-conditions)
- [Workflows: where conditions sit in a workflow](https://notifly.io/docs/workflows)

## Use it from code, no key

`POST https://notifly.io/api/tools/evaluate-json-logic` answers JSON, or Markdown with `Accept: text/markdown`. OpenAPI: https://notifly.io/api/tools/openapi.json.

```bash
curl -s https://notifly.io/api/tools/evaluate-json-logic \
  -H "Content-Type: application/json" \
  -d '{"rule":{"==":[{"var":"payload.tier"},"pro"]},"data":{"payload":{"tier":"pro"}}}'
```

## Frequently asked questions

### What is JSON Logic?

A way to write rules as JSON: each rule is an object whose one key is the operator and whose value is the list of arguments, such as {"==": [{"var": "payload.tier"}, "pro"]}. Rules nest, so and, or and if build larger conditions. Notifly stores step conditions in this form.

### When does Notifly skip a step?

When its condition evaluates to anything falsy: false, null, 0 or an empty string. A step with no condition always runs, and a skipped step does not stop the steps after it.

### Why is "10" > "9" true here?

Notifly's comparison operators turn values that look like numbers into numbers before comparing, and parse dates, because payload values often arrive as strings. Standard JSON Logic would compare the two strings and answer false.

### Can I use the operators the condition editor offers?

Yes: contains, doesNotContain, startsWith, endsWith, between, notBetween, notIn, isEmpty, isNonEmpty, null, notNull, containsAny, moreThanXAgo, lessThanXAgo, withinLast, notWithinLast and exactlyXAgo all work here exactly as in a workflow.
