API v1

ToolSpotter API

Base URL: https://toolspotter.com/api/v1

Authentication

Pass your API key as a Bearer token. Keys come in two flavors:

  • ts_live_… — production, counts against your quota.
  • ts_test_…— returns real data, doesn’t count against your quota.
Authorization: Bearer ts_live_32chars…

Rate limits

Every response carries these headers:

  • X-RateLimit-Limit — your quota for the active window.
  • X-RateLimit-Remaining — how many requests remain.
  • X-RateLimit-Reset — unix timestamp when the window resets.
  • Retry-After — included on 429 responses.

Free: 1,000 requests rolling 24h. Developer: 50,000 requests rolling 30d. Business: 500,000 requests rolling 30d. Enterprise: custom.

Attribution (Free plans)

If you’re on the Free tier, you must render a visible “Powered by ToolSpotter” link on every page that displays API data:

<a href="https://toolspotter.com" data-powered-by="toolspotter" rel="noopener">
  Powered by ToolSpotter
</a>

We sample compliance manually. Upgrade to Developer or Business to remove the requirement.

Endpoints

GET/api/v1/toolsscope: tools

List active tools. Supports filtering, pagination, sorting.

Query parameters
category ?Category slug
pricing_model ?free | freemium | paid | enterprise
min_rating ?Number 0-5
sort ?rating | newest | clicks (default: rating)
page ?Integer ≥ 1 (default: 1)
limit ?Integer 1-50 (default: 20)
curl "https://toolspotter.com/api/v1/tools?category=ai-writing&limit=5" \
  -H "Authorization: Bearer ts_live_your_key"
GET/api/v1/tools/:slugscope: tools

Fetch a single tool by slug.

curl "https://toolspotter.com/api/v1/tools/chatgpt" \
  -H "Authorization: Bearer ts_live_your_key"
GET/api/v1/tools/:slug/reviewsscope: reviews (Business)

Published user reviews for a tool. Business plan.

Query parameters
limit ?Integer 1-50 (default: 20)
curl "https://toolspotter.com/api/v1/tools/chatgpt/reviews" \
  -H "Authorization: Bearer ts_live_your_business_key"
GET/api/v1/tools/:slug/pricesscope: prices (Business)

Plan-level pricing snapshot. Business plan.

curl "https://toolspotter.com/api/v1/tools/chatgpt/prices" \
  -H "Authorization: Bearer ts_live_your_business_key"
GET/api/v1/categoriesscope: categories

All 26 categories with tool counts.

curl "https://toolspotter.com/api/v1/categories" \
  -H "Authorization: Bearer ts_live_your_key"
GET/api/v1/categories/:slugscope: categories

Single category + top tools.

Query parameters
limit ?Integer 1-50 (default: 20)
curl "https://toolspotter.com/api/v1/categories/ai-coding?limit=10" \
  -H "Authorization: Bearer ts_live_your_key"
GET/api/v1/searchscope: search

Full-text search. Free: up to 20 results. Paid: up to 50.

Query parameters
q *Query string (min 2 chars)
limit ?Integer (≤20 Free, ≤50 paid)
curl "https://toolspotter.com/api/v1/search?q=video+editor&limit=10" \
  -H "Authorization: Bearer ts_live_your_key"

Errors

All errors follow the same shape:

{
  "error": {
    "type": "rate_limit_exceeded",
    "message": "Quota exhausted for this window.",
    "code": 429
  }
}
TypeStatusMeaning
unauthorized401Missing or malformed Authorization header.
invalid_key401Key not recognised.
revoked_key401Key was revoked.
past_due402Subscription is past due. Update billing.
scope_not_allowed403Endpoint requires a higher plan.
attribution_violation403Attribution removed on Free plan.
rate_limit_exceeded429Quota exhausted. See Retry-After header.
bad_request400Invalid query parameters.
not_found404Resource does not exist.
server_error500Unexpected error — please retry.

Fields never exposed

These tool columns are ToolSpotter-internal and not returned on any plan:

  • affiliate_url, affiliate_id, commission_rate, affiliate_network
  • Scraper-internal fields (source_url, auto_blog_post_id, video_searched_at)

You get website_url(the vendor’s site) instead of the redirect URL.