rye-test-store.myshopify.com. Use Stripe test cards for payment.
rye-protocol.myshopify.com is also available for production test orders. It uses a live payment gateway — payments are not captured and funds are automatically returned to the card after ~1 week.Shipping & Delivery
Standard Product (Baseline)
Standard Product (Baseline)
Use as a baseline for comparison against edge-case products.
3PL Product (Carrier-Calculated Shipping)
3PL Product (Carrier-Calculated Shipping)
A product fulfilled via third-party logistics (3PL). Shipping rates are calculated dynamically by the carrier based on the buyer’s shipping address, rather than being flat rates set by the merchant.Expected behavior:
- Shipping rates vary based on the buyer’s address
- Applying a discount code may cause the available shipping options to change (e.g., if the discounted total drops below a free shipping threshold)
Digital Product
Digital Product
A digital product (e.g., an ebook or software license) that does not require physical shipping.
Expected behavior:
| Field | Value |
|---|---|
| Price | $9.99 |
- A free shipping method is returned on the checkout intent
- Shipping cost is $0
Heavyweight / Oversized Product
Heavyweight / Oversized Product
A product with a very high weight (100 lbs). Tests weight-based shipping rate calculations.
Expected behavior:
| Field | Value |
|---|---|
| Price | $199.99 |
- Shipping rates significantly higher than standard products
Delayed Shipping Product
Delayed Shipping Product
Use with the shipment advance test helper to simulate a delayed shipment.Expected behavior:
- The shipment advance helper follows
ordered -> shipped -> out_for_delivery -> delayed -> delivered
Canceled Shipping Product
Canceled Shipping Product
Use with the shipment advance test helper to simulate a canceled shipment.Expected behavior:
- The shipment advance helper follows
ordered -> canceled
Inventory & Availability
Sold Out Product
Sold Out Product
A product with 0 inventory that cannot be purchased.Expected behavior:
- Checkout intent fails with
product_out_of_stock
Partially Out-of-Stock Variants
Partially Out-of-Stock Variants
A product where some variants are in stock and others are sold out.
Expected behavior:
| Field | Value |
|---|---|
| Price | $40.00 |
| Variants | Size: S (in stock), M (in stock), L (sold out), XL (sold out) |
- Selecting an in-stock variant (S or M) succeeds
- Selecting a sold-out variant (L or XL) fails with
product_out_of_stock
Unpublished / Draft Product
Unpublished / Draft Product
A product that is not published to any sales channel (draft or hidden).
Expected behavior:
| Field | Value |
|---|---|
| Price | $25.00 |
- Product URL returns 404
- Checkout intent fails with
offer_retrieval_failed
Variants & Options
Different Variant Prices
Different Variant Prices
A product where each variant has a different price point.Expected behavior:
- Offer returns the correct price for the selected variant
- Switching variants updates the price, shipping, and tax accordingly
Many Variants (25+)
Many Variants (25+)
A product with many variant combinations (5 colors x 5 sizes = 25 variants) with different prices per variant.
Expected behavior:
| Field | Value |
|---|---|
| Price | $35.00 to $55.00 (varies by variant) |
- All 25 variants available for selection
- Offer reflects the correct price for the selected variant
Pricing & Tax
High-Value Product ($9,999.99)
High-Value Product ($9,999.99)
A product at a very high price point.
Expected behavior:
| Field | Value |
|---|---|
| Price | $9,999.99 |
- Offer returns
cost.subtotal.amountSubunits=999999 - Checkout completes successfully
Sale / Compare-at Price
Sale / Compare-at Price
A product with a compare-at (original) price showing a discount on the storefront.
Expected behavior:
| Field | Value |
|---|---|
| Price | $19.99 (compare-at $39.99) |
- Offer returns the selling price ($19.99), not the compare-at price
Tax-Exempt Product
Tax-Exempt Product
A product that is not subject to sales tax.
Expected behavior:
| Field | Value |
|---|---|
| Price | $25.00 |
cost.tax.amountSubunits=0- Total = subtotal + shipping (no tax component)
Gift Card
Gift Card
A gift card product with no shipping required and no tax applied.
Expected behavior:
| Field | Value |
|---|---|
| Denominations | $25, $50, $100 |
- A free shipping method is returned
- No tax applied
- Fulfillment is digital (email delivery)
Product Data Edge Cases
No Images
No Images
A product with no product images uploaded.
Expected behavior:
| Field | Value |
|---|---|
| Price | $10.00 |
- Offer returns empty images array
- Checkout completes without errors
Long Title & Special Characters
Long Title & Special Characters
A product with a 255-character title containing unicode, accented characters, and special symbols.
Expected behavior:
| Field | Value |
|---|---|
| Price | $15.00 |
- Product title returned without truncation or encoding issues
- Checkout completes without errors
Discounts & Promo Codes
Manual Discount Code
Manual Discount Code
A product with a discount code that can be passed via the
Expected behavior:
promoCodes field.| Field | Value |
|---|---|
| Price | $50.00 |
| Discount Code | TESTDISCOUNT (20% off) |
- Pass
promoCodes: ["TESTDISCOUNT"]when creating the checkout intent - Offer
cost.discount.amountSubunitsreflects 20% off - Only one discount code per order
Discount That Crosses Free Shipping Threshold
Discount That Crosses Free Shipping Threshold
A product priced just above the free shipping threshold, with a discount code that drops the subtotal below it.
Expected behavior:
| Field | Value |
|---|---|
| Price | $52.00 |
| Discount Code | SAVE10 |
- Without discount: free shipping applies
- With
SAVE10: subtotal drops to $42, free shipping no longer available, shipping cost increases
Commissions
Commissions are configured at the store level, not per product. Any product on the test stores earns a commission when the order completes:| Store | Commission Rate |
|---|---|
rye-test-store.myshopify.com | 15% of subtotal |
rye-protocol.myshopify.com | 25% of subtotal |
Commission Test Order
Commission Test Order
Use any product on either store. For a cheap end-to-end test:
Expected behavior:
| Field | Value |
|---|---|
| Price | $2.25 |
| Commission | 25% of subtotal |
- When the intent reaches
awaiting_confirmation, the offer includes a projectedcommissionfield with the amount you would earn ({ amount, estimate: true }) - After the order completes, the commission is recorded and returned by
GET /api/v1/commissions?checkoutIntentId=<id>
Commissions must be enabled on your developer account. If
offer.commission is missing on these stores, or no commission appears after checkout, reach out to us to enable it.Checkout Failures
Always Fails During Checkout
Always Fails During Checkout
A product that always fails during checkout submission at the merchant. Useful for exercising post-payment failure handling.Expected behavior:
- Offer retrieval and checkout intent creation succeed
- Checkout intent fails with reason
order_placement_failed
Simulating Payment Failures
No special product needed — use Stripe’s test card numbers to simulate different payment outcomes with any product above.Card Decline Scenarios
| Card Number | Behavior | Failure Reason |
|---|---|---|
4242 4242 4242 4242 | Payment succeeds | — |
4000 0000 0000 0002 | Generic decline | payment_failed |
4000 0000 0000 9995 | Insufficient funds | payment_failed |
4000 0000 0000 9987 | Lost card | payment_failed |
4000 0000 0000 0069 | Expired card | payment_failed |
4000 0000 0000 0127 | Incorrect CVC | payment_failed |
3D Secure / Authentication Challenges
| Card Number | Behavior |
|---|---|
4000 0027 6000 3184 | Requires 3D Secure authentication |
Malformed Input & Validation Errors
Rye returns synchronous 400 errors for invalid buyer data. No special product needed — just send bad inputs.Address Validation
| Input | Example | Expected |
|---|---|---|
| Invalid state/province | province: "XX" | 400 error |
| Invalid postal code | postalCode: "ZZZZZ" | 400 error |
| Wrong ZIP for state | postalCode: "90210" with province: "NY" | 400 error |
| Invalid country code | country: "ZZ" | 400 error |
| Missing required field | Omit address1 or city | 400 error |
| Emojis in address | address1: "123 Main St 🏠" | 400 error |
Buyer Identity Validation
| Input | Example | Expected |
|---|---|---|
| Invalid email | email: "not-an-email" | 400 error |
| Missing email | Omit email field | 400 error |
| Invalid phone | phone: "abc" | 400 error |
Failure Reason Reference
When a checkout intent fails, the response includes afailureReason with a code and message. Here are the most common failure codes you may encounter during testing:
| Failure Code | Meaning |
|---|---|
product_out_of_stock | Product or selected variant has no available inventory |
offer_retrieval_failed | Could not fetch pricing/shipping from merchant (product not found, unsupported, store issue) |
payment_failed | Payment was declined or could not be processed |
missing_shipping_method | No valid shipping method available for the buyer’s address |
checkout_intent_expired | Intent was not confirmed within 45 minutes of creation |
order_placement_failed | Payment succeeded but order could not be placed at the merchant |
variant_selections_invalid | The variant selections provided don’t match the product’s available options |
variant_selections_required | Product has variants but no variantSelections were provided |
constraint_total_price_exceeded | Order total exceeded the maxTotalPrice constraint |
constraint_shipping_cost_exceeded | Shipping cost exceeded the maxShippingPrice constraint |
form_validation_error | Buyer information was rejected by the merchant’s checkout form |
unsupported_store_no_guest_checkout | Merchant requires customer login — guest checkout is not available |

