Tick each item as it lands. Progress is saved in this browser. None of these need to ship in the same week — but the earliest test cycle cannot begin until items marked From vendor arrive.
https://sandbox-cryptosaas.mrcr.io/v1.6. Confirm exact version with vendor; version bump invalidates request shapes.Sdk-Partner-Token header on every request. Stable, doesn't expire.4444 4444 4444 3333 (success) and 5555 4444 3333 1111 with CVV variants for fail-path testing. Validate one round-trip before scenario runs begin.forClientId on the share-token generation call.What needs to be exercised on each payment-method × scenario combination. Click a cell to jump to the related scenario card below.
| Card | IBAN-invoice | IBAN-exchange | |
|---|---|---|---|
| On-ramp · happy path | ▸ S1 |
▸ S2 |
▸ S3 |
| On-ramp · rate moved ≥1% | ▸ S4 |
n/a |
n/a |
| On-ramp · quote expired | ▸ S5 — covers all methods |
||
| Off-ramp · happy path | ▸ S6 |
n/a |
▸ S7 |
| Off-ramp · rate moved >5% | ▸ S8 — vendor returns crypto |
||
| Off-ramp · address-signature mismatch | ▸ S9 — refuse-to-send · security |
||
| Identity reuse (no re-KYC) | ▸ S10 — covers all methods |
||
| Auth · bearer refresh | ▸ S11 — server-side |
||
| Country gate · unsupported | ▸ S12 — covers all methods |
||
| Compliance gate · withdrawal freeze | ▸ S13 — off-ramp only |
||
| Webhook · forged signature | ▸ S14 — security |
||
| Webhook · duplicate eventId | ▸ S15 — idempotency |
||
Each scenario is independent; all are run on a fresh customer where indicated. Setup describes preconditions; Execute is the action under test; Expect is the externally-visible outcome; Verify is what to inspect to confirm internal correctness.
4444 4444 4444 3333 handycompleted state, matched by merchant_transaction_id403004created; no completed transitiontrx_token to the vendorcreated → processing → completedrefunded (or similar terminal-cancelled state)complete for the customer's feature set after first interactionX-SignatureeventIdBased on past PSP integrations on this platform, these are the surfaces most likely to fail unexpectedly on the vendor side. Each one is worth a dedicated probe before the build cycle begins.
processing for > 24h with no further events.403004 with the actual rate movement so we can build empirical evidence over time.failed_attempt state.Vendor-side error codes that QA should recognise. Anything not in this table is novel and worth a vendor-side ticket.
| Code | Meaning | Customer-facing | Triggering scenario |
|---|---|---|---|
| 400001 | Request validation error | "Please check the entered amount." | Most often: amount below minimum or non-supported pair |
| 400011 | Invalid identity share token | "We couldn't validate your identity. Please try again." | Stale share-token or token issued for a different vendor |
| 400015 | Applicant not approved (identity side) | "Your identity verification is not complete on our side." | Share-token from an unapproved applicant |
| 400064 | User not found | (should not be customer-facing — internal error) | Bearer token for a deleted vendor-side user |
| 401000 | Auth failed | (internal — bearer refresh or partner-token rotation) | Wrong partner token or expired bearer that didn't refresh |
| 403003 | Rate limit | "Too many requests. Please wait a moment." | Quote calls in a tight loop, e.g. live re-quote bug |
| 403004 | Rate slippage exceeded threshold | "The price has changed. Please try again at the new rate." | ≥1% buy or >5% sell between quote and commit |
| 403007 | Active transaction conflict | "You have an active transaction. Please complete or cancel it first." | Customer attempts a second buy or sell with one already in flight |
| 403020 | IP blocked | "Service not available from your network." | Customer on a vendor-blocked IP (e.g. VPN region mismatch) |
| 403022 | KYC already complete | (internal — share-token re-import attempt) | Customer's vendor-side identity already imported |
| 403023 | Applicant already exists | (internal — share-token re-import for known customer) | Race condition on first share-token import |
These belong to the vendor or to existing platform pipelines. Time spent on them does not improve coverage for this integration.