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/json — ActionInterestRequest (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/json — ActionTicketRequest (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/json — ActionTicketHandoffRequest (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/json — ProviderControlledIntentResolveRequest (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/json — ProviderCommercialAcceptanceRequest (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/json — ProviderOfferRequest (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 latency170.5 ms
Last checkUp · 200 · Sep 2026

16 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 ↗