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.
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.
- 2026-09-1420/20 · 0.3.0
- 2026-09-1520/20 · 0.6.0
- 2026-09-2820/20 · 0.9.0-beta.1
The probes
| Probe | Expected | Result |
|---|---|---|
| Must agree | As expected | |
Request sent to both DELETE /v1/customers/cus_x, then GET itReal Stripe 200 · { id, object: customer, deleted: true }Worlds 200 · { id, object: customer, deleted: true } | ||
| Must agree | As expected | |
Request sent to both GET /v1/customers/cus_missingReal Stripe 404 · error.type invalid_request_error, code resource_missingWorlds 404 · error.type invalid_request_error, code resource_missing | ||
| Must agree | As expected | |
Request sent to both POST /v1/payment_intents/pi_x/confirm · pm_card_visaReal Stripe 200 · status succeeded, latest_charge setWorlds 200 · status succeeded, latest_charge set | ||
| Must agree | As expected | |
Request sent to both POST /v1/payment_intents/pi_x/confirm · declined cardReal Stripe 402 · card_declined, last_payment_error persistedWorlds 402 · card_declined, last_payment_error persisted | ||
| Must agree | As expected | |
Request sent to both POST /v1/refunds · amount above the chargeReal Stripe 400 · the exact over refund messageWorlds 400 · the exact over refund message | ||
| Must agree | As expected | |
Request sent to both POST /v1/refunds on a fully refunded chargeReal Stripe 400 · charge_already_refundedWorlds 400 · charge_already_refunded | ||
| Must agree | As expected | |
Request sent to both GET /v1/charges/ch_x after a refundReal Stripe 200 · refunds list carries the refundWorlds 200 · refunds list carries the refund | ||
| Must agree | As expected | |
Request sent to both POST /v1/refunds twice · same Idempotency-KeyReal Stripe Second response replays the firstWorlds Second response replays the first | ||
| Must agree | As expected | |
Request sent to both Same key, different bodyReal Stripe 400 · idempotency_errorWorlds 400 · idempotency_error | ||
| Must agree | As expected | |
Request sent to both Invalid body, then a valid one · same keyReal Stripe The failed validation does not reserve the keyWorlds The failed validation does not reserve the key | ||
| Must agree | As expected | |
Request sent to both POST /v1/refunds amount=0 · keyedReal Stripe 400 · amount validation, key not reservedWorlds 400 · amount validation, key not reserved | ||
| Must agree | As expected | |
Request sent to both GET /v1/customers?limit=2Real Stripe 200 · has_more true, starting_after worksWorlds 200 · has_more true, starting_after works | ||
| Must agree | As expected | |
Request sent to both Create, finalize, void an invoiceReal Stripe draft, then open, then voidWorlds draft, then open, then void | ||
| Must agree | As expected | |
Request sent to both Credit balance, then finalize an invoiceReal Stripe Balance applied to amount_dueWorlds Balance applied to amount_due | ||
| Documented gap | As expected | |
Request sent to both POST /v1/invoices/in_x/pay · auto chargeReal Stripe Accepts the parameterWorlds Documented gap: Worlds refuses with a 400 that names it | ||
| Documented gap | As expected | |
Request sent to both capture_method=manualReal Stripe Accepts the parameterWorlds Documented gap: refused with a named 400 | ||
| Documented gap | As expected | |
Request sent to both recurring.trial_period_days on a priceReal Stripe Accepts the parameterWorlds Documented gap: refused with a named 400 | ||
| Must agree | As expected | |
Request sent to both Balance transaction · unknown currencyReal Stripe 400 · invalid currency envelopeWorlds 400 · invalid currency envelope | ||
| Documented gap | As expected | |
Request sent to both Customer balance in a second currencyReal Stripe Accepts the parameterWorlds Documented gap: refused with a named 400 | ||
| Must agree | As expected | |
Request sent to both Credit in another currency, then invoiceReal Stripe Credit stays unappliedWorlds Credit stays unapplied | ||
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