Transforms

Change one field. Keep everything else real.

Transforms patch the body of a live response — upstream or mocked — with ordered rules. Real data, one thing different.

"I need this exact account, but with the subscription expired."

"And tomorrow I'll need it expired last week."

"And Ana needs the same thing, with the same fake email, or the screenshots won't match."

Before / after transform

Two-pane diff with changed lines highlighted — same as the in-app editor.

  • Set status = "expired"
  • Set expiresAt = now-7d
  • Seeded fake.email stays stable across reloads

A path language that matches how JSON actually looks.

status walks the whole tree. meta.version follows a dotted path and fans into arrays. tasks.*.priority hits every item. tasks[-1].id takes the last one. tasks[?status=='open'].priority filters first, then sets. Click a field path in the preview to fill the rule for you.

In-product visual

Dates that stay relative — and clocks you can freeze.

now, now+3d, now-1h, formatted as ISO or epoch. Set a scenario's clock to frozen and every now in it stops moving, so the state you share today is the state your teammate sees tomorrow.

In-product visual

Fake data that's the same fake data for everyone.

Seeded generators for uuid, name, email, address, phone, company. Same scenario, same field, same value — for every teammate, every run. Your screenshots match. Your snapshot tests stop flapping.

In-product visual

Empty states and stress cases without hand-writing payloads.

Clear an array for the empty state. Truncate to the first N. Repeat to length 500 and find out what your list virtualisation really does. Remove items matching a condition.

In-product visual

Everything stacks — nothing silently wins.

Unlike mocks, every matching transform runs: global first, then the active scenario's, then your session's. Later writes to the same field win, and the Traffic log detail shows exactly which transform ids ran and which rule indexes fired — including expression errors.

In-product visual

Custom scripts when the rules run out.Team

Define a transform({ body, req, ctx }) function and return the new body. You get the parsed body, the inbound request (method, path, query, body, path params), ctx.now from the frozen clock, and ctx.seed from the scenario. Scripts run isolated on a sandbox worker; if one throws, the body passes through unchanged and the error lands in the log trace instead of on your tester's screen.

In-product visual

Mock or transform?

The jobReach for
Replace the whole response (empty cart JSON, a 500 body)Mock
Change one nested field on live upstream dataTransform
Empty or pad a listTransform (clearArray, truncateArray, repeatToLength)
Force a 429 with a Retry-After headerMock (status + headers)
Same fake email for every teammate in a scenarioTransform + scenario seed

They compose: mock the status, transform the body.

One URL change. That's the whole integration.

Free plan, no card, two-minute setup.