OpportunityMarket home

Opportunity Market API

Every endpoint below is public, read-only, and unauthenticated — the same data the site itself renders, as JSON. Responses are shaped { data: … } on success or { error: … } with a non-2xx status on failure. There is no API key: results are cached briefly server-side (scores move on an hourly cycle) and requests are otherwise unlimited, so please be a reasonable neighbour — cache on your side too if you're polling.

Endpoints

GET/api/opportunities

Screener — filtered, paged list of opportunities.

  • qtext search across name and description
  • categoryone category slug, e.g. ai-voice — see /methodology
  • statuscomma-separated: EMERGING,RISING,HOT,STABLE,SATURATED,DECLINING,DEAD
  • quadrantUNDERVALUED | HOT | CROWDED | DEAD
  • qualitycomma-separated evidence quality: LOW,MEDIUM,HIGH
  • minScore / maxScoreOpportunity Score bounds, 0-100
  • minDemand, maxCompetition, minMomentum, minMonetization, minPain, minEvidencenumeric floors/ceilings on the matching sub-score
  • sortscore | momentum | demand | newest | evidence | pain | competition (default score)
  • limit / offsetpaging, limit capped at 200 (default 50)
GET/api/opportunities/trending

Top opportunities by score weighted with momentum.

  • limitdefault 20, max 100
GET/api/opportunities/rising

Strongest momentum right now.

  • limitdefault 20, max 100
GET/api/opportunities/undervalued

High demand, low competition.

  • limitdefault 20, max 100
GET/api/opportunities/:idOrSlug

One opportunity's full detail — scores, snapshots, status.

GET/api/opportunities/:idOrSlug/evidence

Raw evidence rows behind an opportunity, with excerpt, source and confidence.

  • role, source, limit, offsetfilter/page the evidence list
GET/api/opportunities/:idOrSlug/history

Score snapshot history for the movement chart.

GET/api/opportunities/:idOrSlug/competitors

Observed competing products for this market.

GET/api/search-requests

Most-requested terms the index doesn't cover yet (or the state of one, with ?q=term).

What each field means and how it is computed is on the scoring methodology page. Try a live example: /api/opportunities/trending?limit=5.