# Orthogonal Riveter – Structured Data Extraction & Enrichment

> Orthogonal Riveter – Structured Data Extraction & Enrichment is a paid API for AI agents from x402.orthogonal.com, paid per call via x402, $0.004/call, status unknown (last checked 2026-09-13).

Runs batch AI-powered data extraction and enrichment over tabular input rows, with a fully user-defined output schema specifying what to extract, how to format it, and which tools to use.

## Facts

- Endpoint: POST https://x402.orthogonal.com/riveter/v1/run
- Price: $0.004/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-13
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/orthogonal-riveter-structured-data-extraction-enrichment-aea42097
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_vFoqtATURJJBMMcP9dBRZ

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 orthogonal-riveter-structured-data-extraction-enrichment-aea42097 -d '<json body>'
```

Example prompt: I have a list of companies — Stripe, Ramp, and Brex — and I want to enrich them with their CEO name and headquarters city. Use web search to find the data and return it as text fields.

## When to prefer this

Choose this endpoint when you need to enrich or extract structured data across multiple rows in a single request with flexible, user-defined output schemas. It excels over single-lookup APIs when you have batch data (e.g., a CSV of companies, domains, or names) and want to define arbitrary output fields with custom prompts and tool access (web search, scraping). Prefer it over static databases when you need fresh, web-sourced enrichment for any attribute you can describe in natural language.

## Known failure modes

- Input arrays of unequal length return a validation error
- More than 1000 rows per request will be rejected
- Missing required 'prompt' or 'contexts' fields in output config cause extraction to fail
- Web search or scrape tools may return empty results if the target page is unavailable
- max_tool_calls set to 0 disables external lookups, limiting extraction to reasoning only
- Ambiguous or underspecified prompts may yield low-quality or hallucinated results
- Payment failure or insufficient USDC balance blocks the request

## How this service works

Copy link Define the structure of your output directly in the API request. This endpoint allows you to define both your input data and output configuration in a single request.

## Output

Returns the enriched output rows with values for each defined output attribute, formatted according to the specified type (text, number, boolean, url, email, json, date, tag). Each row corresponds to a row in the input data, and each column corresponds to a user-defined output attribute key.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "input": {
   "type": "object",
   "description": "The input object contains your source data:  Keys are column/attribute names Values are arrays of strings (all arrays must be the same length) Maximum 1000 rows per request Example: {\"company\":[\"Stripe\",\"Ramp\"],\"domain\":[\"stripe.com\",\"ramp.com\"]} (every value array must be the same length)."
  },
  "output": {
   "type": "object",
   "description": "The output object defines what data you want to extract:  Keys are the names of attributes you want to extract Each attribute requires: prompt: Instructions for finding/extracting this data contexts: Array of input or other output attribute names this depends on. Optional Output Configuration Each output attribute can optionally include:  format: Data type ('number', 'json', 'url', 'text', 'email', 'tag', 'date', 'boolean') format_details: Format-specific configuration (varies by format type). For json format, you can provide either a description (string) or a schema (JSON Schema object) or both. tools: Array of tools to use (['web_search', 'web_scrape', 'query_pdf', 'query_image']) max_tool_calls: Number of tool calls allowed (0-10) run_when: When to run this extraction ('always', 'any_filled', 'all_filled') Example: {\"ceo_name\":{\"prompt\":\"Find the company's CEO\",\"contexts\":[\"company\"],\"format\":\"text\"}}."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/orthogonal-riveter-structured-data-extraction-enrichment-aea42097/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.orthogonal.com](https://www.zero.xyz/host/x402.orthogonal.com/llms.txt)
