Docs
Dashboard
On this page

    Replacements

    2 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.

    Replacement requests from buyers: waiting for review, approved (automatic or by a teammate) and rejected

    GET/v1/store/replacements

    Or name the store: GET /v1/stores/{storeId}/replacements

    orders:readrole: orders:readlistReplacements

    Parameters

    • tab"pending" | "approved" | "rejected" | "all"query
    • productIdprd_… | nullquery
    • qstring | nullquery
    • sort"when" | "key" | "buyer" | "reason" | "status"query
    • dir"asc" | "desc" | nullquery

    Response ReplacementQueue

    • countsobjectrequired
      • pendingintegerrequired
      • approvedintegerrequired
      • rejectedintegerrequired
      • allintegerrequired
    • requestsReplacementRow[]required
    • productsobject[]required
      • idProductIdrequired
      • namestringrequired
      • approvalReplacementApprovalrequired

    Example

    curl "https://api.shopfa.st/v1/store/replacements" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/replacements', {
      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/replacements",
        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/replacements", 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.

    Approve (a fresh key from the same pool replaces the old one, which is revoked) or reject a replacement request

    POST/v1/store/replacements/{requestId}/decide

    Or name the store: POST /v1/stores/{storeId}/replacements/{requestId}/decide

    orders:writerole: orders:writedecideReplacement

    Parameters

    • requestIdkrq_…pathrequired

    Body

    • decision"approve" | "reject"required
    • notestring

    Response ReplacementRow

    • idReplacementRequestIdrequired
    • statusReplacementStatusrequired
    • autobooleanrequired
    • orderIdOrderIdrequired
    • orderNumberstringrequired
    • productIdProductIdrequired
    • productNamestringrequired
    • variantNamestringrequired
    • buyerEmailstringrequired
    • oldKeyIdLicenseKeyIdrequired
    15 more fields
    • oldKeyMaskedstringrequired
    • newKeyIdLicenseKeyId | nullrequired
    • newKeyMaskedstringrequired
    • reasonReplacementReason | nullrequired
    • detailsstringrequired
    • filesReplacementFile[]required
    • disputeIdDisputeId | nullrequired
    • poolAvailableintegerrequired
    • usedintegerrequired
    • maxintegerrequired
    • windowEndsAtTimestamp | nullrequired
    • decidedBystringrequired
    • notestringrequired
    • createdAtTimestamprequired
    • decidedAtTimestamp | nullrequired

    Example

    curl -X POST "https://api.shopfa.st/v1/store/replacements/krq_0123456789abcdefghjk/decide" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "decision": "approve",
      "note": ""
    }'
    const res = await fetch('https://api.shopfa.st/v1/store/replacements/krq_0123456789abcdefghjk/decide', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        "decision": "approve",
        "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/replacements/krq_0123456789abcdefghjk/decide",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
        json={
          "decision": "approve",
          "note": ""
        },
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/replacements/krq_0123456789abcdefghjk/decide", strings.NewReader(`{
      "decision": "approve",
      "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

    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?