Closed beta · run Worlds on your machineBrowse worlds →

Fidelity record

Verified against real Stripe. Every probe, and its result.

Each probe sends the same requests to a Worlds world and to real Stripe test mode, then compares the responses. A deleted customer returns 200 with a stub. An over refund is refused with Stripe's exact wording. A replay under the same idempotency key returns the first response.

Run · 2026-09-28real Stripe (test mode)2026-09-28.json →

Last run

2026-09-28

Probes

20

As expected

20 of 20

All of them

Must agree

16

Documented gaps

4

This record ran on Worlds 0.9.0-beta.1, which predates the current beta candidate (0.9.0-beta.7). It is evidence for the version it names; refreshed candidate drift acceptance is still required. It does not establish Zendesk qualification.

Run history

One dot per committed drift run against real Stripe, newest on the right.

  1. 2026-09-1420/20 · 0.3.0
  2. 2026-09-1520/20 · 0.6.0
  3. 2026-09-2820/20 · 0.9.0-beta.1

The probes

ProbeExpectedResult
Must agreeAs expected

Request sent to both

DELETE /v1/customers/cus_x, then GET it

Real Stripe

200 · { id, object: customer, deleted: true }

Worlds

200 · { id, object: customer, deleted: true }
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

GET /v1/customers/cus_missing

Real Stripe

404 · error.type invalid_request_error, code resource_missing

Worlds

404 · error.type invalid_request_error, code resource_missing
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

POST /v1/payment_intents/pi_x/confirm · pm_card_visa

Real Stripe

200 · status succeeded, latest_charge set

Worlds

200 · status succeeded, latest_charge set
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

POST /v1/payment_intents/pi_x/confirm · declined card

Real Stripe

402 · card_declined, last_payment_error persisted

Worlds

402 · card_declined, last_payment_error persisted
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

POST /v1/refunds · amount above the charge

Real Stripe

400 · the exact over refund message

Worlds

400 · the exact over refund message
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

POST /v1/refunds on a fully refunded charge

Real Stripe

400 · charge_already_refunded

Worlds

400 · charge_already_refunded
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

GET /v1/charges/ch_x after a refund

Real Stripe

200 · refunds list carries the refund

Worlds

200 · refunds list carries the refund
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

POST /v1/refunds twice · same Idempotency-Key

Real Stripe

Second response replays the first

Worlds

Second response replays the first
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

Same key, different body

Real Stripe

400 · idempotency_error

Worlds

400 · idempotency_error
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

Invalid body, then a valid one · same key

Real Stripe

The failed validation does not reserve the key

Worlds

The failed validation does not reserve the key
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

POST /v1/refunds amount=0 · keyed

Real Stripe

400 · amount validation, key not reserved

Worlds

400 · amount validation, key not reserved
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

GET /v1/customers?limit=2

Real Stripe

200 · has_more true, starting_after works

Worlds

200 · has_more true, starting_after works
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

Create, finalize, void an invoice

Real Stripe

draft, then open, then void

Worlds

draft, then open, then void
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

Credit balance, then finalize an invoice

Real Stripe

Balance applied to amount_due

Worlds

Balance applied to amount_due
Illustrative shapes · result is from the record
Documented gapAs expected

Request sent to both

POST /v1/invoices/in_x/pay · auto charge

Real Stripe

Accepts the parameter

Worlds

Documented gap: Worlds refuses with a 400 that names it
Illustrative shapes · result is from the record
Documented gapAs expected

Request sent to both

capture_method=manual

Real Stripe

Accepts the parameter

Worlds

Documented gap: refused with a named 400
Illustrative shapes · result is from the record
Documented gapAs expected

Request sent to both

recurring.trial_period_days on a price

Real Stripe

Accepts the parameter

Worlds

Documented gap: refused with a named 400
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

Balance transaction · unknown currency

Real Stripe

400 · invalid currency envelope

Worlds

400 · invalid currency envelope
Illustrative shapes · result is from the record
Documented gapAs expected

Request sent to both

Customer balance in a second currency

Real Stripe

Accepts the parameter

Worlds

Documented gap: refused with a named 400
Illustrative shapes · result is from the record
Must agreeAs expected

Request sent to both

Credit in another currency, then invoice

Real Stripe

Credit stays unapplied

Worlds

Credit stays unapplied
Illustrative shapes · result is from the record

Run 2026-09-28T08:12:30.072Z against real Stripe (test mode), using Worlds 0.9.0-beta.1. Probes create only their own tagged objects in the test account and touch nothing else.

What this record does and does not prove

What a gap is

A gap is a difference we keep on purpose and document: a parameter real Stripe accepts that Worlds refuses with a 400 that names it, so an agent relying on it finds out immediately instead of being graded on a guess. The battery fails if a gap closes without the docs saying so, just as it fails when an agreement drifts. The scope page lists what Worlds implements and what it deliberately leaves out.

What it does not establish

Live checks compare implemented behavior and retain known gaps. Read the date, version and probe list when deciding what the record establishes. A passing battery is not complete Stripe API parity.

Zendesk

No live drift record for Zendesk yet. Local conformance is tested; live API qualification is pending. See known limitations