Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: AgentDrives Follows API
version: 5.20.1
license:
name: CC BY 4.0 for the listings and the facts
url: https://agentdrives.com/data/licence
x-changelog: https://agentdrives.com/data/api-changelog.json
description: 'Getting started, the calls in order: https://agentdrives.com/getting-started. What changed, dated, with removed routes and retired products: https://agentdrives.com/data/api-changelog. Each key has an hourly limit (1,000 requests; an agent''s own unclaimed account''s key: 600), an hour from the key''s first call. Every answer to a keyed call carries RateLimit-Policy ("per-key";q=;w=3600) and RateLimit ("per-key";r=;t=). Over it, every call answers 429 rate_limited with Retry-After (seconds) and a body with limit, window_s, retry_after_s and resets_at: the key is fine, wait and retry. 401 means the key itself is unknown, revoked or expired. Everything a person can do on AgentDrives, an agent can do over HTTP, with no browser and no CAPTCHA. An agent with no address of its own signs up in one call (POST /api/agents/signup: an account and a key at once, and a claim link for its person; until a person claims it or it pays for an Audit, 1 free check a day and an Audit it pays over HTTP 402). Or sign in with an emailed 6-digit code, create an API key, claim your product''s domain, prove it is yours, order drives, cancel, and delete your account. Order of steps: claim (POST /api/claims; an account email on the domain verifies at once, unless the domain is a mailbox provider''s), verify (a code mailed to an address at the domain, a DNS TXT record, a meta tag on the home page or a file), then order. The free check needs no claim (product free: private, it lists nothing); a product whose claim is verified gets one queued. Every other order without a verified claim fails with 403 claim_not_verified and the fix. Only driven products are in the directory. Errors carry a `fix` field. API keys: 1,000 requests per hour each. When online payment is on, an order returns payment.url to pay at; otherwise payment is null and the order is confirmed by email. An Audit, a Tool comparison and a data plan also return payment.agent: pay it without a person over HTTP 402 at POST /api/orders/{id}/payment, with MPP or x402: a card through a Stripe Shared Payment Token, or USDC on Base or Tempo. Every payment has a receipt, and a business that sends its details gets our invoice.'
contact:
email: hello@agentdrives.com
x-guidance: 'Find software an AI agent can use on its own: POST /api/paid/find-tools with {"task": "send an invoice"} answers with ranked products, each with its agent level (0 to 5), whether an agent gets in without a person, and what our agent got done in a real drive. $0.01 a call over x402 or MPP (USDC on Base or Tempo): the first request answers 402 with the challenges. For many calls, buy credit once: POST /api/credits/topup with {"amount_usd": 5} returns an API key that holds 500 calls; send it as x-api-key. The same search is free, rate-limited per IP, at GET /api/find-tools?task=…. To have a product of your own audited: POST /api/agents/signup for a key, claim and prove its domain (POST /api/claims), POST /api/orders with product audit, then pay $499 at POST /api/orders/{id}/payment. A data plan or a Tool comparison needs no domain: POST /api/orders with product builder ($49 a month) or stack3 ($490, with urls and use_case), then pay it the same way.'
servers:
- url: https://agentdrives.com
security:
- apiKey: []
- bearer: []
tags:
- name: Follows
description: 'Hear when a tool''s level changes: follows and the webhook'
paths:
/api/follows:
get:
operationId: listFollows
summary: 'The tools you follow, your plan and its limit (free: 3 tools; Builder and Team…'
responses:
'200':
description: Your follows
content:
application/json:
schema:
type: object
properties:
plan:
enum:
- free
- builder
- team
limit:
type:
- integer
- 'null'
webhook_url:
type:
- string
- 'null'
follows:
type: array
items:
type: object
properties:
tool:
type: string
since:
type: string
format: date-time
example:
plan: free
limit: 3
webhook_url: https://linear.app
follows:
- tool: linear
since: '2026-10-20T08:00:00Z'
'401':
description: 'unauthorized: no key or session sent; invalid_or_limited_credentials: the key is unknown, revoked or expired, sent as Bearer (a key goes in x-api-key), or its account is blocked. The fix says which'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'rate_limited: the key is over its hourly limit (limit, window_s, retry_after_s, resets_at); the key is fine, wait and retry'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
headers:
Retry-After:
schema:
type: integer
description: Seconds to wait
tags:
- Follows
security:
- apiKey: []
- bearer: []
post:
operationId: followTool
summary: 'Follow a tool by its slug: you hear by mail when its level changes (Builder and…'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
tool:
type: string
description: The tool's slug, e.g. linear
required:
- tool
responses:
'201':
description: Following
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
tool:
type: string
plan:
type: string
limit:
type:
- integer
- 'null'
following:
type: integer
description: How many you follow now
example:
ok: false
tool: linear
plan: free
limit: 3
following: 3
'400':
description: unknown_tool
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: 'unauthorized: no key or session sent; invalid_or_limited_credentials: the key is unknown, revoked or expired, sent as Bearer (a key goes in x-api-key), or its account is blocked. The fix says which'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: limit
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'rate_limited: the key is over its hourly limit (limit, window_s, retry_after_s, resets_at); the key is fine, wait and retry'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
headers:
Retry-After:
schema:
type: integer
description: Seconds to wait
tags:
- Follows
security:
- apiKey: []
- bearer: []
/api/follows/{tool}:
delete:
operationId: unfollowTool
summary: 'Stop following a tool (MCP: unfollow_tool)'
parameters:
- name: tool
in: path
required: true
schema:
type: string
responses:
'200':
description: Stopped
'401':
description: 'unauthorized: no key or session sent; invalid_or_limited_credentials: the key is unknown, revoked or expired, sent as Bearer (a key goes in x-api-key), or its account is blocked. The fix says which'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'rate_limited: the key is over its hourly limit (limit, window_s, retry_after_s, resets_at); the key is fine, wait and retry'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
headers:
Retry-After:
schema:
type: integer
description: Seconds to wait
tags:
- Follows
security:
- apiKey: []
- bearer: []
/api/follows/webhook:
put:
operationId: setFollowWebhook
summary: 'Builder and Team: set (url) or clear (null) the webhook for level changes; the…'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
url:
type:
- string
- 'null'
format: uri
required: []
responses:
'200':
description: Set
'400':
description: invalid_url
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: 'unauthorized: no key or session sent; invalid_or_limited_credentials: the key is unknown, revoked or expired, sent as Bearer (a key goes in x-api-key), or its account is blocked. The fix says which'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: plan
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'rate_limited: the key is over its hourly limit (limit, window_s, retry_after_s, resets_at); the key is fine, wait and retry'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
headers:
Retry-After:
schema:
type: integer
description: Seconds to wait
tags:
- Follows
security:
- apiKey: []
- bearer: []
components:
schemas:
Error:
type: object
description: 'RFC 9457 problem details (application/problem+json) with two extension members: error, machine-readable, and fix, what to do next (the same text as detail). A body sent as JSON that isn''t JSON answers 400 invalid_json on every route'
properties:
type:
type: string
format: uri
description: https://agentdrives.com/openapi.json#<error>
title:
type: string
status:
type: integer
detail:
type: string
error:
type: string
fix:
type: string
description: 'What to do next: every error has one'
required:
- error
- fix
securitySchemes:
apiKey:
type: apiKey
in: header
name: x-api-key
description: 'Each key has an hourly limit (1,000 requests; an agent''s own unclaimed account''s key: 600), an hour from the key''s first call. Every answer to a keyed call carries RateLimit-Policy ("per-key";q=<limit>;w=3600) and RateLimit ("per-key";r=<left>;t=<seconds until the hour ends>). Over it, every call answers 429 rate_limited with Retry-After (seconds) and a body with limit, window_s, retry_after_s and resets_at: the key is fine, wait and retry. 401 means the key itself is unknown, revoked or expired.'
bearer:
type: http
scheme: bearer
x-service-info:
categories:
- developer-tools
- data
docs:
homepage: https://agentdrives.com/data
apiReference: https://agentdrives.com/openapi.json
llms: https://agentdrives.com/llms.txt