◎ intentmatch.
API · v1

Agent Intent Match API

Agent Intent Match finds existing, public buyer intent for what a seller offers: current requests, RFPs/RFQs, public tenders and forum posts in which someone asks for the seller’s product, service, API or capability. Every returned signal has a verbatim quote, source URL and freshness data. It discovers demand only; it never contacts buyers.

Machine-readable: /openapi.json · /llms.txt · /.well-known/agent-intent-match.json

Quick start

  1. POST https://agentintentmatch.online/api/v1/matches with a JSON body and a random Idempotency-Key header (16–128 of A–Z a–z 0–9 _ -). Keep the key secret: it is also your result access key.
  2. The response is 402 with an x402 v2 requirement (PAYMENT-REQUIRED header and body): 0.35 USDC, exact scheme, network eip155:8453.
  3. Sign it with your wallet/x402 client and resend the identical body with the same key and PAYMENT-SIGNATURE. The search runs inside the request (typically 30–120 s) and returns 200 with the report.
  4. Later: GET https://agentintentmatch.online/api/v1/matches/{id} with Authorization: Bearer <Idempotency-Key>.
curl -i https://agentintentmatch.online/api/v1/matches \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: 4f1c0c7e9d2a4b0c8e7f6a5b4c3d2e1f' \
  -d @offer.json

Request

Give a url, or a description (8+ characters), capabilities or jobs_to_be_done — or several. All text may be in any language and script.

{
  "name": "Vendor Finder",
  "url": "https://vendorfinder.online/",
  "description": "Find and verify suppliers for a specified product and market",
  "capabilities": ["Find suppliers for a product and market", "Verify supplier evidence"],
  "price": { "amount": 0.46, "currency": "USDC", "unit": "request" },
  "service_area": { "regions": ["worldwide"], "remote": true },
  "languages": ["en", "ja", "de"],
  "geography": "Poland",
  "freshness": "30d",
  "min_match": "possible",
  "max_results": 10,
  "preferred_output_language": "en"
}
name, url, descriptionYour offering. A URL-only request whose page cannot be read is refused before settlement (not charged).
capabilities, jobs_to_be_done, use_casesUp to 20 each.
price, service_area, languages, constraintsUsed to judge fit and conflicts (e.g. a buyer outside your service area).
excludeOrganizations, domains or terms to leave out.
geography, industry, buyer_typeTarget buyers. Geography is never inferred from language.
freshness24h | 7d | 30d | 90d | 365d (default 30d).
min_matchstrong | possible | weak (default possible).
require_known_dateDrop signals without a machine-readable date (default false).
include_ambiguousAlso return AMBIGUOUS signals (default false).
source_typesAny of web, procurement, forum (default all).
search_languagesUp to 4 BCP 47 tags to search in, in addition to planner choices.
max_results1–20 (default 10).
preferred_output_languageLanguage for explanations; quotes stay original.
max_price_usdcRefuse before payment if the price is higher (422).

Response

{
  "request_id": "…",
  "seller": { "name": "Vendor Finder", "summary": "…", "capabilities": ["…"] },
  "searched_at": "2026-09-29T10:00:00.000Z",
  "matches": [{
    "rank": 1,
    "intent": {
      "state": "CONFIRMED_INTENT",
      "original_text": "We need someone to identify three manufacturers of …",
      "original_language": "en",
      "translation": null,
      "normalized_need": "Identify three Polish manufacturers of …",
      "published_at": "2026-09-26T08:12:00.000Z",
      "source_url": "https://…",
      "source_type": "forum",
      "geography": "Poland"
    },
    "match": {
      "classification": "STRONG_MATCH",
      "reasons": ["…"],
      "capability_matches": [{ "seller_capability": "…", "buyer_quote": "…" }],
      "constraints_satisfied": [], "constraints_conflicting": [], "uncertainties": []
    },
    "evidence": [{ "source_url": "https://…", "quoted_or_extracted_fact": "…", "kind": "verbatim_quote", "retrieved_at": "…" }],
    "freshness": { "published_at": "…", "age_days": 3.1, "within_window": true, "request_status": "unknown", "deadline_at": null },
    "confidence": { "intent": "high", "match": "high", "basis": "…" }
  }],
  "rejected_signals": [{ "source_url": "https://…", "reason": "not_intent:seller_advertisement" }],
  "search_summary": { "sources_retrieved": 41, "sources_classified": 16, "queries": ["…"] },
  "limitations": ["…"],
  "cost": { "amount": "…", "currency": "USDC" }
}

Two separate classifications

Intent — is someone trying to acquire something? CONFIRMED_INTENT (explicit request, RFP/RFQ/tender or call for competition), LIKELY_INTENT, AMBIGUOUS, NOT_INTENT (vendor ads, articles, directories, generic discussion, employment postings). Match — does that need fit your offer? STRONG_MATCH, POSSIBLE_MATCH, WEAK_MATCH, NOT_A_MATCH. Judged by meaning across languages, not keyword overlap.

Evidence rules

Freshness

freshness (24h, 7d, 30d, 90d, 365d) is the maximum age of a buyer signal. Signals with a known publication date outside the window are rejected. Signals with an unknown date are returned with published_at null and an uncertainty unless require_known_date is true. Procurement notices whose deadline has passed are rejected as closed.

Payment, retries and access

One payment buys one search-and-classify run, including a credible zero-match result (no demand found is a valid answer). If the paid run fails, resend the identical body with the same Idempotency-Key plus Authorization: Bearer <Idempotency-Key> (no new payment) for up to two free retries. A URL-only request whose page cannot be retrieved is refused before settlement, so nothing is charged. No automatic refunds; uncertain settlements require reconciliation. See /terms.

Errors

{ "error": { "code": "…", "message": "…" } } with stable codes: invalid_request, invalid_json, invalid_url, request_too_large, unsupported_media_type, idempotency_key_required, idempotency_conflict, payment_reused, price_exceeds_ceiling, seller_url_unavailable, unauthorized, not_found, expired, rate_limited, not_configured, payment_provider_unavailable, settlement_unknown, provider_unavailable, service_unavailable.

Sources and limitations

No outreach

Agent Intent Match discovers demand. It never contacts buyers, sends messages, posts, creates accounts or submits forms. What you do with a result is your decision and responsibility.

Also described as: buyer intent, buyer intent discovery, demand discovery, demand signals, purchase intent, service request discovery, procurement intent, agent intent matching, buyer request matching, commercial intent, find buyers, find demand, capability demand.