Orders
22 endpoints. 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.
Orders with tab counts
/v1/store/ordersOr name the store: GET /v1/stores/{storeId}/orders
Parameters
tab"all" | "pending" | "paid" | "fulfilled" | "refunded" | "disputed" | "failed" | "partially_refunded"queryqstring | nullquerycursorstring | nullquerylimitinteger | stringqueryproductIdprd_… | nullquerymethod"card" | "apple_pay" | "google_pay" | "paypal" | "crypto" | "bank_transfer" | "store_credit" | "manual" | "cash_app" | "skins" | "gift_code" | nullqueryprovider"shopfast_pay" | "sandbox" | "stripe" | "paypal" | "btcpay" | "manual" | "plugin" | "crypto_direct" | "stripe_keys" | "paypal_keys" | "square" | "mollie" | "razorpay" | "paystack" | "nowpayments" | "cryptomus" | "paypal_email" | "shopify" | "paddle" | "heleket" | "sumup" | "authorize_net" | "nmi" | "skinloop" | "cashapp" | "paypal_ff" | "gift_codes" | nullquerystatusesstring | nullqueryfromstring | nullquerytostring | nullqueryminTotalMinorinteger | string | nullquerymaxTotalMinorinteger | string | nullquerydiscordIdstring | nullquerycountrystring | nullquerykeystring | nullquerypaymentIdstring | nullquerysort"created" | "number" | "customer" | "product" | "amount" | "method" | "country" | "status"querydir"asc" | "desc"query
Response ListOrdersResponse
itemsOrder[]requirednextCursorCursor | nullrequiredcountsOrderCountsrequiredcheckoutsCheckoutRow[]requiredsequencestring[]required
Example
curl "https://api.shopfa.st/v1/store/orders" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders', {
method: 'GET',
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(
"GET",
"https://api.shopfa.st/v1/store/orders",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/orders", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Order with fee breakdown and fulfillment timeline
/v1/store/orders/{orderId}Or name the store: GET /v1/stores/{storeId}/orders/{orderId}
Parameters
orderIdord_…pathrequired
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 "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk', {
method: 'GET',
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(
"GET",
"https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Refund in full
/v1/store/orders/{orderId}/refundOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/refund
Parameters
orderIdord_…pathrequired
Body
reasonstringrequired
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/orders/ord_0123456789abcdefghjk/refund" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reason": "string"
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"reason": "string"
}),
});
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/orders/ord_0123456789abcdefghjk/refund",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"reason": "string"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund", strings.NewReader(`{
"reason": "string"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Email the buyer a review request now
/v1/store/orders/{orderId}/review-requestOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/review-request
Parameters
orderIdord_…pathrequired
Response SendReviewRequestResponse
sentTostringrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/review-request" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/review-request', {
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/orders/ord_0123456789abcdefghjk/review-request",
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/orders/ord_0123456789abcdefghjk/review-request", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Sandbox and test orders only: the processor opens a chargeback (signed webhook through the real pipeline)
/v1/store/orders/{orderId}/simulate-disputeOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/simulate-dispute
Parameters
orderIdord_…pathrequired
Body
reason"fraudulent" | "not_received" | "not_as_described" | "not_working" | "duplicate" | "unrecognized" | "credit_not_processed" | "subscription_canceled" | "wrong_item" | "general" | "other"stage"chargeback" | "inquiry"
Response DisputeDetail
idDisputeIdrequiredkindDisputeKindrequiredsourceDisputeSourcerequiredstatusDisputeStatusrequiredreasonDisputeReasonrequiredorderIdOrderIdrequiredorderNumberstringrequiredcustomerIdCustomerId | nullrequiredcustomerNamestringrequiredcustomerEmailstringrequired
18 more fields
amountMinorMinorUnitsrequiredfeeMinorMinorUnitsrequiredcurrencyCurrencyCoderequiredproviderGatewayProviderrequiredproviderDisputeIdstringrequireddueAtTimestamp | nullrequiredresolutionClaimResolution | nullrequiredopenedAtTimestamprequiredclosedAtTimestamp | nullrequiredstageDisputeStage | nullrequiredbuyerMessagestringrequiredevidenceDisputeEvidencerequiredeventsDisputeEvent[]requiredledgerobjectrequiredheldMinorMinorUnitsrequiredreturnedMinorMinorUnitsrequiredlostMinorMinorUnitsrequiredfeeMinorMinorUnitsrequired
orderStatusOrderStatusrequiredisTestbooleanrequiredactionsDisputeActionsrequiredbuyerBlockedbooleanrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/simulate-dispute" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reason": "fraudulent",
"stage": "chargeback"
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/simulate-dispute', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"reason": "fraudulent",
"stage": "chargeback"
}),
});
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/orders/ord_0123456789abcdefghjk/simulate-dispute",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"reason": "fraudulent",
"stage": "chargeback"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/simulate-dispute", strings.NewReader(`{
"reason": "fraudulent",
"stage": "chargeback"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Orders and revenue per status for today, 7 days, 4 weeks or all time (KPI cards)
/v1/store/orders/statsOr name the store: GET /v1/stores/{storeId}/orders/stats
Parameters
period"today" | "7d" | "4w" | "all"query
Response OrderStats
periodOrderStatsPeriodrequiredcurrencyCurrencyCoderequiredfromTimestamp | nullrequiredtimezonestringrequiredgroupsOrderStatusStat[]requiredtotalsobjectrequiredordersintegerrequiredgrossMinorMinorUnitsrequiredrefundedMinorMinorUnitsrequirednetMinorMinorUnitsrequiredaverageOrderMinorMinorUnitsrequired
awaitingPaymentintegerrequiredabandonedintegerrequired
Example
curl "https://api.shopfa.st/v1/store/orders/stats" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/stats', {
method: 'GET',
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(
"GET",
"https://api.shopfa.st/v1/store/orders/stats",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/orders/stats", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Every order matching the tab, search and filters, as CSV or JSON (up to 10,000 rows)
/v1/store/orders/exportOr name the store: GET /v1/stores/{storeId}/orders/export
Parameters
format"csv" | "json"querytab"all" | "pending" | "paid" | "fulfilled" | "refunded" | "disputed" | "failed" | "partially_refunded"queryqstring | nullqueryproductIdprd_… | nullquerymethod"card" | "apple_pay" | "google_pay" | "paypal" | "crypto" | "bank_transfer" | "store_credit" | "manual" | "cash_app" | "skins" | "gift_code" | nullqueryprovider"shopfast_pay" | "sandbox" | "stripe" | "paypal" | "btcpay" | "manual" | "plugin" | "crypto_direct" | "stripe_keys" | "paypal_keys" | "square" | "mollie" | "razorpay" | "paystack" | "nowpayments" | "cryptomus" | "paypal_email" | "shopify" | "paddle" | "heleket" | "sumup" | "authorize_net" | "nmi" | "skinloop" | "cashapp" | "paypal_ff" | "gift_codes" | nullquerystatusesstring | nullqueryfromstring | nullquerytostring | nullqueryminTotalMinorinteger | string | nullquerymaxTotalMinorinteger | string | nullquerydiscordIdstring | nullquerycountrystring | nullquerykeystring | nullquerypaymentIdstring | nullquerysort"created" | "number" | "customer" | "product" | "amount" | "method" | "country" | "status"querydir"asc" | "desc"query
Response OrderExport
filenamestringrequiredcontentTypestringrequiredbodystringrequiredrowsintegerrequired
Example
curl "https://api.shopfa.st/v1/store/orders/export" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/export', {
method: 'GET',
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(
"GET",
"https://api.shopfa.st/v1/store/orders/export",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/orders/export", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Refund part or all of what is left, to the payment method or to store credit. Idempotent per key
/v1/store/orders/{orderId}/refundsOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/refunds
Parameters
orderIdord_…pathrequired
Body
amountMinorintegerrequiredreasonstringrequireddestination"original" | "store_credit"idempotencyKeystringrequiredbonusboolean
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/orders/ord_0123456789abcdefghjk/refunds" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amountMinor": 1,
"reason": "string",
"destination": "original",
"idempotencyKey": "string",
"bonus": false
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refunds', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"amountMinor": 1,
"reason": "string",
"destination": "original",
"idempotencyKey": "string",
"bonus": false
}),
});
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/orders/ord_0123456789abcdefghjk/refunds",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"amountMinor": 1,
"reason": "string",
"destination": "original",
"idempotencyKey": "string",
"bonus": False
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refunds", strings.NewReader(`{
"amountMinor": 1,
"reason": "string",
"destination": "original",
"idempotencyKey": "string",
"bonus": false
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Add a private note to an order
/v1/store/orders/{orderId}/notesOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/notes
Parameters
orderIdord_…pathrequired
Body
bodystringrequired
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/orders/ord_0123456789abcdefghjk/notes" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "string"
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/notes', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"body": "string"
}),
});
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/orders/ord_0123456789abcdefghjk/notes",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"body": "string"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/notes", strings.NewReader(`{
"body": "string"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Delete a note
/v1/store/orders/{orderId}/notes/{noteId}Or name the store: DELETE /v1/stores/{storeId}/orders/{orderId}/notes/{noteId}
Parameters
orderIdord_…pathrequirednoteIdont_…pathrequired
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 DELETE "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/notes/ont_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/notes/ont_0123456789abcdefghjk', {
method: 'DELETE',
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(
"DELETE",
"https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/notes/ont_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/notes/ont_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Block or unblock the buyer's email and/or checkout IP (the store's fraud blocklist)
/v1/store/orders/{orderId}/blockOr name the store: PUT /v1/stores/{storeId}/orders/{orderId}/block
Parameters
orderIdord_…pathrequired
Body
emailbooleanrequiredipbooleanrequiredreasonstring
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 PUT "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/block" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": false,
"ip": false,
"reason": ""
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/block', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"email": false,
"ip": false,
"reason": ""
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PUT",
"https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/block",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"email": False,
"ip": False,
"reason": ""
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/block", strings.NewReader(`{
"email": false,
"ip": false,
"reason": ""
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Revoke delivered keys and deliver fresh ones from the pool (the buyer is emailed the new keys)
/v1/store/orders/{orderId}/replace-keysOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/replace-keys
Parameters
orderIdord_…pathrequired
Body
keyIdskey_…[]requiredreasonstringnotifyboolean
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/orders/ord_0123456789abcdefghjk/replace-keys" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keyIds": [
"key_0123456789abcdefghjk"
],
"reason": "",
"notify": true
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/replace-keys', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"keyIds": [
"key_0123456789abcdefghjk"
],
"reason": "",
"notify": true
}),
});
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/orders/ord_0123456789abcdefghjk/replace-keys",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"keyIds": [
"key_0123456789abcdefghjk"
],
"reason": "",
"notify": True
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/replace-keys", strings.NewReader(`{
"keyIds": [
"key_0123456789abcdefghjk"
],
"reason": "",
"notify": true
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Email the buyer their receipt again, with their license keys and fresh download links (3 per order per hour)
/v1/store/orders/{orderId}/resend-deliveryOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/resend-delivery
Parameters
orderIdord_…pathrequired
Response ResendDeliveryResult
sentTostringrequiredemails"receipt" | "license_key" | "download_ready"[]requiredkeysintegerrequireddownloadsintegerrequiredremainingintegerrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/resend-delivery" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/resend-delivery', {
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/orders/ord_0123456789abcdefghjk/resend-delivery",
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/orders/ord_0123456789abcdefghjk/resend-delivery", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Put failed delivery steps back in the queue and run fulfillment again
/v1/store/orders/{orderId}/retry-deliveryOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/retry-delivery
Parameters
orderIdord_…pathrequired
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/orders/ord_0123456789abcdefghjk/retry-delivery" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/retry-delivery', {
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/orders/ord_0123456789abcdefghjk/retry-delivery",
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/orders/ord_0123456789abcdefghjk/retry-delivery", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Complete an order that is waiting for a manual payment (your own gateway or a test order): runs delivery like a gateway payment
/v1/store/orders/{orderId}/mark-paidOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/mark-paid
Parameters
orderIdord_…pathrequired
Body
notestring
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/orders/ord_0123456789abcdefghjk/mark-paid" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"note": ""
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/mark-paid', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"note": ""
}),
});
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/orders/ord_0123456789abcdefghjk/mark-paid",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"note": ""
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/mark-paid", strings.NewReader(`{
"note": ""
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Deliver an order that was held for review
/v1/store/orders/{orderId}/release-holdOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/release-hold
Parameters
orderIdord_…pathrequired
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/orders/ord_0123456789abcdefghjk/release-hold" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/release-hold', {
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/orders/ord_0123456789abcdefghjk/release-hold",
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/orders/ord_0123456789abcdefghjk/release-hold", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
The order’s open (or latest) refund offer and the store’s credit refund settings
/v1/store/orders/{orderId}/refund-offerOr name the store: GET /v1/stores/{storeId}/orders/{orderId}/refund-offer
Parameters
orderIdord_…pathrequired
Response OrderRefundOffers
settingsCreditRefundSettingsrequiredofferRefundOffer | nullrequired
Example
curl "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer', {
method: 'GET',
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(
"GET",
"https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Offer the buyer a refund they take as store credit with the bonus or as money back (emailed; shown on their order page)
/v1/store/orders/{orderId}/refund-offerOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/refund-offer
Parameters
orderIdord_…pathrequired
Body
amountMinorintegerrequiredreasonstringrequired
Response OrderRefundOffers
settingsCreditRefundSettingsrequiredofferRefundOffer | nullrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amountMinor": 1,
"reason": "string"
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"amountMinor": 1,
"reason": "string"
}),
});
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/orders/ord_0123456789abcdefghjk/refund-offer",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"amountMinor": 1,
"reason": "string"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer", strings.NewReader(`{
"amountMinor": 1,
"reason": "string"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Withdraw an offer the buyer has not answered
/v1/store/orders/{orderId}/refund-offer/{offerId}/cancelOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/refund-offer/{offerId}/cancel
Parameters
orderIdord_…pathrequiredofferIdrfo_…pathrequired
Response OrderRefundOffers
settingsCreditRefundSettingsrequiredofferRefundOffer | nullrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer/rfo_0123456789abcdefghjk/cancel" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refund-offer/rfo_0123456789abcdefghjk/cancel', {
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/orders/ord_0123456789abcdefghjk/refund-offer/rfo_0123456789abcdefghjk/cancel",
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/orders/ord_0123456789abcdefghjk/refund-offer/rfo_0123456789abcdefghjk/cancel", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Queue a refund for 10 seconds (undo window), then send it like createOrderRefund
/v1/store/orders/{orderId}/refunds/queueOr name the store: POST /v1/stores/{storeId}/orders/{orderId}/refunds/queue
Parameters
orderIdord_…pathrequired
Body
amountMinorintegerrequiredreasonstringrequireddestination"original" | "store_credit"idempotencyKeystringrequiredbonusboolean
Response PendingAction
idPendingActionIdrequiredkindPendingActionKindrequiredlabelstringrequiredstatePendingActionStaterequiredcommitAtTimestamprequiredcreatedAtTimestamprequiredsettledAtTimestamp | nullrequirederrorstringrequiredtargetobjectrequiredkind"order" | "campaign" | "product" | "products" | "discounts"requiredidstringrequired
actorNamestringrequiredminebooleanrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refunds/queue" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amountMinor": 1,
"reason": "string",
"destination": "original",
"idempotencyKey": "string",
"bonus": false
}'const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refunds/queue', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"amountMinor": 1,
"reason": "string",
"destination": "original",
"idempotencyKey": "string",
"bonus": false
}),
});
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/orders/ord_0123456789abcdefghjk/refunds/queue",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"amountMinor": 1,
"reason": "string",
"destination": "original",
"idempotencyKey": "string",
"bonus": False
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/refunds/queue", strings.NewReader(`{
"amountMinor": 1,
"reason": "string",
"destination": "original",
"idempotencyKey": "string",
"bonus": false
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Subscriptions this order started or renewed, with auto-renew state, charges and the audit trail
/v1/store/orders/{orderId}/auto-renewOr name the store: GET /v1/stores/{storeId}/orders/{orderId}/auto-renew
Parameters
orderIdord_…pathrequired
Response SellerAutoRenewList
subscriptionsSellerAutoRenewSubscription[]required
Example
curl "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/auto-renew" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/auto-renew', {
method: 'GET',
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(
"GET",
"https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/auto-renew",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/auto-renew", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
The order's invoice and credit notes
/v1/store/orders/{orderId}/invoicesOr name the store: GET /v1/stores/{storeId}/orders/{orderId}/invoices
Parameters
orderIdord_…pathrequired
Response ListOrderInvoicesResponse
itemsInvoiceRow[]required
Example
curl "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/invoices" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/invoices', {
method: 'GET',
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(
"GET",
"https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/invoices",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/orders/ord_0123456789abcdefghjk/invoices", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)