# SignalHarness Structured Extract

> SignalHarness Structured Extract is a paid API for AI agents from signalharness.ai, paid per call via x402, $0.02/call, status unknown (last checked 2026-09-14).

Extracts structured data fields (text, attributes, metadata, JSON-LD) from a given HTTPS URL using configurable field selectors

## Facts

- Endpoint: POST https://signalharness.ai/api/agent/services/structured_extract/invoke
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/signalharness-structured-extract-be2b01d3
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_YRTMP3LL5jMGRrKZRhn6Y

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 signalharness-structured-extract-be2b01d3 -d '<json body>'
```

Example prompt: Can you extract the article title (as text using selector 'h1.article-title') and the author name (as text using selector 'span.author') from https://example.com/article/123?

## When to prefer this

Choose this endpoint when you need to extract specific, named fields from a known HTTPS URL with precise CSS selectors, attribute names, or metadata keys, and you want structured JSON output with payment receipts and result integrity hashes. Prefer this over generic scrapers when you need field-level control, JSON-LD or metadata extraction, and an auditable micropayment trail per call at $0.02 USDC.

## Known failure modes

- URL is not HTTPS or is malformed — rejected by input validation
- Selector does not match any element on the page — field returned with warning or null value
- Page requires JavaScript rendering and returns incomplete HTML — extraction may miss dynamic content
- Page blocks bots or returns a CAPTCHA — extraction fails or returns empty results
- field name does not match pattern ^[A-Za-z][A-Za-z0-9_]{0,63}$ — request rejected
- Too many fields (>32) specified — request rejected
- Payment failure or insufficient USDC balance — request not processed

## How this service works

Explore 330 pay-per-call x402 API services and 27 agent-native digital products, with Base USDC pricing, secure Polar checkout, and free discovery.

## Output

Returns a JSON object containing a results array with extracted field values keyed by field name, a sourceUrl confirming the fetched page, and any warnings encountered during extraction. Also includes a receipt with payment details, request/execution IDs, latency, and a SHA-256 hash of the result for verification.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "type": "string",
   "pattern": "^https://",
   "maxLength": 2048,
   "minLength": 9
  },
  "fields": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "name",
     "kind"
    ],
    "properties": {
     "all": {
      "type": "boolean"
     },
     "kind": {
      "enum": [
       "text",
       "attribute",
       "metadata",
       "json_ld"
      ],
      "type": "string",
      "maxLength": 9,
      "minLength": 4
     },
     "name": {
      "type": "string",
      "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
      "maxLength": 64,
      "minLength": 1
     },
     "path": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1
     },
     "selector": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1
     },
     "attribute": {
      "type": "string",
      "maxLength": 128,
      "minLength": 1
     },
     "metadataKey": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1
     }
    },
    "maxProperties": 7,
    "minProperties": 2,
    "additionalProperties": false
   },
   "maxItems": 32,
   "minItems": 1
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "replay": false,
  "result": {
   "results": [
    {
     "kind": "text",
     "name": "example",
     "values": [
      "example"
     ],
     "matched": 0
    }
   ],
   "warnings": [
    "Verify the caller-supplied data before relying on this result."
   ],
   "sourceUrl": "example00"
  },
  "status": "succeeded",
  "receipt": {
   "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
   "usage": [],
   "status": "succeeded",
   "network": "eip155:8453",
   "artifacts": [],
   "endedAtMs": 0,
   "latencyMs": 0,
   "paymentId": "example-payment",
   "receiptId": "example-receipt",
   "requestId": "example-request",
   "serviceId": "structured_extract",
   "executionId": "example-execution",
   "startedAtMs": 0,
   "amountAtomic": "20000",
   "resultSha256": "aafd301cc99d8a5d7942b9e44b1f18167d3cb722ffdef8c38106181c66616ca7",
   "serviceVersion": "1.0.0",
   "settlementReference": "0x0000000000000000000000000000000000000000000000000000000000000000"
  },
  "artifacts": [],
  "requestId": "example-request",
  "executionId": "example-execution"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/signalharness-structured-extract-be2b01d3/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from signalharness.ai](https://www.zero.xyz/host/signalharness.ai/llms.txt)
