Docs
Dashboard
On this page

    Test sales

    1 endpoint. Each needs an API key or OAuth token with the scope shown; the key already names its store, so paths start at /v1/store. Generated from the live contract; also in openapi.json.

    Get started: run a full test order through checkout, webhook, fulfillment and ledger

    POST/v1/store/test-sale

    Or name the store: POST /v1/stores/{storeId}/test-sale

    orders:writesimulateTestSale

    Response OrderDetail

    • idOrderIdrequired
    • numberstringrequired
    • storeIdStoreIdrequired
    • customerCustomerRefrequired
    • itemsOrderItem[]required
    • feesFeeBreakdownrequired
    • providerGatewayProviderrequired
    • paymentMethodPaymentMethodrequired
    • coveredByFreeCover | nullrequired
    • statusOrderStatusrequired
    24 more fields
    • isTestbooleanrequired
    • createdAtTimestamprequired
    • paidAtTimestamp | nullrequired
    • refundedMinorMinorUnitsrequired
    • stepsFulfillmentStep[]required
    • refundsOrderRefund[]required
    • customFieldsobject[]required
      • idstringrequired
      • labelstringrequired
      • valuestringrequired
    • buyerNotestringrequired
    • clientobject | nullrequired
    • discountsobject[]required
      • codestringrequired
      • titlestringrequired
      • amountMinorMinorUnitsrequired
    • giftCardobject | nullrequired
    • storeCreditMinorMinorUnitsrequired
    • affiliateobject | nullrequired
    • paymentobjectrequired
      • providerPaymentIdstringrequired
      • providerUrlstringrequired
      • mode"test" | "live" | nullrequired
    • deliveredobjectrequired
      • keysOrderDeliveredKey[]required
      • downloadsobject[]required
        • productIdProductIdrequired
        • namestringrequired
        • downloadsintegerrequired
      • discordRolesobject[]required
        • roleNamestringrequired
        • statusstringrequired
      • giftCardsobject[]required
        • last4stringrequired
        • amountMinorMinorUnitsrequired
    • notesOrderNote[]required
    • manualobject | nullrequired
    • blockedobjectrequired
      • emailbooleanrequired
      • ipbooleanrequired
    • discordUserIdstringrequired
    • orderPageUrlstringrequired
    • fulfilledAtTimestamp | nullrequired
    • refundedAtTimestamp | nullrequired
    • attentionobject | nullrequired
    • claimsobject[]required
      • idstringrequired
      • kind"claim" | "chargeback"required
      • statusstringrequired
      • reasonstringrequired
      • openedAtTimestamprequired
      • closedAtTimestamp | nullrequired

    Example

    curl -X POST "https://api.shopfa.st/v1/store/test-sale" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/test-sale', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
      },
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "POST",
        "https://api.shopfa.st/v1/store/test-sale",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/test-sale", nil)
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Was this page helpful?