Audit log
6 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.
Every change made in the store (dashboard and API keys), newest first (or by who, action or target)
GET
/v1/store/audit-logOr name the store: GET /v1/stores/{storeId}/audit-log
Parameters
actorusr_… | ak_… | nullqueryareastring | nullqueryactionstring | nullqueryfromstring | nullquerytostring | nullqueryqstring | nullquerytargetTypestring | nullquerytargetIdstring | nullquerysensitiveboolean | "true" | "false" | nullqueryactorKind"user" | "api_key" | nullquerycursorstring | nullquerylimitinteger | stringquerysort"time" | "actor" | "action" | "target"querydir"asc" | "desc"query
Response ListStoreAuditResponse
itemsStoreAuditEntry[]requirednextCursorCursor | nullrequiredfacetsStoreAuditFacetsrequired
Example
curl "https://api.shopfa.st/v1/store/audit-log" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/audit-log', {
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/audit-log",
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/audit-log", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
The filtered store audit log as CSV (up to 10,000 rows)
GET
/v1/store/audit-log/exportOr name the store: GET /v1/stores/{storeId}/audit-log/export
Parameters
actorusr_… | ak_… | nullqueryareastring | nullqueryactionstring | nullqueryfromstring | nullquerytostring | nullqueryqstring | nullquerytargetTypestring | nullquerytargetIdstring | nullquerysensitiveboolean | "true" | "false" | nullqueryactorKind"user" | "api_key" | nullquery
Response ExportStoreAuditResponse
filenamestringrequiredcsvstringrequiredrowsintegerrequired
Example
curl "https://api.shopfa.st/v1/store/audit-log/export" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/audit-log/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/audit-log/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/audit-log/export", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Every change to one product, order, role, member or setting, oldest first, with field-level differences
GET
/v1/store/audit-log/timelineOr name the store: GET /v1/stores/{storeId}/audit-log/timeline
Parameters
targetTypestringqueryrequiredtargetIdstringqueryrequired
Response AuditTimeline
targetobjectrequiredtypestringrequiredidstringrequiredlabelstringrequired
entriesobject[]requiredidStoreAuditEntryIdrequiredcreatedAtTimestamprequiredactorStoreAuditActorrequiredactionstringrequiredareastringrequiredsummarystringrequiredmethod"POST" | "PUT" | "PATCH" | "DELETE"requiredpathstringrequiredtargetobject | nullrequireddetailsStoreAuditDetailsrequiredipstringrequireduserAgentstringrequiredbeforeobject | nullrequiredafterobject | nullrequiredalertstringrequiredvia"ai" | "mcp" | nullrequiredchangesAuditFieldChange[]required
Example
curl "https://api.shopfa.st/v1/store/audit-log/timeline" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/audit-log/timeline', {
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/audit-log/timeline",
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/audit-log/timeline", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
How long the audit log keeps entries and which sensitive changes raise alerts
GET
/v1/store/audit-log/settingsOr name the store: GET /v1/stores/{storeId}/audit-log/settings
Response AuditSettingsView
retentionDaysintegerrequiredalertsobject[]requiredkindAuditAlertKindrequiredenabledbooleanrequired
oldestEntryAtTimestamp | nullrequiredentriesintegerrequiredlastPrunedAtTimestamp | nullrequiredalerts30dintegerrequired
Example
curl "https://api.shopfa.st/v1/store/audit-log/settings" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/audit-log/settings', {
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/audit-log/settings",
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/audit-log/settings", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Change the audit log retention and alerts (owner only)
PUT
/v1/store/audit-log/settingsOr name the store: PUT /v1/stores/{storeId}/audit-log/settings
Body
retentionDaysintegerrequiredalertsobject[]requiredkind"payout_destination" | "api_key_created" | "role_change" | "member_removed" | "ownership_transfer" | "access_policy" | "fraud_rules" | "webhook_endpoint" | "audit_settings"requiredenabledbooleanrequired
Response AuditSettingsView
retentionDaysintegerrequiredalertsobject[]requiredkindAuditAlertKindrequiredenabledbooleanrequired
oldestEntryAtTimestamp | nullrequiredentriesintegerrequiredlastPrunedAtTimestamp | nullrequiredalerts30dintegerrequired
Example
curl -X PUT "https://api.shopfa.st/v1/store/audit-log/settings" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"retentionDays": 30,
"alerts": [
{
"kind": "payout_destination",
"enabled": false
}
]
}'const res = await fetch('https://api.shopfa.st/v1/store/audit-log/settings', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"retentionDays": 30,
"alerts": [
{
"kind": "payout_destination",
"enabled": false
}
]
}),
});
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/audit-log/settings",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"retentionDays": 30,
"alerts": [
{
"kind": "payout_destination",
"enabled": False
}
]
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/audit-log/settings", strings.NewReader(`{
"retentionDays": 30,
"alerts": [
{
"kind": "payout_destination",
"enabled": 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
The filtered store audit log as JSON lines with snapshots (up to 10,000 rows)
GET
/v1/store/audit-log/export.jsonOr name the store: GET /v1/stores/{storeId}/audit-log/export.json
Parameters
actorusr_… | ak_… | nullqueryareastring | nullqueryactionstring | nullqueryfromstring | nullquerytostring | nullqueryqstring | nullquerytargetTypestring | nullquerytargetIdstring | nullquerysensitiveboolean | "true" | "false" | nullqueryactorKind"user" | "api_key" | nullquery
Response ExportStoreAuditJsonResponse
filenamestringrequiredjsonstringrequiredrowsintegerrequired
Example
curl "https://api.shopfa.st/v1/store/audit-log/export.json" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/audit-log/export.json', {
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/audit-log/export.json",
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/audit-log/export.json", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)