# Duo Data Utilities – Number to Words

> Duo Data Utilities – Number to Words is a paid API for AI agents from api.duoleads.com, paid per call via x402, $0.05/call, status unknown (last checked 2026-10-02).

Converts a number into its written-word form in 12 languages, supporting cardinal, ordinal, currency, and year formats with proper grammatical agreement

## Facts

- Endpoint: GET https://api.duoleads.com/v1/num/words?utm_source=zero.xyz
- Price: $0.05/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/duo-data-utilities-number-to-words-5a680ea4
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_zbNtU5LbQu8-KSpPX2X7g

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 duo-data-utilities-number-to-words-5a680ea4
```

Example prompt: Spell out 1,250,000 in French as a cardinal number — I need the lowercase word form for a contract document.

## When to prefer this

Use this endpoint when you need a deterministic, grammatically correct, multilingual number-to-words conversion — especially for legal documents, invoices, check writing, localized UIs, or any context requiring a spelled-out number. It handles currency grammatical agreement and minor-unit naming (e.g. 'dollars and cents') automatically from the ISO 4217 code, which most generic libraries don't. Prefer this over custom NLP or translation APIs when precision, language breadth (12 languages), and correct currency grammar are all required.

## Known failure modes

- Missing required 'value' parameter returns a validation error
- Value at or above 1e15 is out of supported range
- Invalid language code (not in supported ISO 639-1 list) returns an error
- Ordinal form requested in a language that doesn't support it (e.g. Japanese) returns an error
- Currency form requested without providing a valid ISO 4217 currency code
- Non-integer or non-decimal string for value returns a parse error

## How this service works

Spell a number out in words in English, Dutch, German, French, Spanish, Italian, Portuguese, Polish, Russian, Turkish, Swedish or Japanese, in cardinal, ordinal or currency form. Currency form agrees the number with the currency noun and gives real minor-unit names for 19 currencies (EUR, USD, GBP, CHF, SEK, NOK, DKK, PLN, RUB, TRY, CNY, INR, BRL, MXN, CAD, AUD, NZD, CZK, HUF); any other ISO 4217 code uses a fraction such as 56/100. Values up to 10^15.

## Output

A JSON object containing the number spelled out in words (the 'words' field), along with the form used (cardinal/ordinal/currency/year), the language code, the original value, and currency metadata if applicable. Response also includes request ID, computation timestamp, and a price note.

## 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": [
      "value"
     ],
     "properties": {
      "case": {
       "enum": [
        "lower",
        "sentence",
        "title"
       ],
       "type": "string",
       "default": "lower",
       "maxLength": 64,
       "description": "lower (default), sentence or title."
      },
      "form": {
       "enum": [
        "cardinal",
        "ordinal",
        "currency",
        "year"
       ],
       "type": "string",
       "default": "cardinal",
       "maxLength": 64,
       "description": "cardinal (default), ordinal, currency or year."
      },
      "lang": {
       "enum": [
        "en",
        "nl",
        "de",
        "fr",
        "es",
        "it",
        "pt",
        "pl",
        "ru",
        "tr",
        "sv",
        "ja"
       ],
       "type": "string",
       "default": "en",
       "maxLength": 64,
       "description": "Language, ISO 639-1. Default en."
      },
      "value": {
       "type": "string",
       "maxLength": 32,
       "description": "Integer or decimal, absolute value below 1e15."
      },
      "currency": {
       "type": "string",
       "maxLength": 16,
       "description": "ISO 4217 code. Required when form=currency, rejected otherwise."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "ok",
      "route",
      "version",
      "data",
      "meta"
     ],
     "properties": {
      "ok": {
       "const": true
      },
      "data": {
       "type": "object",
       "required": [
        "words",
        "value",
        "lang",
        "form",
        "currency"
       ],
       "properties": {
        "form": {
         "type": "string"
        },
        "lang": {
         "type": "string"
        },
        "parts": {
         "type": [
          "object",
          "null"
         ],
         "required": [
          "integer_words",
          "minor_words"
  
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "data": {
   "form": "cardinal",
   "lang": "nl",
   "parts": null,
   "value": "1234",
   "words": "duizend tweehonderdvierendertig",
   "currency": null
  },
  "meta": {
   "price_usd": "0.05",
   "disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
   "request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
   "computed_at": "2026-09-28T12:00:00.000Z",
   "deterministic": true
  },
  "route": "/v1/num/words",
  "version": "1.0.0"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/duo-data-utilities-number-to-words-5a680ea4/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.duoleads.com](https://www.zero.xyz/host/api.duoleads.com/llms.txt)
