letagentsin-com Scan API

The Scan API from letagentsin-com — 2 operation(s) for scan.

Operations 2

POST /api/scan Scan a domain #
POST /api/scan/stream Scan a domain with progress events #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/letagentsin-com:letagentsin-com-scan-api"
All apis
curl "https://apis.io/api/v1/apis?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.

OpenAPI Specification

letagentsin-com-scan-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Let Agents In Scan API
  version: 1.0.0
  description: Scores a domain on agent readiness across 5 funnel stages, using 16 deterministic HTTP checks. 18 points exist on paper; the score is out of `measurable`, the points that both applied and could be evaluated. No account, no key.
  contact:
    email: hello@letagentsin.com
    url: https://letagentsin.com/methodology
servers:
- url: https://letagentsin.com
tags:
- name: Scan
paths:
  /api/scan:
    post:
      summary: Scan a domain
      operationId: scanDomain
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - domain
              properties:
                domain:
                  type: string
                  example: example.com
                format:
                  type: string
                  enum:
                  - json
                  - sarif
                  - agent
                  default: json
                  description: json is the scorecard. sarif is SARIF 2.1.0 with one rule per check. agent is markdown written to be acted on, with one task per failing check. Also accepted as ?format= on the query string.
      responses:
        '200':
          description: Scorecard
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  domain:
                    type: string
                  scorecard:
                    type: object
                    properties:
                      formulaVersion:
                        type: string
                      total:
                        type: integer
                      max:
                        type: integer
                        description: The paper maximum, the same for every domain
                      measurable:
                        type: integer
                        description: 'The denominator: points that applied and could be evaluated on this domain'
                      stages:
                        type: array
                        description: The same score split by funnel stage, in the order an agent meets them
                        items:
                          type: object
                          properties:
                            stage:
                              type: string
                              enum:
                              - discovery
                              - entry
                              - signup
                              - provisioning
                              - integration
                            letter:
                              type: string
                              description: A to E, the order an agent meets the stages in
                            title:
                              type: string
                            question:
                              type: string
                              description: What the stage asks, in the words the site uses
                            points:
                              type: integer
                            max:
                              type: integer
                              description: The stage paper maximum, so the column can sum to more than the scorecard measurable
                            measurable:
                              type: integer
                              description: The stage denominator, after what did not apply and what we could not read
                      checks:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              enum:
                              - answers_plain_request
                              - price_in_snippet
                              - llms_txt
                              - docs_without_js
                              - user_agents_allowed
                              - robots_paths_resolve
                              - no_crawl_delay
                              - agent_entry_point
                              - oauth_dcr
                              - mcp_present
                              - signup_no_captcha
                              - signup_reachable
                              - programmatic_provisioning
                              - self_serve
                              - typed_package
                              - machine_readable_api
                            why:
                              type: string
                              description: What this costs a vendor, in the words the report uses
                            points:
                              type: integer
                            max:
                              type: integer
                            detail:
                              type: string
                            notApplicable:
                              type: boolean
                              description: The check does not apply to a product of this kind, so it is out of the score and out of measurable
                            inconclusive:
                              type: boolean
                              description: Zero because we could not measure it, not because it is absent
                            label:
                              type: string
                            stage:
                              type: string
                              enum:
                              - discovery
                              - entry
                              - signup
                              - provisioning
                              - integration
                            unblock:
                              type: string
                              description: What to change, or for an unmeasured check what would make it measurable
                  reused:
                    type: boolean
                    description: The domain was scanned in the last few minutes and the stored result was returned rather than a new one
                  saved:
                    type: boolean
                    description: False when the measurement finished but the store would not accept it. The scorecard is complete and /r/{id} will stop resolving at the next deploy
                  warning:
                    type: string
                    description: 'Present with saved: false, in the words the page uses'
                  challengedAt:
                    type: object
                    description: 'Present when the vendor''s own edge answered a request with a browser challenge rather than a rate limit. It costs no points: the checks that could not be read are unmeasurable rather than failed. A rate limit anywhere else, ours or the registry''s, never appears here'
                    properties:
                      hosts:
                        type: array
                        items:
                          type: string
                      challenged:
                        type: integer
                        description: How many of the refusals carried a challenge marker
                      refused:
                        type: integer
                        description: How many requests those hosts refused in total, challenged or not
                  truncation:
                    type: object
                    description: Present when the scan ran out of its time budget. The checks it names were never asked, so a partial scan must not be read as a full one
                    properties:
                      incompletePhases:
                        type: array
                        items:
                          type: string
                      unmeasuredChecks:
                        type: array
                        items:
                          type: string
                          enum:
                          - answers_plain_request
                          - price_in_snippet
                          - llms_txt
                          - docs_without_js
                          - user_agents_allowed
                          - robots_paths_resolve
                          - no_crawl_delay
                          - agent_entry_point
                          - oauth_dcr
                          - mcp_present
                          - signup_no_captcha
                          - signup_reachable
                          - programmatic_provisioning
                          - self_serve
                          - typed_package
                          - machine_readable_api
                      detail:
                        type: string
            application/sarif+json:
              schema:
                type: object
                description: 'SARIF 2.1.0, returned for format: sarif. runs[0].results holds only the checks that failed; what passed, what was not measurable and what did not apply are counted in runs[0].properties'
                externalDocs:
                  url: https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html
            text/markdown:
              schema:
                type: string
                description: 'Returned for format: agent. One task per failing check, each carrying the measurement behind it. Not JSON: do not parse it'
        '400':
          description: Not a domain, or a format outside the enum
        '422':
          description: Domain refused or unreachable
        '429':
          description: 'Rate limit reached: 5 per hour per registrable domain, 30 per hour per address'
        '500':
          description: The scan itself failed. Retrying does not help on its own; the address in the body is where to tell us.
        '503':
          description: 'The scan did not finish inside the gateway timeout. /api/scan/stream reports progress and does not go silent. A store that will not accept the write is NOT this: that answers 200 with saved: false, because the measurement is finished and it is yours either way.'
      tags:
      - Scan
  /api/scan/stream:
    post:
      summary: Scan a domain with progress events
      operationId: scanDomainStreaming
      responses:
        '200':
          description: text/event-stream carrying step, done and failed events
      tags:
      - Scan