curl --request GET \
--url https://api.sitespy.app/api/v1/plan \
--header 'x-api-key: <api-key>'import requests
url = "https://api.sitespy.app/api/v1/plan"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sitespy.app/api/v1/plan', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"plan": "free",
"check_budget": {
"mode": "off",
"period": "2026-10",
"resets_at": 123,
"credits_used": 123,
"checks": 123,
"breakdown": {
"plain": 123,
"browser": 123,
"antibot": 123
},
"manual_checks": 123,
"free_checks": 123,
"weights": {
"plain": 123,
"browser": 123,
"antibot": 123
},
"budget": 123,
"percent_used": 123,
"enforce_from": 123
},
"features": {},
"next_plan": "<string>",
"limits": {
"max_watches": 5,
"history_retention_days": 30,
"max_snapshots_per_watch": 5,
"min_check_interval_seconds": 21600,
"default_check_interval_seconds": 3600,
"max_check_interval_seconds": 604800,
"label": "Free",
"price_monthly": 0,
"monthly_check_credits": 123,
"max_team_seats": 123
},
"usage": {
"watches": 3
},
"billing": {
"subscription_status": "active",
"ls_subscription_id": "<string>",
"ls_customer_portal_url": "<string>",
"current_period_end": "<string>"
},
"trial": {
"trial_ends_at": 123,
"trial_active": true,
"days_remaining": 123
},
"email_verified": true,
"created_at": 123,
"pmf_submitted": true,
"has_detected_change": true
}Get current plan and usage
Returns the subscription plan, limits, and watch usage for the authenticated API key.
curl --request GET \
--url https://api.sitespy.app/api/v1/plan \
--header 'x-api-key: <api-key>'import requests
url = "https://api.sitespy.app/api/v1/plan"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sitespy.app/api/v1/plan', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"plan": "free",
"check_budget": {
"mode": "off",
"period": "2026-10",
"resets_at": 123,
"credits_used": 123,
"checks": 123,
"breakdown": {
"plain": 123,
"browser": 123,
"antibot": 123
},
"manual_checks": 123,
"free_checks": 123,
"weights": {
"plain": 123,
"browser": 123,
"antibot": 123
},
"budget": 123,
"percent_used": 123,
"enforce_from": 123
},
"features": {},
"next_plan": "<string>",
"limits": {
"max_watches": 5,
"history_retention_days": 30,
"max_snapshots_per_watch": 5,
"min_check_interval_seconds": 21600,
"default_check_interval_seconds": 3600,
"max_check_interval_seconds": 604800,
"label": "Free",
"price_monthly": 0,
"monthly_check_credits": 123,
"max_team_seats": 123
},
"usage": {
"watches": 3
},
"billing": {
"subscription_status": "active",
"ls_subscription_id": "<string>",
"ls_customer_portal_url": "<string>",
"current_period_end": "<string>"
},
"trial": {
"trial_ends_at": 123,
"trial_active": true,
"days_remaining": 123
},
"email_verified": true,
"created_at": 123,
"pmf_submitted": true,
"has_detected_change": true
}Authorizations
API key for authentication. You can find your API key in the Site Spy dashboard under Settings → API.
Response
Plan and usage information
free, starter, pro, business, pro_trial, pro_legacy "free"
Check credits spent this period. A check costs the heaviest fetch stage it needed:
1 for a plain fetch, 2 for a browser, 5 for an anti-bot solver. Reliability retries
and system rechecks are free. budget and percent_used appear only once budgets
are announced.
Show child attributes
Show child attributes
Which plan-gated features this account has
Show child attributes
Show child attributes
The plan an upgrade would move this account to, or null at the top
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Whether the account email has been verified
Unix timestamp of account creation (null for guest API keys)
Whether the user has already submitted the PMF survey
Whether at least one of the user's watches has fired a change notification

