# DemandEx Opportunities List

> DemandEx Opportunities List is a paid API for AI agents from api.demandex.dev, paid per call via x402, $0.02/call, status unknown (last checked 2026-09-13).

Returns up to 50 active demand opportunity cards in a given category, each with teaser metadata and a summary, filtered optionally by minimum score.

## Facts

- Endpoint: GET https://api.demandex.dev/v1/opportunities
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-13
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/demandex-opportunities-list-73398cd0
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_rSnN08bnHQ-5lc0pm932x

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability demandex-opportunities-list-73398cd0
```

Example prompt: Can you pull up the top active demand opportunities in the 'saas' category on DemandEx, filtering for anything with a score of at least 60?

## When to prefer this

Use this endpoint when you need a broad discovery sweep of up to 50 active demand opportunities within a known category, and want teaser-level data (score, signal count, summary) before drilling into full details. Prefer it over the single-card detail endpoint when you don't yet know which specific opportunity id or slug to retrieve. Ideal for ranking, filtering by score threshold, and building overview dashboards.

## Known failure modes

- Missing or unknown category slug → no-charge HTTP 400 with list of valid categories
- Valid category with no active cards yet (index warming) → no-charge HTTP 503 with corpus_warming status
- minScore out of range (not 0-100) → validation error
- Network or upstream compute failure → 5xx error
- Payment not settled → request rejected before results returned

## How this service works

Paid ($0.02 USDC via x402). Returns up to 50 active opportunity cards in a category, each as a teaser ({ id, slug, title, category, score, signalCount, lastSeen }) plus its summary. Requires ?category=; ?minScore= optionally filters. A missing or unknown category returns a no-charge 400 that lists the valid categories; a valid category with no active cards yet (index still warming) returns a no-charge 503 corpus_warming instead of an empty charged list. Compute-first / settle-after — you are no…

## Output

A list of up to 50 active opportunity cards, each containing id, slug, title, category, composite score (0-100), signal count, last seen timestamp, and a text summary. Returns a no-charge 400 with valid category list if the category is unknown, or a no-charge 503 corpus_warming if the index is still initializing for a valid category.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "category"
     ],
     "properties": {
      "category": {
       "type": "string",
       "description": "Category slug (required). Unknown/missing → no-charge 400 listing valid categories."
      },
      "minScore": {
       "type": "number",
       "maximum": 100,
       "minimum": 0,
       "description": "Optional minimum composite score (0-100) filter."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "charged": true,
  "category": "audio",
  "fetchedAt": "2026-07-18T11:45:00.000Z",
  "opportunities": [
   {
    "id": "ckxxxx",
    "slug": "sony-wh1000xm5-replacement-headband",
    "score": 87.4,
    "title": "Sony WH-1000XM5 replacement headband",
    "summary": "Owners repeatedly seek an aftermarket replacement headband after the OEM band cracks.",
    "category": "audio",
    "lastSeen": "2026-07-18T10:00:00.000Z",
    "signalCount": 34
   }
  ]
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/demandex-opportunities-list-73398cd0/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.demandex.dev](https://www.zero.xyz/host/api.demandex.dev/llms.txt)
