Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: AgentDrives Support 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: Support
description: Questions, disputes and support cases
paths:
/api/support/ask:
post:
operationId: supportAsk
summary: Ask our support a question (prices, plans, levels, the method, your orders, the…
security:
- {}
- apiKey: []
- bearer: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
question:
type: string
maxLength: 2000
product:
type: string
description: The product's domain or directory slug it is about
on_behalf:
type: string
description: Whom you act for, kept on the case
required:
- question
responses:
'200':
description: An answer from our pages, or a case
content:
application/json:
schema:
$ref: '#/components/schemas/SupportAnswer'
example:
directory: …
answered: false
answer: …
match: 0
source:
id: a1b2c3d4
url: https://linear.app
facts:
- id: a1b2c3d4
text: …
url: https://linear.app
case_id: a1b2c3d4
case_token: …
account: {}
by: …
'400':
description: Error as problem details (RFC 9457) with a machine-readable `error` and a `fix` that says what to do next
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'
'429':
description: Error as problem details (RFC 9457) with a machine-readable `error` and a `fix` that says what to do next
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Support
/api/support/disputes:
post:
operationId: disputeResult
summary: Dispute your product's published result (a verified claim on its domain, else…
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
product:
type: string
description: Your product's domain or directory slug
checkpoint:
enum:
- docs
- signup
- verify
- credentials
- first_call
- first_action
- pay
- cancel
- delete
claim:
type: string
maxLength: 2000
evidence_url:
type: string
description: A public page that shows it (kept on the case, never fetched automatically)
required:
- product
- checkpoint
- claim
responses:
'201':
description: The case and the re-drive's state
content:
application/json:
schema:
$ref: '#/components/schemas/SupportCase'
example:
case_id: a1b2c3d4
class: …
state: open
next: …
redrive: {}
answer: …
answered_at: '2026-10-20T08:00:00Z'
by: …
'400':
description: 'invalid_json: the body isn''t valid JSON'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Error as problem details (RFC 9457) with a machine-readable `error` and a `fix` that says what to do next
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Error as problem details (RFC 9457) with a machine-readable `error` and a `fix` that says what to do next
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Error as problem details (RFC 9457) with a machine-readable `error` and a `fix` that says what to do next
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Error as problem details (RFC 9457) with a machine-readable `error` and a `fix` that says what to do next
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Support
security:
- apiKey: []
- bearer: []
/api/support/cases/{id}:
get:
operationId: caseStatus
summary: 'A support case: open, waiting (an answer is on its way), answered (with the…'
security:
- {}
- apiKey: []
- bearer: []
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: case_token
in: query
required: false
schema:
type: string
responses:
'200':
description: The case
content:
application/json:
schema:
$ref: '#/components/schemas/SupportCase'
example:
case_id: a1b2c3d4
class: …
state: open
next: …
redrive: {}
answer: …
answered_at: '2026-10-20T08:00:00Z'
by: …
'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'
'404':
description: Error as problem details (RFC 9457) with a machine-readable `error` and a `fix` that says what to do next
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:
- Support
components:
schemas:
SupportAnswer:
type: object
description: 'An answer from our support agent: quoted from our published pages (answered), or a case we answer in writing. answered only when one page covers the question clearly and is about what it asks (a product the question names is the page''s subject too); a question whose words fit many pages opens a case, and so does one about the directory''s data'
properties:
directory:
type: string
description: 'A question about the directory''s data (which products reach a level, in a category): the calls that answer it now, beside the case'
answered:
type: boolean
answer:
type: string
match:
type: number
minimum: 0
maximum: 1
description: 'answered: how much of the question the quoted page covers'
source:
type: object
description: 'answered: the quoted page''s id and URL'
properties:
id:
type: string
url:
type: string
facts:
type: array
items:
type: object
properties:
id:
type: string
text:
type: string
url:
type: string
case_id:
type: string
case_token:
type: string
description: 'Without a key: keep it to read the case'
account:
type: object
description: 'With a key: your own orders and claims'
by:
type: string
description: 'Who answers: AgentDrives support agent'
required:
- answered
- by
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
SupportCase:
type: object
properties:
case_id:
type: string
class:
type: string
state:
enum:
- open
- waiting
- answered
- closed
next:
type: string
redrive:
type:
- object
- 'null'
description: 'A dispute''s confirm re-drive: queued (state, queued_at) or why not'
answer:
type:
- string
- 'null'
description: The answer, once a person approved it
answered_at:
type:
- string
- 'null'
by:
type: string
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