# DevX Voice OCR

> DevX Voice OCR is a paid API for AI agents from voice.madebydevx.com, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-28).

Extracts text from images (screenshots, receipts, invoices, signs, documents) in plain text or Markdown format using Gemma 4 vision

## Facts

- Endpoint: POST https://voice.madebydevx.com/v1/ocr?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-28
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/devx-voice-ocr-39a63205
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_aobEZCtSVJOK1NiDzJsEI

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 devx-voice-ocr-39a63205 -d '<json body>'
```

Example prompt: Can you extract all the text from this receipt image at https://example.com/receipt.png and give it back to me in Markdown format so tables and lists are preserved?

## When to prefer this

Choose this endpoint when you need to extract text from images programmatically in an agent workflow, especially for receipts, invoices, screenshots, or documents. It supports both URL-based and base64 image inputs, outputs structured Markdown (including tables and lists), and charges only when text is found. Prefer it over general-purpose vision LLM calls when you want a low-cost, pay-per-image OCR primitive with idempotency support on Base/USDC.

## Known failure modes

- Image exceeds 3 MB limit — request rejected with size error
- Unsupported image format (not PNG, JPEG, WebP, or GIF) — returns format error
- Image URL is unreachable or requires authentication — fetch failure
- Image contains no readable text — returned as empty text result, no charge applied
- Base64 data malformed or invalid — parse error
- Language hint not recognized — may fall back to auto-detection
- Idempotency key reused with different input — conflict error returned

## How this service works

OCR for agents: send an image URL or base64 (PNG, JPEG, WebP, GIF; up to 3 MB) and get the text it contains in reading order, as plain text or Markdown (tables, lists). Works on screenshots, receipts, invoices, signs and documents. $0.002 USDC per image on Base; images with no readable text are not charged. Gemma 4 vision. By DevX.

## Output

A JSON object containing the extracted text (in plain text or Markdown), image metadata (MIME type, byte size), line and character counts, the model used, a truncation flag, an operation ID, payment confirmation details (tx hash, amount, network), and a status field indicating the charge was applied.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "format": {
   "enum": [
    "text",
    "markdown"
   ],
   "type": "string",
   "description": "Output format (default text)"
  },
  "image_url": {
   "type": "string",
   "description": "Public http(s) URL of the image (max 3 MB)"
  },
  "requestKey": {
   "type": "string",
   "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$",
   "maxLength": 128,
   "minLength": 8,
   "description": "Optional idempotency key: the same payer + requestKey + input within 7 days returns the stored result without a second charge."
  },
  "image_base64": {
   "type": "string",
   "description": "Base64 image; a data: URI prefix is allowed"
  },
  "language_hint": {
   "type": "string",
   "maxLength": 40,
   "description": "Optional expected language"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "result": {
   "text": "INVOICE #4021\nTotal due: 12.50 USDC",
   "image": {
    "mime": "image/png",
    "bytes": 7868
   },
   "lines": 2,
   "model": "gemma-4-26b-a4b-it",
   "format": "text",
   "truncated": false,
   "characters": 35
  },
  "status": "paid",
  "payment": {
   "status": "paid",
   "network": "eip155:8453",
   "tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
   "amount_raw": "2000"
  },
  "operation_id": "3c2b1a09-8f7e-4d6c-9b5a-4e3d2c1b0a99"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/devx-voice-ocr-39a63205/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from voice.madebydevx.com](https://www.zero.xyz/host/voice.madebydevx.com/llms.txt)
