Machine Learning — entry 017 of 24

Not Human Search

Verified Sep 2026

Not Human Search indexes websites and MCP servers by "agentic readiness" — how easily an AI agent can interact with a site via APIs, machine-readable docs, or MCP — exposing search, per-domain reports, and a live /check crawl that returns a 7-signal readiness score. It ships a public OpenAPI spec and an llms.txt file at its API root, with anonymous access to basic queries capped at a free 10-checks-per-hour rate limit, and Stripe-billed starter/pro/scale plans for higher-volume access or commerce endpoints like score monitoring and GEO score-fix services.

ai-discoverymcpopenapiagent-readinesssearch
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreemiumA usable free tier exists, with paid plans for more volume.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score91out of 100
Authentication25/25No authentication required
Pricing17/20Freemium tier available
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 91 on greatapis.com
<a href="https://greatapis.com/api/not-human-search/"><img src="https://greatapis.com/badge/not-human-search.svg" alt="Scored 91 on greatapis.com"></a>

Auth quickstart

  1. No key needed — call it now.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Servers
https://nothumansearch.ai/api/v1
Auth
SessionCookieProviderKey
/1
GET/API index — list of endpoints and base URLs
Responses
StatusDescriptionSchema
200API index document
action-interests1
POST/action-interestsRecord caller-attested principal interest in one controlled next step
Request body

application/jsonActionInterestRequest (required)

Responses
StatusDescriptionSchema
200Exact idempotent replay of the existing receiptActionInterestResponse
201New provider-independent action-interest receiptActionInterestResponse
403Cross-origin browser mutation rejected; native agents without browser-origin headers remain supported
404Missing
409This search result already recorded a different controlled action
429Temporary free abuse limit exceeded
action-receipts1
POST/action-receipts/verifyVerify immutable NHS signature separately from freshness and current accounting state
Request body

application/json (required)

Responses
StatusDescriptionSchema
200Signature validity, time-window status, and current online commercial state when available
action-tickets2
POST/action-ticketsPrepare an authorization-attested action for a disclosed paid offer
Request body

application/jsonActionTicketRequest (required)

Responses
StatusDescriptionSchema
200Exact replay with the attribution bearer reconstructed from the persisted ticket snapshotActionTicketPreparationResponse
201New ticket, raw attribution bearer, and POST handoff endpoint; no provider action URL and no chargeActionTicketPreparationResponse
400Invalid JSON
404Exact public offer or returned-offer evidence unavailable; intentionally indistinguishable
409Provider claim
410Exact replay refers to an expired ticket authorization
429Temporary action-ticket safety limit exceeded
503Signed provider actions are not configured
POST/action-tickets/handoffRecord an NHS-observed handoff and reveal the provider action URL
Request body

application/jsonActionTicketHandoffRequest (required)

Responses
StatusDescriptionSchema
200Exact replay of the existing durable handoff receipt and provider URL; neither party chargedActionTicketHandoffResponse
201New durable observed-handoff receipt and attributed provider URL; neither party chargedActionTicketHandoffResponse
400Invalid JSON
404Ticket or exact bearer not found
409Verified commercial evidence unavailable
410Ticket attribution expired; neither party charged
429Temporary handoff safety limit exceeded
api-keys2
GET/api-keys/subscribeList the optional priority-throughput API key plan and checkout contract
Responses
StatusDescriptionSchema
200Priority throughput only; baseline discovery and organic results remain free
POST/api-keys/subscribeCreate a Stripe Checkout session for a paid API key subscription
Request body

application/json (required)

Responses
StatusDescriptionSchema
200Stripe Checkout URL and activation URL
503Stripe is not configured
catalog1
GET/catalogAgent-readable commerce catalog
Responses
StatusDescriptionSchema
200Catalog for score-fix service and API subscription plans
categories1
GET/categoriesGet all category buckets and their counts
Responses
StatusDescriptionSchema
200Category counts across the index
check1
POST/checkOn-demand agentic readiness check (live crawl)
Request body

application/json

