---
title: "ARUON Research — ordering by API and MCP"
description: "How a program or an AI agent orders an ARUON Research report: the catalog, a coverage check, the order request and its status, and an MCP server with the same four steps."
canonical: "https://reir.aruon.ai/agents"
source: "https://reir.aruon.ai/agents"
lang: "en"
---

# ARUON Research — ordering by API and MCP

How a program or an AI agent orders an ARUON Research report. Every order goes through the same door as the order form on [reir.aruon.ai](https://reir.aruon.ai/), and the same people are in it.

Weekly maintenance: Tuesdays from 1:00 AM Central for up to about 45 minutes, reir.aruon.ai may not answer. Orders and payments are never lost; if a request fails then, retry after 1:45 AM Central.

## What a program can and cannot do

- It can read the catalog and prices, check coverage for a place, place an order and read the order's status.
- It cannot pay, start a report or release one. HubSpot takes payment on its own checkout page. After payment an analyst gives the go-ahead, and an analyst releases every report. Nothing is auto-sent.
- An order returns a checkout link when the report is instant pay and we hold the ground for it. Every other order waits for an analyst to confirm scope with the buyer. Nothing is charged until then.
- A first order (a new agent operator or a new buyer) pays as usual. A person at ARUON checks it before the report is released.
- Where an order offers payment in USDC on its order page, one payment is taken per order: once a USDC payment starts, the card checkout link is withdrawn. Unless the payment service has already verified the buyer's email, it mails a six-digit code to the human buyer's own inbox, never to the agent. The person must give that code to the agent; an agent cannot complete a USDC payment without it.
- USDC on Base is open to every buyer: see Pay with crypto below.

## Jobs we do

Each job is one report, ordered by its SKU (the MCP tool `create_order`, or `POST https://reir.aruon.ai/api/hub/order`). Prices in US dollars, from the catalog.

- Red-flag screen on one address: ARUON Property Screen (`screen_parcel`), $649. Address or parcel ID in, analyst-released PDF out: owner of record where we hold the county, flood, wetlands, slope, soils, habitat, electric territory, transmission proximity, broadband. Traffic and daytime demand when the use needs them. NOI, cap rate, cash-on-cash and DSCR when you give an asking price. Sample: https://reir.aruon.ai/api/hub/sample/screen_parcel/view Order: https://reir.aruon.ai/#parcel Page: https://reir.aruon.ai/products/industrial-red-flag-screen-dallas-tx (markdown: https://reir.aruon.ai/products/industrial-red-flag-screen-dallas-tx.md)
- Storage/industrial site search in a ZIP: ARUON Site Search (`site_search`), $1,900. Ranked candidate parcels inside a ZIP or county you name, for commercial, industrial, storage and retail ground. You set the search radius, the acreage floor and the constraints that matter; we screen every candidate against the public layers and hand back a ranked list with the instrument that measured each one. Sample: https://reir.aruon.ai/api/hub/sample/site_search/view Order: https://reir.aruon.ai/#find Page: https://reir.aruon.ai/products/storage-site-search-palmer-ma (markdown: https://reir.aruon.ai/products/storage-site-search-palmer-ma.md)
- Cell-tower pad ranking with FCC ASR separation: ARUON Tower Sheet (`tower_sheet`), $1,250. Ranked candidate tower sites in a ring around your pin, each with its owner of record, assessed value, lot size and mapped district, screened for flood, wetlands, slope and habitat. Every FCC-registered structure in reach, with its owner, and every tower on the FAA's charted-obstacle file, which adds shorter ones the FCC file does not hold, is measured against each site under the jurisdiction's own separation rule where it writes one, and that siting rule is quoted with its section in an appendix. A labelled national ground-rent benchmark, and the open questions to settle with the permitting authority. Sample: https://reir.aruon.ai/api/hub/sample/tower_sheet/view Order: https://reir.aruon.ai/#wireless Page: https://reir.aruon.ai/products/cell-tower-site-ranking-orlando-fl (markdown: https://reir.aruon.ai/products/cell-tower-site-ranking-orlando-fl.md)
- Edge/proximity-compute county ranking: PCS Market Scan (`market_scan`), $1,250. A ranked county report for a 1–20 MW edge or proximity-compute brief. Demand by industry, power cost and who serves each county, business fiber and exchange points in reach, interconnection queues and dated announcements re-fetched from the publisher. Sample: https://reir.aruon.ai/api/hub/sample/market_scan/view Order: https://reir.aruon.ai/pcs?product=market_scan Page: https://reir.aruon.ai/products/edge-data-center-county-ranking-texas (markdown: https://reir.aruon.ai/products/edge-data-center-county-ranking-texas.md)
- Housing market screen on a ZIP: ARUON Housing Screen (`market_report`), $149. Rent, value, price index, inventory and demographics for the housing stock in one ZIP, benchmarked ZIP → metro → state → national, plus how three investor profiles — balanced, cash-flow and appreciation — read it differently. Sample: https://reir.aruon.ai/api/hub/sample/market_report/view Order: https://reir.aruon.ai/#market Page: https://reir.aruon.ai/products/housing-market-screen-zip-01007-ma (markdown: https://reir.aruon.ai/products/housing-market-screen-zip-01007-ma.md)

## Pay with crypto

USDC on the Base network (mainnet) is the one cryptocurrency we accept: no other coin, token or network. One USDC counts as one US dollar. The buyer pays from the buyer's own wallet; no agent and no tool here moves money.

- 1. Place the order: the MCP tool `create_order` or `POST https://reir.aruon.ai/api/hub/order`. `get_order_status` carries a `crypto` block on an order that can be paid in USDC.
- 2. Start the payment: the MCP tool `start_crypto_payment` (or `POST https://reir.aruon.ai/api/hub/crypto/start`) with the order token, the billing address, the buyer's role, the wallet the buyer will send from, and the buyer's acceptance of the terms (`accept`, `accept_terms`). Once a USDC payment starts, the card checkout link is withdrawn: one payment per order.
- 3. The code: unless the payment service has already verified the buyer's email, it emails a six-digit code to the human buyer's own inbox, never to the agent. Ask the person for it; an agent cannot finish a USDC payment without it.
- 4. Get the quote: the MCP tool `confirm_crypto_payment` (or `POST https://reir.aruon.ai/api/hub/crypto/confirm`) with the code. The answer is the quote: the exact USDC amount, the address to send it to, and 20 minutes to send it.
- 5. Send exactly that amount, from the wallet named in step 2, on Base. The payment counts once it is final, usually 20 to 30 minutes after it is sent (Base finality, then two independent providers must agree); `get_order_status` says where it stands.
- 6. Quote expired: the MCP tool `request_new_quote` (or `POST https://reir.aruon.ai/api/hub/crypto/quote`) gives a fresh 20-minute quote at a new exact amount.

- Limits while crypto opens: at most 3 crypto orders a day across all buyers (the day resets at midnight UTC), and 1 unpaid crypto order per buyer email. Past either, the card link still works and nothing is charged.
- Refunds go only to the wallet that paid, in USDC on Base, made by hand by a person at ARUON. See the [refund policy](https://reir.aruon.ai/refund-policy).
- Every order is screened before a quote and again when its payment arrives. A screened order can be held for a person at ARUON; a payment that arrives on a held order is recorded, and if ARUON does not go ahead the full amount goes back by hand to the wallet that paid.
- Paying does not release a report: a person at ARUON releases every report.

USDC amounts per report before tax (exact amount with a unique tag is given at checkout). Texas sales tax applies.:

- `market_report`: 149.00 USDC
- `market_scan`: 1250.00 USDC
- `scout_shortlist_founding`: 3000.00 USDC
- `screen_parcel`: 649.00 USDC
- `site_search`: 1900.00 USDC
- `tower_sheet`: 1250.00 USDC

## 1. The catalog and prices

`GET https://reir.aruon.ai/pricing.json` (the same file at `https://reir.aruon.ai/.well-known/pricing.json`): every report with `sku`, `name`, `price_usd` (null where the report is quoted), `purchasable`, `instant_pay`, `requires_scope_review`, `turnaround`, `deliverable_summary`, `sample_url`, `order_url`, `terms_url`, `credit_rules`, `updated_at` and `catalog_version`.

`GET https://reir.aruon.ai/api/hub/catalog` is the order page's own feed of the same catalog. While ordering is closed it answers `ok: false` with a reason and no products.

## 2. Check coverage

`GET https://reir.aruon.ai/api/coverage/band?sku=<sku>` plus ONE place: `state` and `county_fips`, or `lat` and `lng`, or `zip`, or `address`. It always answers HTTP 200; `ok: false` is a refusal with its reason. An address is up to 100 characters, and address lookups are limited to 30 per hour per connection.

| Field | Meaning |
|---|---|
| `band` | `full_data` (we hold the parcel record), `zip_only` (market data at ZIP grain), or `unknown`. |
| `source_id` | The parcel source that holds the county, or null. |
| `source_label` | That source's name, or null. |
| `zoning_screened` | Whether zoning is screened in this county. |
| `sla_hours` | 24 where this report runs on the 24-hour clock here; otherwise null. |
| `ok` | false is a refusal: read `reason`. |
| `reason` | Why, in a sentence. |
| `area_scan` | For the ring searches: the ordered ring is loaded (a source is registered and the ring is on disk). |
| `area_source` | A bulk source is registered for the county. |
| `area_loaded` | The ring asked about is loaded. |
| `ring` | The ring the reading was asked about. |
| `sku` | The report the reading is for. |
| `state` | Two-letter state. |
| `county_fips` | Five-digit county FIPS. |
| `county_resolution` | How a ZIP, an address or a point became a county. |
| `county_name` | The county's name. |
| `opt_in_ring` | The ring is the opt-in large ring (always quoted). |
| `document_hold` | Why the Property Screen is quoted in this county, when it is. |
| `version` | The record's version. |

A band other than `full_data`, or `ok: false`, means an analyst confirms scope before anything is charged.

## 3. Place an order

`POST https://reir.aruon.ai/api/hub/order` with a JSON body (`Content-Type: application/json`, up to 64 KiB). The fields:

| Field | Type | Required | Meaning |
|---|---|---|---|
| `sku` | string | yes | The report, by its catalog key (list_products / pricing.json). (one of: `market_scan`, `scout_shortlist_founding`, `screen_parcel`, `market_report`, `tower_sheet`, `tower_targets`, `site_search`) |
| `full_name` | string | yes | The buyer's name. |
| `email` | string | yes | The buyer's email. The one confirmation and the report go here; it must be a deliverable address. |
| `company` | string | no | The buyer's company (optional). |
| `phone` | string | no | The buyer's phone (optional). |
| `consent` | boolean | yes | true: the buyer accepts the Privacy Policy and the SMS terms. Required. |
| `paid_ack` | boolean | yes | true: the buyer acknowledges, verbatim: “I understand this is a paid engagement. After payment, an ARUON analyst checks the order and starts the report; the clock starts at our analyst's go-ahead, not at the card charge.” Required. |
| `geography` | object | yes | ONE place. kind=address: {address}; kind=zip: {zip}; kind=county: {state, county_fips}; kind=parcel: {state, county_fips, parcel_id}; kind=pin: {lat, lng} (saved as coordinates, never turned into an address). |
| `use` | string | no | Intended use, for the SKUs that read one (Property Screen, Tower Sheet, Site Search). (one of: `data_center`, `edge_data_center`, `cell_tower`, `storage_units`, `condo_development`, `multi_family`, `commercial_property`, `strip_mall_retail`, `mixed_use_development`, `industrial_warehouse`, `single_family`, `other`) |
| `notes` | string | no | Anything the analyst should read; longer text is cut at 4,000 characters. Read by a person; it changes nothing automatically. |
| `asking_price` | number | no | The asking price, where the report reads one (Property Screen, Housing Screen). |
| `must` | array | no | Must-have chips for the ring searches (Tower Sheet, Site Search): the catalog's hunt_chips keys; min_acres posts as min_acres=<n>. |
| `nice` | array | no | Nice-to-have chips, same keys. Emphasis only; they filter nothing. |
| `radius_mi` | integer | no | Search radius in whole miles, 1–100, for the ring searches. Blank is the default ring. |
| `site_acres` | number | no | Site size the buyer needs, in acres (read by the analyst). |
| `min_acres` | number | no | Minimum lot size in acres; it filters the search only when posted as a must-have. |
| `ai_agent_name` | string | no | The agent placing the order. (up to 120 characters) |
| `agent_operator` | string | no | The organisation that runs the agent. A person checks the first order from an operator before its report is released. (up to 120 characters) |
| `on_behalf_of` | string or object | no | The principal the agent orders for: a name, or {name, organization, email}. |

Send only these fields. `website` is reserved: it is the order form's bot trap, and an order that carries it is dropped without notice. The server reads the price, the coverage band and the payment mode itself; a posted price or band is ignored.

Search radius: whole miles, 1–100. A geography the server cannot place, a ZIP that does not exist, a missing field or an invalid email is refused with HTTP 400 before anything is written.

```json
{
  "sku": "market_report",
  "full_name": "Pat Buyer",
  "email": "pat@example.com",
  "consent": true,
  "paid_ack": true,
  "geography": {
    "kind": "zip",
    "zip": "01027"
  },
  "ai_agent_name": "Example buying agent",
  "agent_operator": "Example Agents Inc",
  "on_behalf_of": {
    "name": "Pat Buyer",
    "organization": "Buyer Co"
  }
}
```

HTTP 202 means the order is filed:

| Field | Meaning |
|---|---|
| `ok` | true |
| `token` | The order token: the order's secret. Keep it; the status and the order page read it. |
| `mode` | `pay` (instant pay, a checkout link) or `scope` (an analyst confirms scope first). |
| `pay_url` | The HubSpot checkout link, only when `mode` is `pay`; otherwise null. |
| `band` | The coverage band the server read for this order (see the coverage check). |
| `sla_hours` | 24 where the order runs on the 24-hour clock (The clock starts at our analyst's go-ahead, not at the card charge.); otherwise null. |
| `status` | The order record's status (`awaiting_payment` or `awaiting_approval`). |
| `agent_status` | The same status in the words below (Status words). |
| `request_id` | The order number. |
| `sku` | The report ordered. |
| `label` | The report's name. |
| `price_line` | The price as the catalog prints it, or null where the report is quoted. |
| `order_url` | The order page, `/order/<token>`. A bearer link: anyone who has it can read the order and pay for it, so keep it private. |
| `note` | Why the order is on the scope path, or how it was placed, when there is something to say; otherwise null. |

Refusals: HTTP 400 `{ok: false, reason, errors}`; HTTP 413 when the body is too large; HTTP 429 `{ok: false, reason}` past a rate limit; HTTP 500 `{ok: false, status: "error", message, reason, correlation_id}` when the fault is ours. Quote the `correlation_id` if you write to us.

## 4. Read an order's status

`GET https://reir.aruon.ai/api/hub/order/<token>` answers the order's record; an unknown token is HTTP 404 `{ok: false, error: "not found"}`. The order page `/order/<token>` shows the same record. The token is the order's secret; the buyer's email is masked. The order link in the buyer's order email is a bearer link: anyone who has it can read the order and pay for it, so keep it private.

| Field | Meaning |
|---|---|
| `ok` | true |
| `token` | The order token. |
| `request_id` | The order number. |
| `status` | The order record's status. |
| `agent_status` | The same status in the words below (Status words). |
| `mode` | `pay` or `scope`, as the order was taken. |
| `sku` | The report ordered. |
| `label` | The report's name. |
| `band` | The coverage band read when the order was taken. |
| `sla_hours` | 24 or null, as above. |
| `email_masked` | The buyer's email, masked (`ab…@example.com`). |
| `pay_url` | The checkout link while the order awaits payment; otherwise null. |
| `created_at` | When the order was taken (ISO 8601, UTC). |
| `paid_at` | When HubSpot recorded the payment, or null. |
| `go_at` | When an analyst gave the go-ahead (the clock's start), or null. |
| `payment_note` | Present only once a USDC payment has started on an order awaiting payment: why `pay_url` is null. One payment per order: the card link is withdrawn. |
| `payment_state` | Present with `payment_note`: where the USDC payment stands, `{state, status, head, line, why, next, words}`. `status` is the status word (`held` while a person at ARUON reviews it); `line` is the status in a phrase, `why` the reasons in plain words (or null), `next` what happens next, and `words` all three. The MCP tools' `meaning` is `words`. |

## 5. Status words

`agent_status` (and the MCP tools' `status`) is one of:

| Status | Meaning |
|---|---|
| `awaiting_payment` | Instant pay: finish checkout at checkout_url. Nothing runs before payment. Work begins at our analyst's go-ahead. |
| `awaiting_scope_review` | An analyst confirms scope with the buyer first, then sends the payment link or an invoice. Nothing is charged until then. |
| `awaiting_human_approval` | An order filed before 2026-11-04 from an agent operator we had not approved yet: a person approves it before any checkout link. Nothing is charged until then. |
| `paid` | Paid. The clock starts at our analyst's go-ahead, not at the card charge. |
| `in_production` | The report is being built. |
| `in_review` | The report is built and an analyst is reading it before release. |
| `delivered` | Released by an analyst and sent to the buyer's email. |
| `held` | A person at ARUON is looking at the order. Nothing is charged or sent until they act. |
| `received` | Received. |
| `closed` | Closed. No report will be sent on this order. |

## 6. The MCP server

`https://reir.aruon.ai/mcp` speaks the Model Context Protocol over streamable HTTP: one JSON-RPC message per `POST`, answered as JSON (a notification gets HTTP 202 and no body). It offers tools only, keeps no session and opens no stream: `GET` and `DELETE` answer 405. Protocol versions: 2025-11-25, 2025-06-18, 2025-03-26. A request may carry no `Origin` header or this site's own; any other is refused (HTTP 403).

It is listed in the official MCP Registry as `io.github.Aruon-AI/reir`: [https://registry.modelcontextprotocol.io/v0/servers?search=io.github.Aruon-AI%2Freir](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.Aruon-AI%2Freir). No sign-in: add `https://reir.aruon.ai/mcp` as a remote MCP server (streamable HTTP) in any client that takes one.

| Tool | What it does | Read-only |
|---|---|---|
| `list_products` | List products and prices | yes |
| `check_coverage` | Check coverage for a place | yes |
| `create_order` | Place an order (nothing is charged here) | no — files an order |
| `get_order_status` | Get an order's status | yes |
| `start_crypto_payment` | Pay an order by crypto instead of the card link | no — files an order |
| `confirm_crypto_payment` | Confirm the buyer's code and get the crypto quote | no — files an order |
| `request_new_quote` | Get a new crypto quote after the last one expired | no — files an order |

Every tool calls the same code as the HTTP endpoints above: `list_products` returns the pricing.json records, `check_coverage` the coverage record, `create_order` files the order through the order door and returns `{order_token, status, checkout_url}` (`checkout_url` only for `awaiting_payment`), and `get_order_status` reads the status record. `create_order` requires `ai_agent_name` and `agent_operator`. No tool charges, starts or releases anything.

### list_products — input

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

### check_coverage — input

```json
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "sku"
  ],
  "description": "ONE place: state + county_fips, lat + lng, zip, or address.",
  "properties": {
    "sku": {
      "type": "string",
      "enum": [
        "market_scan",
        "scout_shortlist_founding",
        "screen_parcel",
        "market_report",
        "tower_sheet",
        "tower_targets",
        "site_search"
      ],
      "description": "The report the coverage is read for."
    },
    "state": {
      "type": "string",
      "description": "Two-letter state (with county_fips)."
    },
    "county_fips": {
      "type": "string",
      "description": "Five-digit county FIPS."
    },
    "place_fips": {
      "type": "string",
      "description": "Optional place FIPS."
    },
    "lat": {
      "type": "number"
    },
    "lng": {
      "type": "number"
    },
    "zip": {
      "type": "string",
      "description": "A five-digit ZIP (its primary county)."
    },
    "address": {
      "type": "string",
      "description": "A street address (geocoded once; address lookups are limited per connection)."
    }
  }
}
```

### create_order — input

```json
{
  "type": "object",
  "properties": {
    "sku": {
      "type": "string",
      "enum": [
        "market_scan",
        "scout_shortlist_founding",
        "screen_parcel",
        "market_report",
        "tower_sheet",
        "tower_targets",
        "site_search"
      ],
      "description": "The report, by its catalog key (list_products / pricing.json)."
    },
    "full_name": {
      "type": "string",
      "description": "The buyer's name."
    },
    "email": {
      "type": "string",
      "description": "The buyer's email. The one confirmation and the report go here; it must be a deliverable address."
    },
    "company": {
      "type": "string",
      "description": "The buyer's company (optional)."
    },
    "phone": {
      "type": "string",
      "description": "The buyer's phone (optional)."
    },
    "consent": {
      "type": "boolean",
      "description": "true: the buyer accepts the Privacy Policy and the SMS terms. Required."
    },
    "paid_ack": {
      "type": "boolean",
      "description": "true: the buyer acknowledges, verbatim: “I understand this is a paid engagement. After payment, an ARUON analyst checks the order and starts the report; the clock starts at our analyst's go-ahead, not at the card charge.” Required."
    },
    "geography": {
      "type": "object",
      "description": "ONE place. kind=address: {address}; kind=zip: {zip}; kind=county: {state, county_fips}; kind=parcel: {state, county_fips, parcel_id}; kind=pin: {lat, lng} (saved as coordinates, never turned into an address).",
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "zip",
            "county",
            "parcel",
            "pin",
            "address"
          ]
        },
        "address": {
          "type": "string"
        },
        "zip": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "county_fips": {
          "type": "string"
        },
        "parcel_id": {
          "type": "string"
        },
        "lat": {
          "type": "number"
        },
        "lng": {
          "type": "number"
        }
      },
      "required": [
        "kind"
      ]
    },
    "use": {
      "type": "string",
      "enum": [
        "data_center",
        "edge_data_center",
        "cell_tower",
        "storage_units",
        "condo_development",
        "multi_family",
        "commercial_property",
        "strip_mall_retail",
        "mixed_use_development",
        "industrial_warehouse",
        "single_family",
        "other"
      ],
      "description": "Intended use, for the SKUs that read one (Property Screen, Tower Sheet, Site Search)."
    },
    "notes": {
      "type": "string",
      "description": "Anything the analyst should read; longer text is cut at 4,000 characters. Read by a person; it changes nothing automatically."
    },
    "asking_price": {
      "type": "number",
      "description": "The asking price, where the report reads one (Property Screen, Housing Screen)."
    },
    "must": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Must-have chips for the ring searches (Tower Sheet, Site Search): the catalog's hunt_chips keys; min_acres posts as min_acres=<n>."
    },
    "nice": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Nice-to-have chips, same keys. Emphasis only; they filter nothing."
    },
    "radius_mi": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Search radius in whole miles, 1–100, for the ring searches. Blank is the default ring."
    },
    "site_acres": {
      "type": "number",
      "minimum": 0,
      "description": "Site size the buyer needs, in acres (read by the analyst)."
    },
    "min_acres": {
      "type": "number",
      "minimum": 0,
      "description": "Minimum lot size in acres; it filters the search only when posted as a must-have."
    },
    "ai_agent_name": {
      "type": "string",
      "maxLength": 120,
      "description": "The agent placing the order."
    },
    "agent_operator": {
      "type": "string",
      "maxLength": 120,
      "description": "The organisation that runs the agent. A person checks the first order from an operator before its report is released."
    },
    "on_behalf_of": {
      "description": "The principal the agent orders for: a name, or {name, organization, email}.",
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string"
            },
            "organization": {
              "type": "string"
            },
            "email": {
              "type": "string"
            }
          }
        }
      ]
    }
  },
  "required": [
    "sku",
    "full_name",
    "email",
    "consent",
    "paid_ack",
    "geography",
    "ai_agent_name",
    "agent_operator"
  ],
  "additionalProperties": false
}
```

### get_order_status — input

```json
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "order_token"
  ],
  "properties": {
    "order_token": {
      "type": "string",
      "description": "From create_order."
    }
  }
}
```

### start_crypto_payment — input

```json
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "order_token",
    "rail",
    "billing",
    "role",
    "wallet_address",
    "accept",
    "accept_terms"
  ],
  "properties": {
    "order_token": {
      "type": "string"
    },
    "rail": {
      "type": "string"
    },
    "billing": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "line1",
        "city",
        "postal",
        "country"
      ],
      "properties": {
        "line1": {
          "type": "string"
        },
        "line2": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "postal": {
          "type": "string"
        },
        "country": {
          "type": "string"
        }
      }
    },
    "role": {
      "type": "string",
      "enum": [
        "investor",
        "broker",
        "carrier",
        "developer",
        "other"
      ]
    },
    "wallet_address": {
      "type": "string"
    },
    "phone": {
      "type": "string",
      "description": "The buyer's phone. Required here when the order was placed without one."
    },
    "accept": {
      "type": "boolean",
      "description": "The buyer accepts the terms, the refund policy and the privacy policy for this payment, and this acknowledgment (hub-ack-2026-11-02-crypto): \"I understand this is a paid engagement. After payment, an ARUON analyst checks the order and starts the report; the clock starts at our analyst's go-ahead, not at payment (the card charge or the USDC payment).\""
    },
    "accept_terms": {
      "type": "boolean",
      "description": "Must be true: the buyer has read and accepts Schedule C (Crypto Payments) of ARUON's Terms of Service, version 2026-11-06.1: https://aruon.ai/terms-of-service#schedule-c. Required before the code is emailed and before any payment; a call without it is refused and nothing is filed."
    }
  }
}
```

### confirm_crypto_payment — input

```json
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "order_token",
    "code"
  ],
  "properties": {
    "order_token": {
      "type": "string"
    },
    "code": {
      "type": "string"
    }
  }
}
```

### request_new_quote — input

```json
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "order_token"
  ],
  "properties": {
    "order_token": {
      "type": "string"
    }
  }
}
```

## 7. Agent fields

- `ai_agent_name`: the agent placing the order (up to 120 characters).
- `agent_operator`: the organisation that runs the agent (up to 120 characters). Required whenever any agent field is sent, and on the MCP server. A person at ARUON checks the first order from an operator before its report is released; payment is not held for it.
- `on_behalf_of`: the buyer the agent orders for — a name, or an object with `name`, `organization` and `email` (a valid address).
- Text only, no control characters. The fields are stored with the order and on the order's record in our CRM. They are the agent's own statement: we do not verify them.

## 8. Limits

| Limit | Value |
|---|---|
| Orders per connection (IP address) | 5 per hour |
| Orders per agent operator | 5 per hour |
| MCP requests per connection | 300 per hour |
| Address lookups on the coverage check | 30 per hour per connection |
| Request body (orders, MCP) | 64 KiB |
| Email | a deliverable mailbox address of up to 254 characters |

## 9. Terms and policies

- [Terms of service](https://aruon.ai/terms-of-service)
- [Privacy policy](https://aruon.ai/privacy)
- [SMS terms](https://aruon.ai/reir-sms-terms)
- [Sample terms of use](https://reir.aruon.ai/api/hub/terms)
- [Refund policy](https://reir.aruon.ai/refund-policy)
- Questions: REIR@aruon.ai

Aruon-ai LLC · [reir.aruon.ai](https://reir.aruon.ai/) · this page as markdown: [https://reir.aruon.ai/agents.md](https://reir.aruon.ai/agents.md)
