API Response Comparator

Runs in browser API Testing

Semantic comparison of two JSON responses with options to ignore volatile fields (timestamps, ids), order of arrays, or specific paths — produces a clear diff report.

Privacy: This tool runs entirely in your browser. Your input never leaves your device.
Loading tool…

How to use API Response Comparator

  1. Paste response A (e.g. staging) and response B (e.g. production).
  2. Keep "ignore volatile fields" on, add any extra ignore paths, and choose array-order handling.
  3. Compare. The summary tells you whether the responses are equivalent; the table lists each difference with its path.
  4. Use the line view for a visual diff and download the table as CSV.

API Response Comparator features

  • Semantic JSON comparison — key order and formatting never count as differences
  • Ignore volatile fields (ids, timestamps, etags, tokens, cursors) with one checkbox
  • Ignore paths with patterns: $.meta.requestId, $.items[*].updatedAt, **.etag or bare key names
  • Optional array-order insensitivity and null-equals-missing mode
  • Difference table (only in A / only in B / changed / type changed), ignored-field list and a line diff

API Response Comparator example

Staging vs production

Input:

A: { "status": "paid", "customer": { "id": "cust_9" }, "updatedAt": "2025-08-30T10:00:00Z" }
B: { "status": "PAID", "customer": { "id": "cust_9", "tier": "gold" }, "updatedAt": "2025-08-31T09:12:44Z" }

Output:

Different · Added in B 1 · Changed 1 · Ignored: $.updatedAt
$.status        changed    "paid" → "PAID"
$.customer.tier only in B  – → "gold"

Frequently asked questions about API Response Comparator

What does "ignore volatile fields" do?

It skips keys that normally differ between environments and requests — ids, timestamps (createdAt, updatedAt…), etags, request/trace ids, tokens, cursors — so the diff shows meaningful differences only.

How do ignore paths work?

One pattern per line: an exact JSON path ($.meta.requestId), array wildcards ($.items[*].updatedAt), deep wildcards (**.etag) or a bare key name to ignore it everywhere.

Does key order matter?

No — the comparison is semantic. Enable "Ignore array order" if your API returns lists in non-deterministic order.

Why is a type change highlighted separately?

A value that changed from number to string (or object to null) usually breaks clients, so it is counted as a type change rather than a simple value change.

Technical notes

Ignored fields are removed from both documents before the structural diff runs. Volatile-key detection uses a curated regular expression (id, uuid, createdAt, updated_at, etag, requestId, nonce, token, cursor…).