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-saleOr name the store: POST /v1/stores/{storeId}/test-sale
Response OrderDetail
idOrderIdrequirednumberstringrequiredstoreIdStoreIdrequiredcustomerCustomerRefrequireditemsOrderItem[]requiredfeesFeeBreakdownrequiredproviderGatewayProviderrequiredpaymentMethodPaymentMethodrequiredcoveredByFreeCover | nullrequiredstatusOrderStatusrequired
24 more fields
isTestbooleanrequiredcreatedAtTimestamprequiredpaidAtTimestamp | nullrequiredrefundedMinorMinorUnitsrequiredstepsFulfillmentStep[]requiredrefundsOrderRefund[]requiredcustomFieldsobject[]requiredidstringrequiredlabelstringrequiredvaluestringrequired
buyerNotestringrequiredclientobject | nullrequireddiscountsobject[]requiredcodestringrequiredtitlestringrequiredamountMinorMinorUnitsrequired
giftCardobject | nullrequiredstoreCreditMinorMinorUnitsrequiredaffiliateobject | nullrequiredpaymentobjectrequiredproviderPaymentIdstringrequiredproviderUrlstringrequiredmode"test" | "live" | nullrequired
deliveredobjectrequiredkeysOrderDeliveredKey[]requireddownloadsobject[]requiredproductIdProductIdrequirednamestringrequireddownloadsintegerrequired
discordRolesobject[]requiredroleNamestringrequiredstatusstringrequired
giftCardsobject[]requiredlast4stringrequiredamountMinorMinorUnitsrequired
notesOrderNote[]requiredmanualobject | nullrequiredblockedobjectrequiredemailbooleanrequiredipbooleanrequired
discordUserIdstringrequiredorderPageUrlstringrequiredfulfilledAtTimestamp | nullrequiredrefundedAtTimestamp | nullrequiredattentionobject | nullrequiredclaimsobject[]requiredidstringrequiredkind"claim" | "chargeback"requiredstatusstringrequiredreasonstringrequiredopenedAtTimestamprequiredclosedAtTimestamp | 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)