Properties
| Name | Type | Description |
|---|---|---|
| id | string | The product's stable id: never reused, kept when its slug or address changes. Resolve it at /api/id/{id} |
| slug | string | The product's address in the directory (can change; id doesn't) |
| name | string | |
| domain | string | |
| icon | stringnull | The product's logo, a path on this site |
| category | string | The category id |
| category_name | string | |
| tested_at | string | The day of the drive behind the level |
| rules_version | stringnull | The rules version this level was judged under: its entry's anchor on /method/changelog (rules- |
| rules_url | stringnull | That rules version's entry: https://agentdrives.com/method/changelog# |
| url | string | The product's page here |
| json | string | Its full record: /api/tools/{slug}.json |
| draft | boolean | Not reviewed yet: the result may still change |
| origin | object | editorial: we picked the product; owner: its owner ordered the drive |
| disclosure | string | Only on a drive its owner paid for: the label to show with it |
| stale | boolean | Always false: a listing never goes stale for its age. Kept for older clients |
| level_selfhost | integernull | The level of the self-hosted edition, when it was driven (null: not driven) |
| summary | string | What an agent can do with it, in a sentence or two |
| first_blocker | string | The first thing that stops or slows an agent |
| coverage_source | object | computed: work done measured against the product's capability map; reported: counted by the driving agent |
| core | stringnull | Core features done of all, as done/total |
| pay | stringnull | How an agent can pay for it, as a grade from P0 (no self-serve purchase) up to P5 (an agent-native payment method sells the product); n/a: nothing to pay for |
| lets_agent | stringnull | A bot check that let our signed agent through (null: none seen) |
| mcp | stringnull | Whether it has an MCP server: its own, someone else's, only one that searches its docs (docs), or none; null when not checked |
| level | object | |
| level_name | string | |
| parts | object | |
| stages | array | |
| next | object | |
| outcomes | array | The five outcomes: find, access, use, pay, leave |
| access | array | How an agent gets in |
| minutes | numbernull | Minutes to the first call on the fastest way in; within a level, the order after work done |
| stop | stringnull | The first checkpoint the agent did not get past (null: through every one). Only a stop at the door (signup, verify, credentials, first_call) ends a drive; past it each checkpoint is tested on its own |
| coverage_core | integernull | Work done: the share of the core features done and read back, through documented routes (null: not measured) |
| entry | object | self-start: gets in on its own; setup: a person had to make the account; closed: can't get in on its own. self-start and the other two add up to every product: the other two are the products that stop |
| badges | array | agent-can-buy: an agent paid through an agent-native rail, checked by us; agent-can-leave: leaves on its own |
| pays_with | array | The agent-native ways to pay it offers, from our pay probe or the drive (x402, mpp, l402, stripe-projects, acp, ucp, ap2, mcp-payment) |
| paid | boolean | Our side made and proved a payment on one of them (the transaction is in the tool's pay_options.paid) |
| blocks_agent | stringnull | The bot check that stopped our signed agent on at least one way in, from sign-up to the first call (null: none did). With entry self-start it got in another way; otherwise the check stood in its way a |
| wall_type | object | What kind of bot check it was. network: It judged where our agent connected from and its browser, not a person. Our agent, working on its own from a data center, didn't get through; the owner can open |
| freshness | object | How old the listed drive is: fresh, aging from 90 days, redrive from 180. The level and the page stay as they are |
| newer_drives | objectnull | Finished drives after the listed one, not listed yet: how many and the newest's date. null: the listed drive is the newest |
| same_level_drives | integer | The latest drives in a row that gave this level |
| drives | integer | Every drive of the product so far |
| confirmation | objectnull | How far its drives back the level: every drive (drives), those that gave this level (agree), and state. A first L0 to L2 waits for a drive on another day that gives the same level, or a person's revie |
| robots | object | |
| rank | integernull | Its place in its category among the products our agent got into on its own (with the directory on: the directory's), by level, then the share of the core work done on its own path. From drive results |
| rank_of | integer | How many products of its category are ranked |
| rank_change | integernull | How many places it moved the last time its place changed: positive up, negative down, 0 none. null: new to the ranking, or not ranked |
| rank_since | stringnull | The day of that move, or the day it entered the ranking |
| ways_in | array | The ways in that got our agent in (route ids, e.g. api_signup, sso_github); empty on drives before the route table |
| issues_found | integer | How many issues the drive found: its agent blockers plus the issues in its agent surfaces, as the product page counts them. A count only: what they are and how to fix them go to the product's owner |
| agent_surfaces | object | Each way an agent works the product, as the product page's tiles show it, whether or not our agent got in: tested in the drive, documented by the product but not tested, none found, or unknown |
| docs_overall | stringnull | The docs pass's verdict (null: no docs pass on that drive) |
| ids | object | |
| copilot_connector | objectnull | The product in GitHub's list of Copilot connectors (GitHub-verified MCP servers), read on checked: the connector's name there, its MCP server URL, the list's URL and the day we read it. null when the |
| stripe_directory | objectnull | The product's profile in Stripe's agent directory (what an agent finds with stripe directory search), as we searched it on checked: the profile's name and handle, the routes the directory names, its U |
| in_stripe_directory | stringnull | The product's profile handle in Stripe Directory, the same as stripe_directory.profile. null when the directory has no profile of the product's |
| stripe_projects | objectnull | The product as a provider in the Stripe Projects catalog (an agent creates its account and gets credentials with `stripe projects add`), read on checked. free_tier: one of its available services is pr |
| pay_rails | array | Each agent-native payment rail (x402, mpp, l402, acp, ucp, ap2, mcp-payment) the drive saw on the product (drive true: its pay probe or a payment challenge) or a registry lists as the product's own en |
| wall_vendor | objectnull | The company whose bot check or sign-in our agent stopped at: the bot check that stopped it at the door, else, when it stopped at sign-up, the sign-in provider the drive's pages show. null when neither |
| fix_counts | objectnull | How many fixes the drive found, by size and in all. Counts only: the fixes themselves are in the Audit's report |
| evidence_sha256 | stringnull | The sha256 of the drive's record, which lists every evidence file of the drive with its own sha256: one hash for the drive's evidence. null for a drive from before records |
| first_seen | stringnull | The day we first drove the product: its first entry in history |
| correction | objectnull | The listing's correction status: disputed while a correction someone asked for waits for our answer (we reply by reply_by, 5 business days after it came in), else none. Every decision: GET /api/correc |
| license | objectnull | The licence of this record |
| scores | object | The measures behind the parts: coverage, reliability, resilience, setup (kept for compatibility, not a score), and when the Audit measured them surface_coverage, docs_accuracy, docs_completeness |
| unreachable_since | stringnull | The day the product's site has been unreachable since: two drives on separate days couldn't reach it and none has since. The level is from the drive before them. null: the site answers |
| not_driven_since | stringnull | The day of the last drive, when the product's owner asked us to stop driving it: we drive it no more and the listing keeps that drive. null: we still drive it |
| rules_date | string | The date of those rules, as pages name them ("Rules of ..."; now 2026-10-30). Every set of rules: /method/changelog |
| category_median | objectnull | Each part score's median in this product's category (holds_up, docs_match: {median, n}), only for a category with 5 or more driven products and a part 5 or more of them have; null otherwise |
| peers | objectnull | Each graded criterion of the standard (by its id) next to its peers, the products measured on it: with 20 or more in its category, its percentile there; with 10 to 19, its quartile there (1 the lowest |
| engine | objectnull | What made this drive on our end, so a level that moves with it can be told from one the product moved |
| history | array | The level per day, oldest first |
| terms | objectnull | The product's terms say automated sign-up isn't allowed: the clause word for word, where and when we read it, and the fix. A quoted finding only since the rules of 24 Oct 2026 (our agent signs up as a |
| email_gate | objectnull | Its sign-up refused our agent's own email address (invalid, disposable, not a work email, only Gmail or Outlook): the product's wall since the rules of 25 Oct 2026 (before, such a drive counted as our |
| works_assisted | objectnull | What the agent did once a person set up the account or cleared a step at the door, from the newest drive that measured it. Data only, not counted: no page shows it and it is never part of the level. n |
| nothing_to_pay | boolean | The product has nothing to pay for: L5 says so in its own words |
| routes | array | Every way in the product offers, tried agent-native first (since the rules of 12 Oct 2026; empty on older drives). A way not tried has its reason, ours, never the product's wall |
| checkout | objectnull | The walk to the last click: how far the checkout went (reached: last_click, card_form, plan_page, no) and what it showed (processor, captcha, three_ds, card_form, phone_field, wallets, rail_offer, pri |
| docs | objectnull | The docs read and judged by us before the drive: pages read and listed, sampled, and the verdict (overall: complete, gaps, thin, unreachable; getting_started, auth, errors, examples, freshness, newest |
| claims | objectnull | The claims ledger: each way the docs give to do the core work, tried once. claimed, tried, held, broken (documented but didn't work), not_tried, undocumented_works (worked but the docs don't describe |
| ladder | object | The nine checkpoints, each with status and note, in the order of the agent's eight steps (Discover → Docs → Sign up → Get a key → Do the work → Pay → Cancel → Leave; Discover: none: what an agent find |
| attempts | array | |
| pay_options | objectnull | The pay checkpoint: the ways to pay it offers an agent (our pay probe before the drive, without paying; or an older drive's record), the payment our agent made and we checked, and what the owner could |
| who_gets_in | objectnull | Who gets in, next to the level and never part of it. server: our agent from our server (in, edge: stopped before the sign-up page, captcha: a CAPTCHA on the form, form: turned away at the form, robots |
| after_wall | objectnull | After the wall: what the agent did on its own once a person cleared one step at the door (a bot check, a phone code, a refused sign-up), set up the account, or gave a card for a free trial that asks f |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/agentdrives-com/json-schema/agentdrives-com-tool-schema.json",
"title": "Tool",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/agentdrives-com-openapi.json#/components/schemas/Tool",
"allOf": [
{
"$ref": "#/$defs/ToolSummary"
},
{
"type": "object",
"properties": {
"ids": {
"$ref": "#/$defs/ToolIds"
},
"copilot_connector": {
"type": [
"object",
"null"
],
"description": "The product in GitHub's list of Copilot connectors (GitHub-verified MCP servers), read on checked: the connector's name there, its MCP server URL, the list's URL and the day we read it. null when the list didn't name the product that day",
"properties": {
"name": {
"type": "string"
},
"server": {
"type": "string",
"format": "uri"
},
"source": {
"type": "string",
"format": "uri"
},
"checked": {
"type": "string",
"format": "date"
}
}
},
"stripe_directory": {
"type": [
"object",
"null"
],
"description": "The product's profile in Stripe's agent directory (what an agent finds with stripe directory search), as we searched it on checked: the profile's name and handle, the routes the directory names, its URL and the day we searched it. null when the directory had no profile of the product's that day",
"properties": {
"name": {
"type": "string"
},
"profile": {
"type": "string",
"description": "The Stripe profile handle, without the @"
},
"routes": {
"type": "array",
"items": {
"enum": [
"projects",
"mpp",
"mcp",
"app",
"link"
]
},
"description": "projects: provisioned and billed through Stripe Projects; mpp: pay per call with the Machine Payments Protocol; mcp: an MCP server; app: a Stripe App; link: pays with Link"
},
"source": {
"type": "string",
"format": "uri"
},
"checked": {
"type": "string",
"format": "date"
}
}
},
"in_stripe_directory": {
"type": [
"string",
"null"
],
"description": "The product's profile handle in Stripe Directory, the same as stripe_directory.profile. null when the directory has no profile of the product's"
},
"stripe_projects": {
"type": [
"object",
"null"
],
"description": "The product as a provider in the Stripe Projects catalog (an agent creates its account and gets credentials with `stripe projects add`), read on checked. free_tier: one of its available services is priced free; free_tier and services are null when the catalog's services weren't read. null when the catalog doesn't list it",
"properties": {
"provider": {
"type": "string"
},
"free_tier": {
"type": [
"boolean",
"null"
]
},
"services": {
"type": [
"integer",
"null"
]
},
"source": {
"type": "string",
"format": "uri"
},
"checked": {
"type": "string",
"format": "date"
}
}
},
"pay_rails": {
"type": "array",
"description": "Each agent-native payment rail (x402, mpp, l402, acp, ucp, ap2, mcp-payment) the drive saw on the product (drive true: its pay probe or a payment challenge) or a registry lists as the product's own endpoint (listed: mpp.dev, read on checked). A listed rail is not a tested one",
"items": {
"type": "object",
"properties": {
"rail": {
"type": "string"
},
"drive": {
"type": "boolean"
},
"listed": {
"type": [
"object",
"null"
],
"properties": {
"registry": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
},
"source": {
"type": "string",
"format": "uri"
},
"checked": {
"type": "string",
"format": "date"
}
}
}
}
}
},
"wall_vendor": {
"type": [
"object",
"null"
],
"description": "The company whose bot check or sign-in our agent stopped at: the bot check that stopped it at the door, else, when it stopped at sign-up, the sign-in provider the drive's pages show. null when neither (the product's own form, a phone field)",
"properties": {
"vendor": {
"type": "string"
},
"id": {
"type": "string"
},
"kind": {
"enum": [
"bot check",
"sign-in"
]
},
"at": {
"type": [
"string",
"null"
],
"description": "The checkpoint"
}
}
},
"fix_counts": {
"type": [
"object",
"null"
],
"description": "How many fixes the drive found, by size and in all. Counts only: the fixes themselves are in the Audit's report",
"properties": {
"small": {
"type": "integer"
},
"medium": {
"type": "integer"
},
"large": {
"type": "integer"
},
"total": {
"type": "integer"
}
}
},
"evidence_sha256": {
"type": [
"string",
"null"
],
"description": "The sha256 of the drive's record, which lists every evidence file of the drive with its own sha256: one hash for the drive's evidence. null for a drive from before records"
},
"first_seen": {
"type": [
"string",
"null"
],
"format": "date",
"description": "The day we first drove the product: its first entry in history"
},
"correction": {
"type": [
"object",
"null"
],
"description": "The listing's correction status: disputed while a correction someone asked for waits for our answer (we reply by reply_by, 5 business days after it came in), else none. Every decision: GET /api/corrections",
"properties": {
"status": {
"enum": [
"disputed",
"none"
]
},
"open": {
"type": "integer"
},
"since": {
"type": [
"string",
"null"
],
"format": "date"
},
"reply_by": {
"type": [
"string",
"null"
],
"format": "date"
}
}
},
"license": {
"type": [
"object",
"null"
],
"description": "The licence of this record",
"properties": {
"name": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
}
},
"scores": {
"type": "object",
"description": "The measures behind the parts: coverage, reliability, resilience, setup (kept for compatibility, not a score), and when the Audit measured them surface_coverage, docs_accuracy, docs_completeness"
},
"unreachable_since": {
"type": [
"string",
"null"
],
"format": "date",
"description": "The day the product's site has been unreachable since: two drives on separate days couldn't reach it and none has since. The level is from the drive before them. null: the site answers"
},
"not_driven_since": {
"type": [
"string",
"null"
],
"format": "date",
"description": "The day of the last drive, when the product's owner asked us to stop driving it: we drive it no more and the listing keeps that drive. null: we still drive it"
},
"rules_date": {
"type": "string",
"format": "date",
"description": "The date of those rules, as pages name them (\"Rules of ...\"; now 2026-10-30). Every set of rules: /method/changelog"
},
"category_median": {
"type": [
"object",
"null"
],
"description": "Each part score's median in this product's category (holds_up, docs_match: {median, n}), only for a category with 5 or more driven products and a part 5 or more of them have; null otherwise",
"additionalProperties": {
"type": "object",
"properties": {
"median": {
"type": "integer"
},
"n": {
"type": "integer"
}
}
}
},
"peers": {
"type": [
"object",
"null"
],
"description": "Each graded criterion of the standard (by its id) next to its peers, the products measured on it: with 20 or more in its category, its percentile there; with 10 to 19, its quartile there (1 the lowest quarter, 4 the top); with 5 to 9, the comparison there without a rank; with fewer, the same among every measured product (basis all, from 10); below and above: how many of them scored lower and higher, the rest the same. Pass scores 2, partly 1, fail 0; the percentile is the share below it plus half the ties. null when it has none",
"additionalProperties": {
"type": "object",
"properties": {
"basis": {
"type": "string",
"enum": [
"category",
"all"
]
},
"n": {
"type": "integer"
},
"below": {
"type": "integer"
},
"above": {
"type": "integer"
},
"percentile": {
"type": "integer"
},
"quartile": {
"type": "integer"
}
}
}
},
"rules_version": {
"type": [
"string",
"null"
],
"description": "The rules version this level was judged under: its entry's anchor on /method/changelog (rules-<date>, with a number after it when a day had two sets)"
},
"rules_url": {
"type": [
"string",
"null"
],
"format": "uri",
"description": "That rules version's entry: https://agentdrives.com/method/changelog#<rules_version>"
},
"engine": {
"type": [
"object",
"null"
],
"description": "What made this drive on our end, so a level that moves with it can be told from one the product moved",
"properties": {
"model": {
"type": [
"string",
"null"
]
},
"driver": {
"type": [
"integer",
"null"
],
"description": "The driver's version"
},
"signed": {
"type": "boolean",
"description": "Every request signed (Web Bot Auth)"
},
"inbox": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "The domains of the test inboxes it used (an older pool's as \"older test domain\")"
},
"robots": {
"enum": [
"start",
"obey",
"skip",
"consent"
],
"description": "robots.txt on this drive: start (only the address driven), obey or skip (every page; account steps obey a rule for all user agents, or skip it), consent (the owner ordered the drive)"
},
"version": {
"type": [
"string",
"null"
],
"description": "The version of our drive engine that made this drive: the date (UTC, YYYY.MM.DD) of its last change. Two drives with the same version ran the same engine. null for a drive from before 25 Oct 2026"
},
"commit": {
"type": [
"string",
"null"
],
"description": "That change's commit in the AgentDrives repository"
},
"prompts": {
"type": "object",
"description": "The same for the drive's prompts",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"commit": {
"type": [
"string",
"null"
]
}
}
},
"rules": {
"type": "object",
"description": "The same for the engine's rules",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"commit": {
"type": [
"string",
"null"
]
}
}
}
}
},
"history": {
"type": "array",
"description": "The level per day, oldest first",
"items": {
"type": "object",
"properties": {
"run": {
"type": "string"
},
"date": {
"type": "string",
"format": "date"
},
"level": {
"$ref": "#/$defs/Level"
},
"why": {
"enum": [
"product",
"rules",
"noise",
"agent"
],
"description": "Why it moved from the entry before: product (a new drive gave another level), rules (a new set of rules moved it: rules_date), noise (the sign-up let our agent in on some drives and not others), agent (our agent changed between the two drives: another version of it)"
},
"rules_date": {
"type": "string",
"format": "date"
},
"engine": {
"type": "object",
"description": "What made that drive on our end, as engine"
},
"paid": {
"type": "boolean",
"description": "Whether someone paid for the drive behind this entry (an owner's order); a move by our rules is never paid. Payment never moves a level"
},
"agent_paid": {
"type": [
"object",
"null"
],
"description": "What our agent paid in that drive, checked by us (the transaction is in pay_options.paid); null when it paid nothing. Not an order: paid says that",
"properties": {
"amount": {
"type": [
"number",
"null"
]
},
"currency": {
"type": "string"
},
"rail": {
"type": [
"string",
"null"
]
},
"date": {
"type": [
"string",
"null"
],
"format": "date"
}
}
}
}
}
},
"terms": {
"type": [
"object",
"null"
],
"description": "The product's terms say automated sign-up isn't allowed: the clause word for word, where and when we read it, and the fix. A quoted finding only since the rules of 24 Oct 2026 (our agent signs up as anyone can and every way in counts; from 20 to 24 Oct no way that made an account counted). null for every other product",
"properties": {
"finding": {
"type": "string"
},
"quote": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
},
"document": {
"type": [
"string",
"null"
]
},
"section": {
"type": [
"string",
"null"
]
},
"terms_date": {
"type": [
"string",
"null"
],
"format": "date",
"description": "The date the page itself shows"
},
"checked": {
"type": [
"string",
"null"
],
"format": "date",
"description": "The day we read it"
},
"fix": {
"type": [
"string",
"null"
]
},
"work": {
"type": [
"string",
"null"
],
"enum": [
"not_counted",
"part",
null
],
"description": "not_counted: none of this drive's work counts; part: only the work done without an account counts"
}
}
},
"email_gate": {
"type": [
"object",
"null"
],
"description": "Its sign-up refused our agent's own email address (invalid, disposable, not a work email, only Gmail or Outlook): the product's wall since the rules of 25 Oct 2026 (before, such a drive counted as ours and wasn't published), with its message word for word and the fix. null for every other product",
"properties": {
"finding": {
"type": "string"
},
"said": {
"type": [
"string",
"null"
],
"description": "The product's message, word for word; null when the drive didn't quote it"
},
"step": {
"enum": [
"signup",
"verify"
]
},
"date": {
"type": "string",
"format": "date",
"description": "The drive's day"
},
"fix": {
"type": "string"
}
}
},
"works_assisted": {
"type": [
"object",
"null"
],
"description": "What the agent did once a person set up the account or cleared a step at the door, from the newest drive that measured it. Data only, not counted: no page shows it and it is never part of the level. null: not measured",
"properties": {
"core": {
"type": [
"string",
"null"
],
"description": "Core tasks done of all, as done/total"
},
"coverage_core": {
"type": "integer"
},
"via": {
"type": [
"string",
"null"
]
},
"run": {
"type": "string"
},
"date": {
"type": "string",
"format": "date"
}
}
},
"nothing_to_pay": {
"type": "boolean",
"description": "The product has nothing to pay for: L5 says so in its own words"
},
"routes": {
"type": "array",
"description": "Every way in the product offers, tried agent-native first (since the rules of 12 Oct 2026; empty on older drives). A way not tried has its reason, ours, never the product's wall",
"items": {
"type": "object",
"properties": {
"route": {
"type": "string"
},
"offered": {
"enum": [
"documented",
"seen",
"listed",
"no",
"unknown"
]
},
"tried": {
"type": "boolean"
},
"not_tried": {
"type": [
"string",
"null"
],
"enum": [
"no_kit",
"over_cap",
"policy",
"time",
"same_as",
"assisted_only",
"idp_blocked",
"sign_in_code",
"robots",
"terms",
"beyond",
null
],
"description": "terms: a drive from 20 to 24 Oct 2026 kept to the product's terms (see terms); beyond: the self-hosted edition needs more memory or privileges than our sandbox gives (the hosted edition is the drive); every other reason is ours"
},
"result": {
"type": [
"string",
"null"
],
"enum": [
"in",
"partial",
"walled",
"refused",
"broken",
"not_reached",
"not_counted",
null
],
"description": "not_counted: in only with our own Google or GitHub account, which drives no longer use, or (why: terms) with an account its terms allow only a person to make"
},
"why": {
"type": [
"string",
"null"
],
"enum": [
"terms",
null
],
"description": "Why a way that got in is not counted: terms (a drive from 20 to 24 Oct 2026, under the terms rule of those days)"
},
"wall": {
"type": [
"object",
"null"
],
"properties": {
"type": {
"type": [
"string",
"null"
]
},
"owner": {
"enum": [
"product",
"idp",
"platform",
"ours",
null
]
}
}
},
"person": {
"type": [
"string",
"null"
],
"enum": [
"none",
"once",
"each",
null
]
},
"brings": {
"type": [
"string",
"null"
]
},
"fresh": {
"type": [
"boolean",
"null"
]
},
"minutes": {
"type": [
"number",
"null"
]
},
"browser": {
"type": [
"boolean",
"null"
],
"description": "Whether this way in took a step in a browser (sign-up, the key, the first call), from the drive's own steps on it; null when none was recorded"
}
}
}
},
"checkout": {
"type": [
"object",
"null"
],
"description": "The walk to the last click: how far the checkout went (reached: last_click, card_form, plan_page, no) and what it showed (processor, captcha, three_ds, card_form, phone_field, wallets, rail_offer, price, currency, period, plan, last_button)"
},
"docs": {
"type": [
"object",
"null"
],
"description": "The docs read and judged by us before the drive: pages read and listed, sampled, and the verdict (overall: complete, gaps, thin, unreachable; getting_started, auth, errors, examples, freshness, newest, core_pages)"
},
"claims": {
"type": [
"object",
"null"
],
"description": "The claims ledger: each way the docs give to do the core work, tried once. claimed, tried, held, broken (documented but didn't work), not_tried, undocumented_works (worked but the docs don't describe it)",
"properties": {
"claimed": {
"type": "integer"
},
"tried": {
"type": "integer"
},
"held": {
"type": "integer"
},
"broken": {
"type": "integer"
},
"unclear": {
"type": "integer",
"description": "Ran, but the result wasn't read back"
},
"not_tried": {
"type": "integer"
},
"undocumented_works": {
"type": "integer"
}
}
},
"ladder": {
"type": "object",
"description": "The nine checkpoints, each with status and note, in the order of the agent's eight steps (Discover → Docs → Sign up → Get a key → Do the work → Pay → Cancel → Leave; Discover: none: what an agent finds on the domain; Docs: docs; Sign up: signup, verify; Get a key: credentials, first_call; Do the work: first_action; Pay: pay; Cancel: cancel; Leave: delete). pay: grade P0-P5 by how agentic paying is; from P3 up only with a payment our agent made and we checked (paid); a rail only seen has exercised false, its grade capped at P3 and the grade it would give in detected_grade"
},
"attempts": {
"type": "array",
"items": {
"type": "object"
}
},
"pay_options": {
"type": [
"object",
"null"
],
"description": "The pay checkpoint: the ways to pay it offers an agent (our pay probe before the drive, without paying; or an older drive's record), the payment our agent made and we checked, and what the owner could add so an agent pays on its own",
"properties": {
"checked": {
"type": "string",
"format": "date"
},
"source": {
"enum": [
"probe",
"drive"
]
},
"options": {
"type": "array",
"description": "Agent ways first",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"enum": [
"agent-rail",
"agent-checkout",
"mcp-tool",
"billing",
"checkout"
]
},
"first_party": {
"type": "boolean",
"description": "Answered on the vendor's own domain (or Stripe's own catalog)"
},
"lead": {
"type": "boolean",
"description": "Only a listing or a word in the docs, no answer from the vendor's own side"
},
"networks": {
"type": "array",
"items": {
"type": "string"
}
},
"testnet": {
"type": "boolean"
}
}
}
},
"agentic": {
"type": "array",
"items": {
"type": "string"
}
},
"paid": {
"type": [
"object",
"null"
],
"description": "The payment our agent made and we checked: a wallet transaction confirmed on chain (the trial card, a person's help, is never the agent paying)",
"properties": {
"rail": {
"type": "string"
},
"network": {
"type": [
"string",
"null"
]
},
"testnet": {
"type": "boolean"
},
"tx": {
"type": [
"string",
"null"
]
},
"amount": {
"type": [
"number",
"string",
"null"
]
},
"currency": {
"type": "string"
},
"at": {
"type": [
"string",
"null"
]
}
}
},
"exercised": {
"type": [
"boolean",
"null"
]
},
"detected_grade": {
"type": [
"string",
"null"
]
},
"trial": {
"type": "object",
"properties": {
"no_card": {
"type": [
"boolean",
"null"
]
},
"card_required": {
"type": [
"boolean",
"null"
]
},
"free_plan": {
"type": [
"boolean",
"null"
]
}
}
},
"owner_fixes": {
"type": "array",
"items": {
"typ
# --- truncated at 32 KB (77 KB total) ---
# Full source: https://artifacts.apis.io/agentdrives-com/json-schema/agentdrives-com-tool-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/agentdrives-com-tool"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.