Sandbox test triggers
Magic test identities, VINs, amounts, and tokens that drive each sandbox capability across its full outcome range — deterministic, replayable, vendor-free.
Every sandbox capability answers with wire-compatible, simulated payloads —
deterministic and replayable, each stamped
provenance: { environment: "sandbox", simulated: true, provider: "<class>-sandbox" }
in the body itself. Connecting a real account is a configuration swap, not a
rewrite.
A capability is only genuinely green if it behaves accurately across the whole outcome range, not just the happy path. This page is the developer reference for exercising that range: feed a magic trigger — a test identity, a test VIN, a magic amount, or a lifecycle op — and get back a documented outcome.
The only entropy is a hash over your request — no randomness, no wall clock — so the same input returns the same answer forever. An exact magic trigger always wins over the hash-derived default, so a demo or a contract test can force any outcome. Anything that matches no trigger falls to a documented, plausible default. No real, paid, or metered data is ever touched.
The triggers span six domains and 120 documented scenarios. Provider labels name the counterparty class, never a brand.
| Domain | Counterparty classes | Scenarios |
|---|---|---|
| Commerce / payments | payment-rail · escrow-rail · deal-desk · trade-rail | 19 |
| Credit / F&I | credit-bureau · credit-rail · fni-rail | 21 |
| Insurance / connections | insurance-rail · connections-rail · kyc-rail | 16 |
| Services / legal / governance | service-authorization-rail · legal-authority-rail · adverse-status-rail · fraud-case-rail · mandate-rail | 26 |
| Title / registration / transport | title-registration-rail · transport-rail · field-services-rail | 22 |
| Vehicle history / valuation | history-source · valuation-book | 16 |
Commerce / payments
Payment rail — payment-rail-sandbox
Two channels select the outcome, and a test token wins over the amount.
Failing a token, the amount's minor-unit suffix (the last two digits of the
amount in cents) selects the outcome; .00 and any other suffix clear.
| Test token | Amount suffix | Outcome | status |
|---|---|---|---|
tok_ok / tok_success | ….00 | success | succeeded |
tok_declined | ….01 | declined | declined (declineCode: generic_decline) |
tok_insufficient_funds | ….02 | insufficient-funds | declined (declineCode: insufficient_funds) |
tok_requires_3ds | ….03 | requires-3ds | requires_action (nextAction.type: 3ds_redirect) |
tok_disputed | ….04 | disputed | disputed (dispute.reason: fraudulent, dueBy: +21d) |
Escrow rail — escrow-rail-sandbox
The op selects the lifecycle step; refusals gate deterministically.
| Call | Trigger | Outcome |
|---|---|---|
op: fund / hold | funded (available ≥ amount) | held (detail.deadline = +30d) |
op: fund / hold | fundingAvailableMinor < amountMinor or reference: "magic-underfund" | insufficient-funds |
op: release | valid proof | released (detail.proofRef minted) |
op: release | proofSignature: "magic-reject" | proof-rejected |
op: refund | any | refunded |
Deal desk — deal-desk-sandbox
The op selects the transition; the deal reference seeds documented refusals
via a magic prefix band (case-insensitive).
| Call | Trigger | Result state / disposition |
|---|---|---|
op: open | any | OPENED — spine |
op: desk | approved (default) | DESKED — spine |
op: desk | reference: "NOCREDIT…" | (unchanged) — refused credit-not-approved |
op: advance | any spine state | next spine state — spine |
op: advance → FUNDED | reference: "STIP…" | (unchanged) — refused stips-outstanding |
op: hold | any | ON_HOLD — hold |
op: unwind | approved (default) | UNWOUND — unwind |
op: unwind | reference: "NOAPPROVE…" | (unchanged) — refused unwind-not-approved |
op: close | any | CLOSED — close |
| any op | reference: "ERROR…" | (unchanged) — refused provider-error |
Trade-in rail — trade-rail-sandbox
The VIN seeds a deterministic ACV in $2,000–$35,000; the outcome follows from the title band and the asking price.
| Trigger | Outcome |
|---|---|
| clean VIN, no ask (default) | offer at ACV |
requestedAmountMinor > ACV × 1.1 | counter at ACV (echoes the request) |
VIN SALVAGE… | decline (salvage-title) |
VIN BRANDED… | decline (branded-title) |
conditionToken: "magic-salvage" | decline (salvage-title) |
Credit / F&I
Credit tiers — credit-bureau-sandbox
The trigger is the applicant's last name (case-insensitive, any first name,
any zip). FCRA consent evidence is required first — a missing/blank
consent.evidence refuses before anything touches a bureau.
| Last name | Tier | Score | Posted APR / term | Typical decision |
|---|---|---|---|---|
Deepsub | deep-subprime | 505 | 21.99% / 60 | decline |
Subprime | subprime | 585 | 15.99% / 60 | counter |
Nearprime | near-prime | 645 | 10.99% / 66 | approve-with-conditions |
Prime | prime | 725 | 6.99% / 72 | approve |
Superprime | super-prime | 815 | 4.49% / 72 | approve |
Frozen | — | — | — | frozen file |
Nohit | — | — | — | no-hit |
Error | — | — | — | provider-unavailable (BLOCKED) |
Default (non-magic name): score = 550 + hash(firstName|lastName|zip) in
[550, 899], tier classified from the score. Deterministic and replayable.
Decisions — credit-rail-sandbox
The trigger is the decision word. attested: true mirrors the signed-and-verified
webhook path.
| Trigger word | disposition | Payload highlights |
|---|---|---|
approve | approved | rate offers with monthly payments |
approve-with-conditions | conditioned | rate + conditions (proof of income / residence) |
counter | conditioned | counterOffer (smaller amount, higher rate, required down) |
decline | declined | attested: true |
pending | pending | referred to a human underwriter (expectedWithin: PT24H) |
error | — | BLOCKED (code: rail-error) |
F&I products — fni-rail-sandbox
The trigger is the lifecycle step. The vin must be a valid 17-char VIN; the
GAP-bearing steps require vehicleMSRP or they return the pinned missing-msrp
refusal.
| Step | State | Highlights |
|---|---|---|
rate | PACKAGED | rate card (VSC / GAP / PPM) + packageTotal |
present | PRESENTED | Good / Better / Best with monthlyDelta; persisted: false |
accept | CONTRACTED | selectedPackage, contractNumbers, priceTotal |
decline | DECLINED | declined: true — a first-class, truthful outcome |
Refusals: a malformed VIN → BLOCKED (invalid VIN — 17 characters, no I/O/Q);
a GAP step without vehicleMSRP → BLOCKED (financing gap insurance but missing vehicleMSRP).
Payoff quote bands — credit-rail-sandbox
The trigger is a magic account-number prefix, plus a payoff-capable fsId.
The reference market value is echoed so equity is explicit — an underwater
loan reports negative equity, never hidden.
accountNumber prefix | Band | Highlights |
|---|---|---|
POS-… | positive-equity | payoff $12,400 · value $21,000 · equity +$8,600 |
NEG-… | negative-equity | payoff $27,900 · value $21,000 · equity −$6,900 |
ERR-… | payoff-error | BLOCKED (code: rail-error) |
unknown fsId | — | BLOCKED (code: unsupported-lender) |
missing accountNumber | — | BLOCKED (code: not-found) |
Payoff-capable fsId triggers: F00SET, F000WL, F3TC22. Default
(capable lender, non-magic account): deterministic payoff classified against the
$21,000 reference value.
Insurance / connections / KYC
Bindable quote — insurance-rail-sandbox
The trigger is a reserved test VIN (valid 17-char VIN, no I/O/Q).
| Test VIN | Scenario |
|---|---|
B1NDABLE000000001 | bindable — base premium, full coverage grid |
H1GHR1SK000000001 | high-risk-surcharge — premium ×1.6 |
DECL1NE0000000001 | decline — bindable: false, reason: ineligible-risk |
LAPSED00000000001 | lapsed — premium ×1.35, priorCoverageLapse: true |
SR22NEED000000001 | sr22-required — premium ×1.25, sr22.required: true |
| any other valid VIN | default — hash band: decline / high-risk / bindable |
Proof of insurance — insurance-rail-sandbox
The trigger is a reserved policy number (primary) or reserved VIN (fallback).
| Policy number | VIN fallback | Scenario |
|---|---|---|
POL-VERIFIED | P01VER1F1ED000001 | verified (account-verified) |
POL-UNVERIFIED | P01UNVER1F1ED0001 | unverified (no-policy-on-file) |
POL-EXPIRED | P01EXP1RED0000001 | expired (coverage-lapsed) |
| anything else | — | default — unverified |
Connections credential link — connections-rail-sandbox
The trigger is the ceremony username, matched on substring (so
acme_user_good resolves too).
| Username contains | Scenario |
|---|---|
good (default) | good → linked / active, next sync ok |
mfa | mfa-required — supply a non-empty mfaCode to resolve to linked |
reconnect / degrade / expired | reconnect-required — next sync returns a NEEDS_HUMAN re-link handoff |
locked / error / bad | credential-error — ceremony failed, next sync blocked |
KYC identity screen — kyc-rail-sandbox
The trigger is a reserved last name (primary) or reserved test SSN
(secondary). The OFAC output is a synthetic OFAC-SDN-SANDBOX match, never a
real listed party.
| Last name | Test SSN | Decision |
|---|---|---|
PASS | 111-11-1111 | pass — riskScore 0–19 |
REVIEW | 222-22-2222 | review — address-mismatch / possible-pep, riskScore 45–69 |
FAIL | 000-00-0000 | fail — identity-not-verified, riskScore 80–94 |
SANCTIONED / OFAC | 333-33-3333 | ofac-hit — synthetic SDN match, riskScore 100 |
| anything else | — | default — hash band: review / pass |
Services / legal / governance
Triggers match an uppercase substring token in the key, so you can embed a
token in your own value (e.g. a …WARRANTY… VIN).
Repair authorization — service-authorization-rail-sandbox
| Trigger (VIN, or amount) | Outcome |
|---|---|
VIN …WARRANTY… (or warrantyContractId set) | warranty-covered (customerOwed: 0) |
estimateCents >= 1_000_000 ($10,000) | declined (over-authorization-cap) |
VIN …DECLINE… | declined (not-authorized) |
VIN …APPROVE… | approved |
| any other VIN (default) | estimate (pending) |
Legal authority — legal-authority-rail-sandbox
authorityType ∈ probate | guardianship | power-of-attorney. The magic key is
documentId.
documentId contains | Outcome |
|---|---|
EXPIRED | invalid (expired) |
REVOKED | invalid (revoked) |
FORGED / INVALID | invalid (not-authenticated) |
PENDING | pending |
VALID or any other id (default) | valid — grantsScope by type |
Adverse status — adverse-status-rail-sandbox
The magic VIN maps to an adverse title/lien state; saleBlocked gates retail
flow.
| VIN contains | Status | saleBlocked |
|---|---|---|
REPO | repossession | true |
STOLEN | stolen | true |
SALVAGE | salvage | false |
TOTAL | total-loss | false |
LEMON | lemon-buyback | false |
| any other VIN (default) | clear | false |
Fraud case — fraud-case-rail-sandbox
subjectType ∈ vin | identity | deal. holdApplied tells the caller to hold
funds/title.
subjectId contains | Status | holdApplied |
|---|---|---|
FRAUDOPEN | open | true |
FRAUDCONFIRM | confirmed | true |
FRAUDCLEAR | cleared | false |
| any other subject (default) | none | false |
Mandate (governance) — mandate-rail-sandbox
The magic key is the pair principalId|agentId; the cap is a magic amount
($5,000). grantedScopes derive from the action.
| Trigger (pair, + amount) | Outcome |
|---|---|
…REVOKED… | revoked (no scopes) |
…CAPPED… and amount > $5,000 | denied-over-cap |
…CAPPED… and amount ≤ $5,000 | capped (remaining = cap − amount) |
…GRANTED… or any other pair (default) | granted (full authority) |
Title / registration / transport / inspection
Title, registration, and inspection key on a test VIN
(1FTSW21P75E + a 6-char scenario serial). Transport keys on a test order
token (SBX-TR-…).
Title — title-registration-rail-sandbox
| Test VIN | titleStatus | Order lands |
|---|---|---|
1FTSW21P75ECLEAR0 | clear | Complete (e-title) |
1FTSW21P75ELIEN00 | lien-present | Active |
1FTSW21P75EBONDED | bonded | Active |
1FTSW21P75EDUP000 | duplicate | Active |
1FTSW21P75EELT000 | elt | Active |
1FTSW21P75EWASHED | title-washing-flag | Hold |
1FTSW21P75ESALVGE | salvage-brand | Active |
1FTSW21P75EREJECT | rejected | Error |
Default (non-magic VIN): weighted band clear 70% / lien-present 18% / salvage-brand 8% / rejected 4%.
Registration — title-registration-rail-sandbox
| Test VIN | registrationStatus |
|---|---|
1FTSW21P75EREGACT | active (expiresOn = asOf + 335d) |
1FTSW21P75EREGEXP | expired (expiresOn = asOf − 35d) |
1FTSW21P75EREGSUS | suspended (insurance-lapse) |
Transport — transport-rail-sandbox
| Test order token | Scenario | status |
|---|---|---|
SBX-TR-QUOTE | quote | Quoted |
SBX-TR-BOOKED | booked | Active |
SBX-TR-PICKUP | picked-up | EnRoute |
SBX-TR-TRANSIT | in-transit | EnRoute |
SBX-TR-DELIVERED | delivered | Complete |
SBX-TR-DAMAGED | damaged-in-transit | Hold |
SBX-TR-DELAYED | delayed | EnRoute |
SBX-TR-NOCARRIER | no-carrier | Error |
Default (non-magic token): weighted band booked 88% / no-carrier 12%.
Inspection — field-services-rail-sandbox
| Test VIN | grade | score |
|---|---|---|
1FTSW21P75EGRDPAS | pass | 96 |
1FTSW21P75EGRDCND | conditional | 74 |
1FTSW21P75EGRDFAL | fail | 38 |
Default (non-magic VIN): weighted band pass 65% / conditional 25% / fail 10%.
Vehicle history / valuation
A test VIN is a 17-character uppercase token followed by zero-padding, matched
either exactly or as a substring (so 5YJSALVAGE1234567 still resolves to
the salvage scenario).
History source — history-source-sandbox
| Test VIN | Outcome |
|---|---|
CLEAN000000000000 | clean title, 1 owner |
WRECK000000000000 | clean title, 2 accidents |
BRAND000000000000 | branded title, previously Canadian |
SALVAGE0000000000 | salvage / total-loss / frame-damage |
REBUILT0000000000 | rebuilt |
FLOOD000000000000 | flood damage + rebuilt |
LEMON000000000000 | lemon buyback |
THEFT000000000000 | theft recovery |
ROLLBACK00000000 | odometer rollback (rollbackSuspected: true) |
RECALL0000000000 | clean + one open recall |
TOTALED000000000 | total loss |
NORECORD00000000 | BLOCKED — no-record |
| any other VIN | default — clean, 1 owner |
Valuation book — valuation-book-sandbox
Returns all five channels (retail, private, trade, auction, wholesale),
each a { low, average, high } band.
| Test VIN | Retail avg | Confidence |
|---|---|---|
HIGHLINE0000000000 | $58,000 | high |
AVGBOOK0000000000 | $24,000 | medium |
BEATER0000000000 | $4,500 | low |
NOBOOK0000000000 | — | BLOCKED — no-book-value |
| any other VIN | $18,000 | medium |
Provenance invariant
Every resolver return — magic or default — satisfies the same three facts, so a green sandbox cap is green across its whole outcome range:
answer.provenance.simulated === true
answer.provenance.environment === 'sandbox'
answer.provenance.provider.endsWith('-sandbox') // the class, never a brandA live counterparty adapter later implements the same shapes behind the same
seam and only flips simulated to false — every field is preserved. See
the chassis for how a capability is authenticated, priced, proven,
and called.