Responses
StatusDescriptionSchema
200Score + 7 signals
429Rate limit exceeded
checkout1
POST/checkoutCreate a Stripe Checkout URL for a GEO uplift order
Request body

application/json (required)

Responses
StatusDescriptionSchema
201Stripe Checkout URL
501Requested payment mode is not supported
monitor1
POST/monitor/registerRegister an email to monitor a site's agentic readiness score
Request body

application/json (required)

Responses
StatusDescriptionSchema
201Monitor registered
400Invalid email or domain
429Too many monitors for this email
provider17
POST/provider/action-tickets/resolveResolve separately consented controlled intent after an observed handoff
Request body

application/jsonProviderControlledIntentResolveRequest (required)

Responses
StatusDescriptionSchema
200Exact separately consented controlled-intent bundle; no charge or proof createdProviderControlledIntentResolution
400Malformed
401Valid active claim-scoped provider key required
404Consented controlled intent unavailable; wrong claim
410Correctly signed attribution bearer expired
429Temporary provider resolver safety limit exceeded
503Provider exchange
GET/provider/claimsList provider claims and DNS ownership-check status for the signed-in account
Responses
StatusDescriptionSchema
200Provider claims with safe ownership-freshness status
401Human account session required
POST/provider/claimsBegin an indexed-domain provider claim
Request body

application/json (required)

Responses
StatusDescriptionSchema
201Claim, one-time DNS TXT challenge, and ownership-freshness contractProviderClaimChallengeResponse
401Human account session required
409Domain is already claimed or the account already has a claim
POST/provider/claims/{claim_id}/challengeRotate a pending claim's DNS challenge
Parameters
NameInRequiredType
claim_idpathyesstring
Responses
StatusDescriptionSchema
200Rotated one-time DNS TXT challenge and ownership-freshness contractProviderClaimChallengeResponse
POST/provider/claims/{claim_id}/keys/rotateRotate the claim-scoped provider callback key
Parameters
NameInRequiredType
claim_idpathyesstring
Responses
StatusDescriptionSchema
200New provider key returned once; prior keys revoked
POST/provider/claims/{claim_id}/revokeRevoke a provider claim, keys, offers, and outstanding action authorization
Parameters
NameInRequiredType
claim_idpathyesstring
Responses
StatusDescriptionSchema
200Claim revoked
POST/provider/claims/{claim_id}/verifyVerify the claim's DNS TXT challenge and return the callback key once
Parameters
NameInRequiredType
claim_idpathyesstring
Responses
StatusDescriptionSchema
200Verified claim, current ownership freshness, and a newly issued provider key returned once when applicableProviderClaimVerifyResponse
409DNS challenge missing
POST/provider/commercial-acceptancesRecord one provider-authenticated commercial acceptance
Parameters
NameInRequiredType
Idempotency-Keyheaderyesstring
Request body

application/jsonProviderCommercialAcceptanceRequest (required)

Responses
StatusDescriptionSchema
200Exact idempotent replay of the existing provider-authenticated acceptanceProviderCommercialAcceptanceResponse
201New provider-authenticated acceptance; owner verification is still required and commercial proof is falseProviderCommercialAcceptanceResponse
400Invalid header
401Valid active claim-scoped provider key required
409Stale claim
GET/provider/demandRead privacy-thresholded demand for the authenticated claim domain
Parameters
NameInRequiredType
daysquerynointeger
Responses
StatusDescriptionSchema
200Privacy-thresholded aggregate demand for the authenticated claim domainProviderDemandResponse
400Invalid days
401Valid active claim-scoped provider key required
404Authenticated claim is no longer verified and fresh
429Temporary provider read safety limit exceeded
500Provider demand query failed
503Provider key authentication unavailable
GET/provider/offersList offers owned by the signed-in provider account
Parameters
NameInRequiredType
claim_idquerynostring
Responses
StatusDescriptionSchema
200Provider offers and commercial states
POST/provider/offersCreate a draft provider-funded action offer
Request body

application/json (required)

