Affiliates
5 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.
Affiliates with clicks, conversions and what you owe
GET
/v1/store/affiliatesOr name the store: GET /v1/stores/{storeId}/affiliates
Parameters
tab"all" | "active" | "pending" | "paused"queryqstring | nullquerycursorstring | nullquerylimitinteger | stringquerysort"affiliate" | "code" | "rate" | "clicks" | "orders" | "conversion" | "revenue" | "owed" | "paid" | "status" | "created"querydir"asc" | "desc"query
Response ListAffiliatesResponse
itemsAffiliateRow[]requirednextCursorCursor | nullrequiredcountsAffiliateCountsrequired
Example
curl "https://api.shopfa.st/v1/store/affiliates" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/affiliates', {
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/affiliates",
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/affiliates", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Add an affiliate (emailed their link)
POST
/v1/store/affiliatesOr name the store: POST /v1/stores/{storeId}/affiliates
Body
namestringrequiredemailstringrequiredcodestring | nullrequiredcommissionBpsinteger | nullrequiredpayoutEmailstring | nullnewCustomersOnlybooleanreward"cash" | "store_credit" | null
Response AffiliateDetail
idAffiliateIdrequirednamestringrequiredemailEmailrequiredcodestringrequiredstatusAffiliateStatusrequiredcommissionBpsBps | nullrequiredeffectiveBpsBpsrequirednewCustomersOnlybooleanrequiredeffectiveNewCustomersOnlybooleanrequiredrewardAffiliateReward | nullrequired
17 more fields
effectiveRewardAffiliateRewardrequiredclicksintegerrequiredconversionsintegerrequiredconversionBpsBpsrequiredrevenueMinorMinorUnitsrequiredpendingMinorMinorUnitsrequiredowedMinorMinorUnitsrequiredpaidMinorMinorUnitsrequiredstoreCreditMinorMinorUnitsrequiredcurrencyCurrencyCoderequiredlinkstringrequiredcreatedAtTimestamprequiredpayoutEmailstringrequirednotestringrequiredcommissionsAffiliateCommission[]requiredpayoutsAffiliatePayout[]requireddailyobject[]requireddateIsoDaterequiredclicksintegerrequiredconversionsintegerrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/affiliates" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"email": "[email protected]",
"code": "string",
"commissionBps": 0,
"payoutEmail": null,
"newCustomersOnly": null,
"reward": null
}'const res = await fetch('https://api.shopfa.st/v1/store/affiliates', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"email": "[email protected]",
"code": "string",
"commissionBps": 0,
"payoutEmail": null,
"newCustomersOnly": null,
"reward": null
}),
});
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/affiliates",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"email": "[email protected]",
"code": "string",
"commissionBps": 0,
"payoutEmail": None,
"newCustomersOnly": None,
"reward": None
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/affiliates", strings.NewReader(`{
"name": "string",
"email": "[email protected]",
"code": "string",
"commissionBps": 0,
"payoutEmail": null,
"newCustomersOnly": null,
"reward": null
}`))
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
One affiliate with commissions and payouts
GET
/v1/store/affiliates/{affiliateId}Or name the store: GET /v1/stores/{storeId}/affiliates/{affiliateId}
Parameters
affiliateIdaff_…pathrequired
Response AffiliateDetail
idAffiliateIdrequirednamestringrequiredemailEmailrequiredcodestringrequiredstatusAffiliateStatusrequiredcommissionBpsBps | nullrequiredeffectiveBpsBpsrequirednewCustomersOnlybooleanrequiredeffectiveNewCustomersOnlybooleanrequiredrewardAffiliateReward | nullrequired
17 more fields
effectiveRewardAffiliateRewardrequiredclicksintegerrequiredconversionsintegerrequiredconversionBpsBpsrequiredrevenueMinorMinorUnitsrequiredpendingMinorMinorUnitsrequiredowedMinorMinorUnitsrequiredpaidMinorMinorUnitsrequiredstoreCreditMinorMinorUnitsrequiredcurrencyCurrencyCoderequiredlinkstringrequiredcreatedAtTimestamprequiredpayoutEmailstringrequirednotestringrequiredcommissionsAffiliateCommission[]requiredpayoutsAffiliatePayout[]requireddailyobject[]requireddateIsoDaterequiredclicksintegerrequiredconversionsintegerrequired
Example
curl "https://api.shopfa.st/v1/store/affiliates/aff_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/affiliates/aff_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/affiliates/aff_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/affiliates/aff_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Approve, pause or change an affiliate
PATCH
/v1/store/affiliates/{affiliateId}Or name the store: PATCH /v1/stores/{storeId}/affiliates/{affiliateId}
Parameters
affiliateIdaff_…pathrequired
Body
status"pending" | "active" | "paused" | "rejected"commissionBpsinteger | nullnotestringpayoutEmailstring | nullnamestringnewCustomersOnlybooleanreward"cash" | "store_credit" | null
Response AffiliateDetail
idAffiliateIdrequirednamestringrequiredemailEmailrequiredcodestringrequiredstatusAffiliateStatusrequiredcommissionBpsBps | nullrequiredeffectiveBpsBpsrequirednewCustomersOnlybooleanrequiredeffectiveNewCustomersOnlybooleanrequiredrewardAffiliateReward | nullrequired
17 more fields
effectiveRewardAffiliateRewardrequiredclicksintegerrequiredconversionsintegerrequiredconversionBpsBpsrequiredrevenueMinorMinorUnitsrequiredpendingMinorMinorUnitsrequiredowedMinorMinorUnitsrequiredpaidMinorMinorUnitsrequiredstoreCreditMinorMinorUnitsrequiredcurrencyCurrencyCoderequiredlinkstringrequiredcreatedAtTimestamprequiredpayoutEmailstringrequirednotestringrequiredcommissionsAffiliateCommission[]requiredpayoutsAffiliatePayout[]requireddailyobject[]requireddateIsoDaterequiredclicksintegerrequiredconversionsintegerrequired
Example
curl -X PATCH "https://api.shopfa.st/v1/store/affiliates/aff_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "pending",
"commissionBps": 0,
"note": "string",
"payoutEmail": "[email protected]",
"name": "string",
"newCustomersOnly": false,
"reward": "cash"
}'const res = await fetch('https://api.shopfa.st/v1/store/affiliates/aff_0123456789abcdefghjk', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"status": "pending",
"commissionBps": 0,
"note": "string",
"payoutEmail": "[email protected]",
"name": "string",
"newCustomersOnly": false,
"reward": "cash"
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PATCH",
"https://api.shopfa.st/v1/store/affiliates/aff_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"status": "pending",
"commissionBps": 0,
"note": "string",
"payoutEmail": "[email protected]",
"name": "string",
"newCustomersOnly": False,
"reward": "cash"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PATCH", "https://api.shopfa.st/v1/store/affiliates/aff_0123456789abcdefghjk", strings.NewReader(`{
"status": "pending",
"commissionBps": 0,
"note": "string",
"payoutEmail": "[email protected]",
"name": "string",
"newCustomersOnly": false,
"reward": "cash"
}`))
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
Pay every approved commission: from your ShopFast balance, or record a payment you made yourself
POST
/v1/store/affiliates/{affiliateId}/payoutsOr name the store: POST /v1/stores/{storeId}/affiliates/{affiliateId}/payouts
Parameters
affiliateIdaff_…pathrequired
Body
method"balance" | "external"requiredreferencestring
Response AffiliateDetail
idAffiliateIdrequirednamestringrequiredemailEmailrequiredcodestringrequiredstatusAffiliateStatusrequiredcommissionBpsBps | nullrequiredeffectiveBpsBpsrequirednewCustomersOnlybooleanrequiredeffectiveNewCustomersOnlybooleanrequiredrewardAffiliateReward | nullrequired
17 more fields
effectiveRewardAffiliateRewardrequiredclicksintegerrequiredconversionsintegerrequiredconversionBpsBpsrequiredrevenueMinorMinorUnitsrequiredpendingMinorMinorUnitsrequiredowedMinorMinorUnitsrequiredpaidMinorMinorUnitsrequiredstoreCreditMinorMinorUnitsrequiredcurrencyCurrencyCoderequiredlinkstringrequiredcreatedAtTimestamprequiredpayoutEmailstringrequirednotestringrequiredcommissionsAffiliateCommission[]requiredpayoutsAffiliatePayout[]requireddailyobject[]requireddateIsoDaterequiredclicksintegerrequiredconversionsintegerrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/affiliates/aff_0123456789abcdefghjk/payouts" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "balance",
"reference": ""
}'const res = await fetch('https://api.shopfa.st/v1/store/affiliates/aff_0123456789abcdefghjk/payouts', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"method": "balance",
"reference": ""
}),
});
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/affiliates/aff_0123456789abcdefghjk/payouts",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"method": "balance",
"reference": ""
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/affiliates/aff_0123456789abcdefghjk/payouts", strings.NewReader(`{
"method": "balance",
"reference": ""
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)