agentdrives-com · Schema

Tool

Artificial IntelligenceAgentsLabSoftwareTestingData

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-, with a number after it when a day had two sets)
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
View JSON Schema on GitHub

JSON Schema

agentdrives-com-tool-schema.json Raw ↑
{
  "$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.
All 92 tools →

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.