Responses
StatusDescriptionSchema
201Draft offer created
409Offer inventory limit reached
GET/provider/offers/{offer_id}Get one offer owned by the signed-in provider account
Parameters
NameInRequiredType
offer_idpathyesstring
Responses
StatusDescriptionSchema
200Provider offer
PUT/provider/offers/{offer_id}Update an owned draft offer
Parameters
NameInRequiredType
offer_idpathyesstring
Request body

application/jsonProviderOfferRequest (required)

Responses
StatusDescriptionSchema
200Updated offer
POST/provider/offers/{offer_id}/pausePause an owned offer
Parameters
NameInRequiredType
offer_idpathyesstring
Responses
StatusDescriptionSchema
200Offer paused
POST/provider/outcomesRecord an idempotent provider-reported action outcome
Parameters
NameInRequiredType
Idempotency-Keyheaderyesstring
Request body

application/json (required)

Responses
StatusDescriptionSchema
200Exact idempotent replay
201New signed provider-outcome receipt
401Valid claim-scoped provider key required
409Invalid transition
GET/provider/pilot-statusRead claim-scoped pilot continuity status
Parameters
NameInRequiredType
limitquerynointeger
Responses
StatusDescriptionSchema
200Current status for the authenticated provider claimProviderPilotStatusResponse
400Invalid limit
401Valid active claim-scoped provider key required
404Authenticated claim is no longer verified and fresh
429Temporary provider read safety limit exceeded
500Provider pilot status query failed
503Provider key authentication unavailable
GET/provider/receipts/{receipt_id}Retrieve one receipt owned by the authenticated provider
Parameters
NameInRequiredType
receipt_idpathyesstring
Responses
StatusDescriptionSchema
200Signed provider receipt
401Valid claim-scoped provider key required
404Receipt not found for this provider
quote1
POST/quoteCreate a deterministic quote
Request body

application/json

Responses
StatusDescriptionSchema
200Quote with amount, total, currency, and required checkout metadata
search1
GET/searchSearch for agent-ready sites
Parameters
NameInRequiredType
qquerynostring
categoryquerynostring
tagquerynostring
min_scorequerynointeger
has_apiquerynoboolean
has_mcpquerynoboolean
has_openapiquerynoboolean
has_llms_txtquerynoboolean
pagequerynointeger
Responses
StatusDescriptionSchema
200Search results
429Temporary search safety limit exceeded; free access resumes after the reset
site1
GET/site/{domain}Get detailed agentic readiness report for a site
Parameters
NameInRequiredType
domainpathyesstring
search_idquerynostring
Responses
StatusDescriptionSchema
200Site details, plus a noncommercial action-interest opportunity only after an exact new receipt-bound selectionSelectedSiteDetail
stats1
GET/statsGet index statistics
Responses
StatusDescriptionSchema
200Index stats
submit1
POST/submitSubmit a site for crawling
Request body

application/json

Responses
StatusDescriptionSchema
201Submitted for crawling
top1
GET/topTop-scored agent-ready sites
Parameters
NameInRequiredType
categoryquerynostring
has_mcpquerynoboolean
has_openapiquerynoboolean
has_llms_txtquerynoboolean
has_apiquerynoboolean
limitquerynointeger
Responses
StatusDescriptionSchema
200Top sites
verify-mcp1
GET/verify-mcpLive-probe a URL for MCP compliance
Parameters
NameInRequiredType
urlqueryyesstring
Responses
StatusDescriptionSchema
200Probe result
400url query param missing
429Temporary live-probe safety limit exceeded; free access resumes after the reset

Try it

Developer reference

Base URLhttps://nothumansearch.ai/api/v1
Key endpoints
  • GET/search
  • GET/top
  • GET/stats
  • GET/categories

Availability

Uptime100%
Median latency161 ms
Last checkUp · 200 · Sep 2026

3 checks since Sep 2026. A person runs this check by hand, not an automated monitor.

Changelog

Spec version1.1.0
Tracked paths32
  • Sep 2026gained an OpenAPI spec

Tracking since Sep 2026. See every tracked change ↗ ·Subscribe with RSS ↗