# Nero Labs AI Dataset Enrichment

> Nero Labs AI Dataset Enrichment is a paid API for AI agents from x402-agent-tools.nerolabs.workers.dev, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-22).

Applies a plain-English AI instruction to every row of a JSON array (up to 50 rows), returning new columns defined by the caller — using Claude Haiku at $0.002 per row.

## Facts

- Endpoint: POST https://x402-agent-tools.nerolabs.workers.dev/ai/enrich?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-22
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/nero-labs-ai-dataset-enrichment-4d50bb69
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_bvqXfIgOhRGrn9bNkrXCL

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 nero-labs-ai-dataset-enrichment-4d50bb69 -d '<json body>'
```

Example prompt: Take this list of 30 customer reviews and classify each one as 'positive', 'negative', or 'neutral' — add a 'sentiment' column (string) and a 'confidence' column (number from 0 to 1) to every row. Use the instruction: 'Classify the sentiment of the review in {{review}}.'

## When to prefer this

Choose this endpoint when you need to apply a single, consistent AI instruction across many structured records in one call — classification, extraction, scoring, or summarization tasks on tabular/JSON data. It is purpose-built for batch row-level AI enrichment with typed output columns, field-level placeholders, and per-row error handling, making it far more reliable than calling a general LLM repeatedly in a loop. Prefer it over general-purpose LLM APIs when you want predictable column-shaped output, cost-per-row billing transparency, and automatic skipping of empty rows.

## Known failure modes

- Row fields referenced in {{placeholders}} are missing or empty — row is skipped with aiSkipped:true (if skipIfEmpty is on)
- Exceeding the 50-row limit causes an error or truncation
- Malformed outputFields schema causes model to return unexpected column shapes
- Model hallucination or off-format output populates aiError instead of the column values
- Network or worker timeout on large or slow batches
- Payment not completed (x402) results in 402 response before processing begins

## How this service works

Pay-per-call tools for AI agents, 31 in all: read web pages and RSS feeds, OCR, PDF text, transcription; email, phone and domain checks; UK, Irish and Polish company lookups and UK risk reports; website contacts, tech stack and SEO audits; PageSpeed; AI review, job post and row enrichment; data cleaning, joins, dedupe and diffs; US and EU compliance rules. No account or API key: pay each call in USDC on Base over x402.

## Output

A JSON object with a 'rows' array where each element is the original row plus the new AI-generated columns you defined in outputFields (e.g. sentiment, score, category). Each row also includes 'aiModel' (the model used) and 'aiError' (null on success). The 'count' field reports how many rows were processed. Rows where referenced fields were empty are marked 'aiSkipped: true' if skipIfEmpty is on.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "data": {
   "type": "array",
   "description": "A JSON array of records to enrich, for ad-hoc data instead of a dataset ID or file URL."
  },
  "prompt": {
   "type": "string",
   "description": "Plain-English instruction applied to each row on its own. Use {{field}} placeholders to insert that row's values (dotted paths like {{address.city}} work). Only the fields you reference are sent to the model; if you reference none, every field is sent. Examples: classify, extract a value, score 1 to"
  },
  "skipIfEmpty": {
   "type": "boolean",
   "default": true,
   "description": "On (default): a row with nothing in any {{field}} the instruction uses is written out with 'aiSkipped: true' and never sent to the model or charged."
  },
  "outputFields": {
   "type": "array",
   "description": "The new columns the model must fill in for every row, as a JSON list of {\"name\", \"type\", \"description\"}. Types: string (default), number, boolean, array, object. The description tells the model exactly what goes in the column (allowed values, units, language). Leave empty to get one free-text column"
  },
  "systemPrompt": {
   "type": "string",
   "description": "Optional background the model should know for every row: your industry, the categories you use, the language to answer in, edge-case rules."
  },
  "includeOriginalFields": {
   "type": "boolean",
   "default": true,
   "description": "On (default): each output row is the original row plus the new columns. Off: only the new columns (plus aiModel/aiError)."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "rows": [
   {
    "id": 1,
    "review": "Battery life is fantastic but the case feels cheap.",
    "aiError": null,
    "aiModel": "anthropic/claude-haiku-4.5",
    "sentiment": "neutral"
   }
  ],
  "count": 1,
  "_example_note": "Real output, trimmed: long lists cut to their first items, fields and text shortened."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nero-labs-ai-dataset-enrichment-4d50bb69/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-agent-tools.nerolabs.workers.dev](https://www.zero.xyz/host/x402-agent-tools.nerolabs.workers.dev/llms.txt)
