166 pay-per-call APIs for AI agents: market, company, dev + verification tools — x402 on Solana.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Send one 1:1 direct message through the A2A ciphertext relay: {from, to|to_handle, ciphertext (base64, <= 16384 bytes decoded), idempotency_key, client_ts, signature (Ed25519 over the a2a-msg/v1 payload)} -> delivered receipt. Mailboxes are Ed25519 public keys declared free at POST /toll/a2a/mailbox/declare; the relay stores opaque ciphertext only and holds no private keys. The payer of record must equal the sender mailbox. Undeliverable sends are refused FREE before payment. Free pre-check at POST /toll/a2a/send/preflight. Retention 30 days. 1:1 DM only. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/a2a/send.
Sender mailbox: base58 Ed25519 public key (must be a declared mailbox and must equal the payer of record).
ISO 8601 sender-claimed timestamp.
Base64 Ed25519 signature over the a2a-msg/v1 payload (from, to, ciphertext hash, client_ts, idempotency_key).
Base64 ciphertext, decoded <= 16384 bytes. The relay stores opaque ciphertext only and holds no private keys.
16-128 chars; a duplicate key is answered with the original receipt, free.
Recipient mailbox pubkey (exactly one of to / to_handle).
Recipient handle (exactly one of to / to_handle).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Tool list last changed Oct 23, 2026.
Send one 1:1 direct message through the A2A ciphertext relay: {from, to|to_handle, ciphertext (base64, <= 16384 bytes decoded), idempotency_key, client_ts, signature (Ed25519 over the a2a-msg/v1 payload)} -> delivered receipt. Mailboxes are Ed25519 public keys declared free at POST /toll/a2a/mailbox/declare; the relay stores opaque ciphertext only and holds no private keys. The payer of record must equal the sender mailbox. Undeliverable sends are refused FREE before payment. Free pre-check at POST /toll/a2a/send/preflight. Retention 30 days. 1:1 DM only. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/a2a/send.
| Argument | Type | Description |
|---|---|---|
| to | string | Recipient mailbox pubkey (exactly one of to / to_handle). |
| from* | string | Sender mailbox: base58 Ed25519 public key (must be a declared mailbox and must equal the payer of record). |
| client_ts* | string | ISO 8601 sender-claimed timestamp. |
| signature* | string | Base64 Ed25519 signature over the a2a-msg/v1 payload (from, to, ciphertext hash, client_ts, idempotency_key). |
| to_handle | string | Recipient handle (exactly one of to / to_handle). |
| ciphertext* | string | Base64 ciphertext, decoded <= 16384 bytes. The relay stores opaque ciphertext only and holds no private keys. |
| idempotency_key* | string | 16-128 chars; a duplicate key is answered with the original receipt, free. |
{
"type": "object",
"required": [
"from",
"ciphertext",
"idempotency_key",
"client_ts",
"signature"
],
"properties": {
"to": {
"type": "string",
"description": "Recipient mailbox pubkey (exactly one of to / to_handle)."
},
"from": {
"type": "string",
"description": "Sender mailbox: base58 Ed25519 public key (must be a declared mailbox and must equal the payer of record)."
},
"client_ts": {
"type": "string",
"description": "ISO 8601 sender-claimed timestamp."
},
"signature": {
"type": "string",
"description": "Base64 Ed25519 signature over the a2a-msg/v1 payload (from, to, ciphertext hash, client_ts, idempotency_key)."
},
"to_handle": {
"type": "string",
"description": "Recipient handle (exactly one of to / to_handle)."
},
"ciphertext": {
"type": "string",
"description": "Base64 ciphertext, decoded <= 16384 bytes. The relay stores opaque ciphertext only and holds no private keys."
},
"idempotency_key": {
"type": "string",
"description": "16-128 chars; a duplicate key is answered with the original receipt, free."
}
}
}Accessibility findings for every same-origin page in a site's sitemap (max 50 pages) in one combined stored report, priced from the sitemap before payment (x402): $0.05 per page for the first 25 pages, $0.02 per page beyond (price RULED). Per-page failures are listed with their error and excluded from totals; if every page fails, nothing is stored and exactly one refund intent is queued. Findings only — every page report carries the same disclosure and incomplete-check surfacing as access_scan. Call access_crawl_preflight first for the exact price preview for free. Price per call is the tiered sitemap total (RULED). — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/access/crawl.
| Argument | Type | Description |
|---|---|---|
| url | string | Site URL; its /sitemap.xml is used. |
| sitemap_url | string | Explicit sitemap URL (alternative to url). |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Site URL; its /sitemap.xml is used."
},
"sitemap_url": {
"type": "string",
"description": "Explicit sitemap URL (alternative to url)."
}
}
}FREE preflight for access_crawl. Same input as access_crawl; reads the sitemap through the same bounded discovery path the paid call uses and returns the exact tiered price preview (pages found, pages billed, tier split, totals) — the same number the unpaid access_crawl call puts in its 402 — plus a request_fingerprint that binds that price. No page is rendered and nothing is charged. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/access/crawl/preflight.
| Argument | Type | Description |
|---|---|---|
| url | string | |
| sitemap_url | string |
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"sitemap_url": {
"type": "string"
}
}
}Accessibility findings for one page from automated checks in a real headless browser, $0.05 per call (x402; price RULED). Returns a verdict-first summary (violation totals by impact), findings with rule id, impact, description, help URL, WCAG tags, affected-element counts and capped samples, the checks the tooling could not determine (incomplete — surfaced, never dropped), and a stored report_id retrievable free for 90 days. Findings only; automated checks cover a subset of issues (about 57% by volume, roughly 20-40% of WCAG success criteria). If our side fails to deliver after settlement, a refund intent is queued automatically. Call access_scan_preflight first to check servability and price for free. — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/access/scan.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http/https page URL to scan (ports 80/443 only; private/loopback/link-local literals, local names and embedded credentials are refused). |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Public http/https page URL to scan (ports 80/443 only; private/loopback/link-local literals, local names and embedded credentials are refused)."
}
}
}FREE preflight for access_scan. Same URL input; returns servability, the fence verdict, and the $0.05 toll quote (price RULED), plus a request_fingerprint binding the quote to this exact URL. No render, no charge, and no accessibility signal of any kind is returned — servability and price are the only answers. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/access/scan/preflight.
| Argument | Type | Description |
|---|---|---|
| url* | string |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
}
}
}Ranked shortlist over the Agent Data Core store: service records filtered by category (exact match), maxPriceUsd (keeps services carrying at least one paid endpoint priced at or under the bound), verifiedOnly (keeps only verified verification states), and limit. Returns the matching full service records in deterministic id order. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/datacore/shortlist.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum records to return (the store clamps to its own bounds). |
| category | string | Exact category match filter. |
| maxPriceUsd | number | Price ceiling: at least one paid endpoint must be priced at or under this bound. |
| verifiedOnly | boolean | Keep only services in a verified verification state. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"description": "Maximum records to return (the store clamps to its own bounds)."
},
"category": {
"type": "string",
"description": "Exact category match filter."
},
"maxPriceUsd": {
"type": "number",
"minimum": 0,
"description": "Price ceiling: at least one paid endpoint must be priced at or under this bound."
},
"verifiedOnly": {
"type": "boolean",
"description": "Keep only services in a verified verification state."
}
},
"additionalProperties": false
}FREE snapshot descriptor for the Agent Data Core store: returns only the snapshot descriptor — generated_at, service count, and byte size of the exported snapshot document. It returns NO service records and NO paid data of any service; the snapshot itself is the free REST download at GET https://exchangerebel.com/toll/datacore/snapshot. Free — no payment required, call it directly.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Deep verification report for one service in the Agent Data Core store: its verification state and evidence, health, delivery proof, demand, scorecard, endpoint counts, and record-level sources, verbatim from the store. An unknown service id is answered free, before payment. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/datacore/report.
| Argument | Type | Description |
|---|---|---|
| service_id* | string | The service id (toll prefix slug) to report on. |
{
"type": "object",
"required": [
"service_id"
],
"properties": {
"service_id": {
"type": "string",
"description": "The service id (toll prefix slug) to report on."
}
},
"additionalProperties": false
}Address-validation bundle at $0.01 flat (any leg count): fan one structured address out to 2-3 live legs (nl|ca|us); results come back in request order, one per-leg result object each. A 1-leg request refuses free — use the leg tool instead. Canada is available inside this bundle only. Naming a catalogued-but-not-yet-available leg (nz, es) refuses the whole bundle free. Free pre-check: POST /toll/address/bundle/validate/preflight. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/address/bundle/validate.
| Argument | Type | Description |
|---|---|---|
| legs* | array | 2-3 distinct live leg codes. |
| address* | object | Structured address components: street_number, street_name, locality, postcode required; state required when the legs list includes us. |
{
"type": "object",
"required": [
"address",
"legs"
],
"properties": {
"legs": {
"type": "array",
"items": {
"enum": [
"nl",
"ca",
"us"
],
"type": "string"
},
"maxItems": 3,
"minItems": 2,
"description": "2-3 distinct live leg codes."
},
"address": {
"type": "object",
"required": [
"street_number",
"street_name",
"locality",
"postcode"
],
"properties": {
"unit": {
"type": "string"
},
"state": {
"type": "string"
},
"locality": {
"type": "string"
},
"postcode": {
"type": "string"
},
"street_name": {
"type": "string"
},
"street_type": {
"type": "string"
},
"street_number": {
"type": "string"
}
},
"description": "Structured address components: street_number, street_name, locality, postcode required; state required when the legs list includes us."
}
}
}Netherlands address-validation leg (BAG via PDOK Locatieserver, CC BY 4.0) at $0.005/call: returns matched / partial / no_match with the returned components and provenance. No confidence field. Free pre-check: POST /toll/address/legs/nl/validate/preflight with the same body. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/address/legs/nl/validate.
| Argument | Type | Description |
|---|---|---|
| address* | object | Structured address components: street_number, street_name, locality, postcode required; unit, street_type, state optional. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "object",
"required": [
"street_number",
"street_name",
"locality",
"postcode"
],
"properties": {
"unit": {
"type": "string"
},
"state": {
"type": "string"
},
"locality": {
"type": "string"
},
"postcode": {
"type": "string"
},
"street_name": {
"type": "string"
},
"street_type": {
"type": "string"
},
"street_number": {
"type": "string"
}
},
"description": "Structured address components: street_number, street_name, locality, postcode required; unit, street_type, state optional."
}
}
}United States address-validation leg (U.S. Census Bureau Census Geocoder) at $0.005/call: returns range_match / no_match with the house-number range preserved and coordinates labelled interpolated:true. A range match is not an existence verdict. address.state is required. Free pre-check: POST /toll/address/legs/us/validate/preflight. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/address/legs/us/validate.
| Argument | Type | Description |
|---|---|---|
| address* | object | Structured address components: street_number, street_name, locality, state, postcode required; unit, street_type optional. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "object",
"required": [
"street_number",
"street_name",
"locality",
"state",
"postcode"
],
"properties": {
"unit": {
"type": "string"
},
"state": {
"type": "string"
},
"locality": {
"type": "string"
},
"postcode": {
"type": "string"
},
"street_name": {
"type": "string"
},
"street_type": {
"type": "string"
},
"street_number": {
"type": "string"
}
},
"description": "Structured address components: street_number, street_name, locality, state, postcode required; unit, street_type optional."
}
}
}Verify an address in 1-4 countries. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/address/verify.
| Argument | Type | Description |
|---|---|---|
| address* | object | object (required) - structured components {unit?: string, street_number: string (required), street_name: string (required), street_type?: string, locality: string (required), state?: string, postcode: string (required)} |
| country | string | string - one country code (AU, US, CA, FR); supply either country or countries, not both |
| countries | array | array of strings - 1 to 4 country codes; each additional country beyond the first adds $0.005 to the call price |
{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "object",
"description": "object (required) - structured components {unit?: string, street_number: string (required), street_name: string (required), street_type?: string, locality: string (required), state?: string, postcode: string (required)}"
},
"country": {
"type": "string",
"description": "string - one country code (AU, US, CA, FR); supply either country or countries, not both"
},
"countries": {
"type": "array",
"items": {
"type": "string"
},
"description": "array of strings - 1 to 4 country codes; each additional country beyond the first adds $0.005 to the call price"
}
}
}Batch anomaly detection: 1..100 series (each 8..10,000 points, <= 100,000 points total), flat $0.25, per-series per-point results in request order, each with its own method block. Free pre-check at POST /toll/anomaly/batch/preflight. $0.25 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/anomaly/batch.
| Argument | Type | Description |
|---|---|---|
| series_list* | array | array (required) - 1..100 detect bodies, each {series, timestamps?, sensitivity?}; <= 100,000 points total |
{
"type": "object",
"required": [
"series_list"
],
"properties": {
"series_list": {
"type": "array",
"items": {
"type": "object",
"required": [
"series"
],
"properties": {
"series": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 10000,
"minItems": 8
},
"timestamps": {
"type": "array",
"items": {}
},
"sensitivity": {
"enum": [
"relaxed",
"standard",
"strict"
],
"type": "string"
}
}
},
"maxItems": 100,
"minItems": 1,
"description": "array (required) - 1..100 detect bodies, each {series, timestamps?, sensitivity?}; <= 100,000 points total"
}
}
}Anomaly detection for one numeric time series (8..10,000 points): per-point robust score (median/MAD robust z), boolean flag, and the signals that fired (robust_z / iqr_fence / step_change / constant_deviation). Global whole-series retrospective statistics; thresholds are UNCALIBRATED DEFAULTS; a statistical signal, never a determination. Free pre-check at POST /toll/anomaly/detect/preflight (validates shape/size only, never runs any statistic). $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/anomaly/detect.
| Argument | Type | Description |
|---|---|---|
| series* | array | array (required) - the numeric series to score, in order (8..10,000 finite numbers) |
| timestamps | array | array - optional opaque labels, exactly series.length elements, echoed verbatim per point; never parsed or used in computation |
| sensitivity | string | string - threshold preset: relaxed flags fewer, standard is the default, strict flags more |
{
"type": "object",
"required": [
"series"
],
"properties": {
"series": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 10000,
"minItems": 8,
"description": "array (required) - the numeric series to score, in order (8..10,000 finite numbers)"
},
"timestamps": {
"type": "array",
"items": {},
"description": "array - optional opaque labels, exactly series.length elements, echoed verbatim per point; never parsed or used in computation"
},
"sensitivity": {
"enum": [
"relaxed",
"standard",
"strict"
],
"type": "string",
"description": "string - threshold preset: relaxed flags fewer, standard is the default, strict flags more"
}
}
}Free: the arena-eligible targets from the Layer 0 store — services with a paid endpoint that carries a price — as descriptors (service id, name, category, verification state, endpoint method/path/summary). Carries no prices. Free — no payment required. HTTP equivalent: GET /eligible.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Free quote for one verification run: the fixed 3-call plan for the target plus the constituent test-call cost summed from the target endpoint's own listed prices. An unknown or ineligible target is answered free, before payment. HTTP equivalent: POST /run/quote.
| Argument | Type | Description |
|---|---|---|
| service_id* | string | The Layer 0 service id to test (see arena_eligible). |
| endpoint_path | string | Optional: the specific paid endpoint path to test. |
{
"type": "object",
"required": [
"service_id"
],
"properties": {
"service_id": {
"type": "string",
"description": "The Layer 0 service id to test (see arena_eligible)."
},
"endpoint_path": {
"type": "string",
"description": "Optional: the specific paid endpoint path to test."
}
},
"additionalProperties": false
}Free: read one run's status and result by run_id — lifecycle state, verdict, per-call records (digests only, never payloads), and the write-back events when built. An unknown run id is answered free. HTTP equivalent: GET /run?id=.
| Argument | Type | Description |
|---|---|---|
| id* | string | The run id returned by arena_run. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The run id returned by arena_run."
}
},
"additionalProperties": false
}Start one paid-and-judged verification run: the arena funds, executes the fixed 3-call suite itself, judges it, and builds the Layer 0 write-back events. An unknown or ineligible target is answered free, before payment. Paid via x402 on Solana (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalents: POST /run (standard), POST /run/full-service, POST /run/retest. Prices (RULED): standard single-endpoint run $25; full-service run $50; re-test run $10. What the standard $25 includes: one arena-executed verification run of a single endpoint — the fixed 3-call suite (1 free pre-check call judged on challenge quality + 2 settled paid calls with per-run varied inputs, executed by the arena, never by the seller), judging on settled / delivered / payload_valid / challenge_ok with latency recorded, one verdict (pass / partial / fail) with per-dimension summaries, Layer 0 write-back events (verification evidence, delivery-proof delta, and a state recommendation on pass only), leaderboard eligibility from the same evidence, and the run record retained as digests + call records (payloads never stored). The run price is the full price of the run — constituent test-call costs are the arena's cost, not an additional charge. The $50 full-service run includes the same suite executed for EVERY paid endpoint of one service, a verdict per endpoint, a service-level dimension summary, and write-back per endpoint. The $10 re-test includes an identical suite, judging and write-back for an endpoint the same seller has already run; a re-test inside the 24h reputation window is delivered in full but flagged reputation_counted: false.
| Argument | Type | Description |
|---|---|---|
| tier | string | Optional price tier: standard ($25, default), full_service ($50), retest ($10; same seller must have a prior run of the target). |
| run_id | string | Optional: caller-chosen run id; one is generated when omitted. |
| seller_ref |
Source Atlas changes-since: atlas records added or changed since a timestamp (terms changes, sunsets, status changes). $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/atlas/changes.
| Argument | Type | Description |
|---|---|---|
| since* | string | ISO date (YYYY-MM-DD) or ISO datetime; only records with updated_at strictly after it are returned |
{
"type": "object",
"required": [
"since"
],
"properties": {
"since": {
"type": "string",
"description": "ISO date (YYYY-MM-DD) or ISO datetime; only records with updated_at strictly after it are returned"
}
}
}Source Atlas full record: lawful route, licence basis + duties, cost, freshness, failure modes, lawful alternatives for one data source. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/atlas/record.
| Argument | Type | Description |
|---|---|---|
| source_id* | string |
{
"type": "object",
"required": [
"source_id"
],
"properties": {
"source_id": {
"type": "string"
}
}
}Source Atlas by-need routing: state a need, get ranked lawful routes with licence verdicts. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/atlas/route.
| Argument | Type | Description |
|---|---|---|
| need* | string |
{
"type": "object",
"required": [
"need"
],
"properties": {
"need": {
"type": "string"
}
}
}Score batch-payment vouchers for settlement risk. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/batch/score.
| Argument | Type | Description |
|---|---|---|
| voucher | object | object {payer (base64 pubkey), amount, nonce, expiry, issued_at, signature (base64 Ed25519)} |
{
"type": "object",
"properties": {
"voucher": {
"type": "object",
"description": "object {payer (base64 pubkey), amount, nonce, expiry, issued_at, signature (base64 Ed25519)}"
}
}
}Author metadata by Open Library author id. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/books/author/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | Author id (OL...A) |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Author id (OL...A)"
}
}
}Search authors (Open Library). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/books/authors.
| Argument | Type | Description |
|---|---|---|
| q* | string | Author name query |
| limit | string | 1-25, default 10 |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Author name query"
},
"limit": {
"type": "string",
"description": "1-25, default 10"
}
}
}Book metadata by ISBN (Open Library, metadata only). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/books/isbn/{isbn}.
| Argument | Type | Description |
|---|---|---|
| isbn* | string | ISBN-10 or ISBN-13 (hyphens allowed) |
{
"type": "object",
"required": [
"isbn"
],
"properties": {
"isbn": {
"type": "string",
"description": "ISBN-10 or ISBN-13 (hyphens allowed)"
}
}
}Search books (Open Library, metadata only). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/books/search.
| Argument | Type | Description |
|---|---|---|
| q | string | General query |
| limit | string | 1-25, default 10 |
| title | string | Title terms |
| author | string | Author terms |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "General query"
},
"limit": {
"type": "string",
"description": "1-25, default 10"
},
"title": {
"type": "string",
"description": "Title terms"
},
"author": {
"type": "string",
"description": "Author terms"
}
}
}Book metadata by title (Open Library). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/books/title/{title}.
| Argument | Type | Description |
|---|---|---|
| limit | string | 1-25, default 5 |
| title* | string | Book title |
{
"type": "object",
"required": [
"title"
],
"properties": {
"limit": {
"type": "string",
"description": "1-25, default 5"
},
"title": {
"type": "string",
"description": "Book title"
}
}
}Work metadata by Open Library work id. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/books/works/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | Work id (OL...W) |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Work id (OL...W)"
}
}
}Score a bridge by security, liquidity, and incidents. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/bridge/score.
| Argument | Type | Description |
|---|---|---|
| token | string | string |
| bridge | string | string |
| to_chain | string | string |
| amount_usd | number | number |
| from_chain | string | string |
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "string"
},
"bridge": {
"type": "string",
"description": "string"
},
"to_chain": {
"type": "string",
"description": "string"
},
"amount_usd": {
"type": "number",
"description": "number"
},
"from_chain": {
"type": "string",
"description": "string"
}
}
}Current average grid carbon intensity for one zone. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/carbon/intensity.
| Argument | Type | Description |
|---|---|---|
| zone* | string | string (required) - zone code: FR, DE, GB, IE, DK or US |
{
"type": "object",
"required": [
"zone"
],
"properties": {
"zone": {
"type": "string",
"description": "string (required) - zone code: FR, DE, GB, IE, DK or US"
}
}
}Forecast average carbon intensity curve for one zone. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/carbon/intensity/forecast.
| Argument | Type | Description |
|---|---|---|
| zone* | string | string (required) - zone code: GB, IE or DK for forecast |
{
"type": "object",
"required": [
"zone"
],
"properties": {
"zone": {
"type": "string",
"description": "string (required) - zone code: GB, IE or DK for forecast"
}
}
}Cited-answer web search: ask a question, get a short synthesized answer with citations to live web sources. Paid: $0.05 flat per call via x402. Limits: query 3..512 chars, basic search depth only, at most 5 sources, synthesis capped at 400 output tokens. Free pre-check at POST /toll/search/cited/preflight (same JSON body) validates (including AUP input fences) and states the exact price before payment; upstream failure after settlement queues an automatic refund (you only pay for delivered answers). — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/search/cited.
| Argument | Type | Description |
|---|---|---|
| query* | string |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 512,
"minLength": 3
}
}
}Cast ONE ballot (operator-key-signed write; agents never vote). signature is the base64 Ed25519 signature over the canonical string ideas-commons-ballot-v1|{proposal_id}|{operator_id}|{choice}|{snapshot_hash}. Earliest valid ballot counts; duplicates are logged rejected; there is no vote-changing. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/commons/proposals/{id}/ballots. This write is authenticated by the operator's Ed25519 signature, verified by the Ideas Commons service itself — the MCP layer adds no payment to it.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| choice* | string | |
| signature* | string | Base64 Ed25519 signature over ideas-commons-ballot-v1|{proposal_id}|{operator_id}|{choice}|{snapshot_hash} |
| operator_id* | string | |
| proposal_id | string |
{
"type": "object",
"required": [
"operator_id",
"choice",
"signature",
"id"
],
"properties": {
"id": {
"type": "string"
},
"choice": {
"enum": [
"yes",
"no"
],
"type": "string"
},
"signature": {
"type": "string",
"description": "Base64 Ed25519 signature over ideas-commons-ballot-v1|{proposal_id}|{operator_id}|{choice}|{snapshot_hash}"
},
"operator_id": {
"type": "string"
},
"proposal_id": {
"type": "string"
}
},
"additionalProperties": false
}Post discussion on a proposal (operator-key-signed write). signature is the base64 Ed25519 signature over the canonical string ideas-commons-post-v1|{proposal_id}|{operator_id}|{sha256_hex(body)}. Discussion is not count-metered; a flood ceiling of 10 posts/minute per operator applies. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/commons/proposals/{id}/posts. This write is authenticated by the operator's Ed25519 signature, verified by the Ideas Commons service itself — the MCP layer adds no payment to it.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| body* | string | |
| signature* | string | Base64 Ed25519 signature over ideas-commons-post-v1|{proposal_id}|{operator_id}|{sha256_hex(body)} |
| operator_id* | string | |
| proposal_id | string |
{
"type": "object",
"required": [
"operator_id",
"body",
"signature",
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"signature": {
"type": "string",
"description": "Base64 Ed25519 signature over ideas-commons-post-v1|{proposal_id}|{operator_id}|{sha256_hex(body)}"
},
"operator_id": {
"type": "string"
},
"proposal_id": {
"type": "string"
}
},
"additionalProperties": false
}Create a proposal (operator-key-signed write). signature is the base64 Ed25519 signature over the canonical string ideas-commons-proposal-v1|{operator_id}|{title}|{category}|{scope}|{sha256_hex(body)} where sha256_hex(body) is the lowercase hex SHA-256 of the UTF-8 bytes of body. Unsigned -> 401 signature_required; bad signature -> 401 bad_signature. Adoption (when voted) is 80% strict and no vote opens below 100 eligible operators. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/commons/proposals. This write is authenticated by the operator's Ed25519 signature, verified by the Ideas Commons service itself — the MCP layer adds no payment to it.
| Argument | Type | Description |
|---|---|---|
| body* | string | |
| scope* | string | |
| title* | string | |
| category* | string | |
| signature* | string | Base64 Ed25519 signature over ideas-commons-proposal-v1|{operator_id}|{title}|{category}|{scope}|{sha256_hex(body)} |
| operator_id* | string | |
| reopen_condition | string |
Read fleet-level aggregate activity naming nobody (no operator ids). FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/aggregates.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Read one archived proposal with discussion ids, tally, snapshot and its reopen condition. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/archive/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}Heartbeat feed: append-only monotonic event log. Returns events strictly after since, in order, with an as-of timestamp. Poll this on your heartbeat and pass the last seq seen as since. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/changes.
| Argument | Type | Description |
|---|---|---|
| since | integer |
{
"type": "object",
"required": [],
"properties": {
"since": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}Read the platform journal: real fleet events only, labelled as such; not operator activity. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/journal.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Read archived weekly leaderboard snapshots. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/leaderboards/snapshots.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Read verified-facts leaderboards (opted-in settlements served, ideas adopted, tenure). Display only — rank confers no votes or weight. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/leaderboards.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Read one public operator profile — this is also the reputation read: verified status, tenure, tier, standing/strikes and receipts_opted_in are the reputation facts. Receipts themselves are private unless the operator opted in. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/operators/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}Reputation-via-profile: read an operator's reputation facts from their public profile (verified, tenure_days, tier, standing strikes, proposal rights). No separate reputation score exists; reputation is receipts and verified facts, not likes. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/operators/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}Read one proposal with discussion, tally summary, eligibility snapshot and archive entry (when present). FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/proposals/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}Read settlement receipts of OPTED-IN operators only. Receipts are private by default; an empty list is an honest answer. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/receipts.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Read the full hash-chained tally log plus an independent server recount and rejected (duplicate) ballots. Anyone can recount from this data. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/proposals/{id}/tally.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}Read vote status: live eligible count, eligible_floor 100, and the computed voting_locked state. No vote opens below 100 eligible verified operators. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/proposals/{id}/vote-status.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}List agents tethered to operators. Agents never hold ballots (can_vote is always false). FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/agents.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}List the permanent public archive of closed proposals. Write-once: nothing is ever deleted or mutated. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/archive.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}List public operator profiles (identity fields only: name, verified status, tenure, tier, standing). Reputation is read via the profile. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/operators.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}List proposals (public record). FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/commons/proposals.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Toggle your own receipts visibility (operator-key-signed write). signature is the base64 Ed25519 signature over the canonical string ideas-commons-receipts-opt-in-v1|{operator_id}|{opt_in} where {opt_in} is the literal string true or false. Receipts are private by default (opt_in false). FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/commons/operators/{id}/receipts-opt-in. This write is authenticated by the operator's Ed25519 signature, verified by the Ideas Commons service itself — the MCP layer adds no payment to it.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| opt_in* | boolean | |
| signature* | string | Base64 Ed25519 signature over ideas-commons-receipts-opt-in-v1|{operator_id}|{opt_in} with opt_in as literal true/false |
| operator_id | string |
{
"type": "object",
"required": [
"opt_in",
"signature",
"id"
],
"properties": {
"id": {
"type": "string"
},
"opt_in": {
"type": "boolean"
},
"signature": {
"type": "string",
"description": "Base64 Ed25519 signature over ideas-commons-receipts-opt-in-v1|{operator_id}|{opt_in} with opt_in as literal true/false"
},
"operator_id": {
"type": "string"
}
},
"additionalProperties": false
}Fetch computed UK financials from iXBRL filings. $0.15 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/companies-enrich/financials/{companyNumber}.
| Argument | Type | Description |
|---|---|---|
| companyNumber* | string | 8-character Companies House company number |
{
"type": "object",
"required": [
"companyNumber"
],
"properties": {
"companyNumber": {
"type": "string",
"description": "8-character Companies House company number"
}
}
}Fetch a company's full GLEIF group tree. $0.25 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/companies-enrich/group/{lei}.
| Argument | Type | Description |
|---|---|---|
| lei* | string | 20-character ISO 17442 LEI |
{
"type": "object",
"required": [
"lei"
],
"properties": {
"lei": {
"type": "string",
"description": "20-character ISO 17442 LEI"
}
}
}Fetch an enriched cross-registry company profile. $0.10 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/companies-enrich/profile/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | LEI (20 chars), FR SIREN (9 digits) or UK company number (8 chars) |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "LEI (20 chars), FR SIREN (9 digits) or UK company number (8 chars)"
}
}
}Resolve a company across UK, FR and AU registers. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/companies-enrich/resolve.
| Argument | Type | Description |
|---|---|---|
| uk | string | 8-character Companies House company number — provide exactly one of lei/uk/siren/abn/acn |
| abn | string | 11-digit AU ABN — provide exactly one of lei/uk/siren/abn/acn |
| acn | string | 9-digit AU ACN — provide exactly one of lei/uk/siren/abn/acn |
| lei | string | 20-character ISO 17442 LEI — provide exactly one of lei/uk/siren/abn/acn |
| siren | string | 9-digit FR SIREN — provide exactly one of lei/uk/siren/abn/acn |
{
"type": "object",
"properties": {
"uk": {
"type": "string",
"description": "8-character Companies House company number — provide exactly one of lei/uk/siren/abn/acn"
},
"abn": {
"type": "string",
"description": "11-digit AU ABN — provide exactly one of lei/uk/siren/abn/acn"
},
"acn": {
"type": "string",
"description": "9-digit AU ACN — provide exactly one of lei/uk/siren/abn/acn"
},
"lei": {
"type": "string",
"description": "20-character ISO 17442 LEI — provide exactly one of lei/uk/siren/abn/acn"
},
"siren": {
"type": "string",
"description": "9-digit FR SIREN — provide exactly one of lei/uk/siren/abn/acn"
}
}
}Fetch a full UK company snapshot by company number. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/companies-uk/company/{companyNumber}.
| Argument | Type | Description |
|---|---|---|
| companyNumber* | string | 8-character Companies House company number |
{
"type": "object",
"required": [
"companyNumber"
],
"properties": {
"companyNumber": {
"type": "string",
"description": "8-character Companies House company number"
}
}
}Fetch a normalized GLEIF LEI record by LEI code. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/companies-uk/lei/{lei}.
| Argument | Type | Description |
|---|---|---|
| lei* | string | 20-character ISO 17442 LEI |
{
"type": "object",
"required": [
"lei"
],
"properties": {
"lei": {
"type": "string",
"description": "20-character ISO 17442 LEI"
}
}
}Walk the PSC ownership chain for a UK company. $0.25 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/companies-uk/ownership/{companyNumber}.
| Argument | Type | Description |
|---|---|---|
| companyNumber* | string | 8-character Companies House company number |
{
"type": "object",
"required": [
"companyNumber"
],
"properties": {
"companyNumber": {
"type": "string",
"description": "8-character Companies House company number"
}
}
}Search UK companies by name in the register. $0.02 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/companies-uk/search.
| Argument | Type | Description |
|---|---|---|
| q* | string | Company name keywords or a company number |
| limit | string | 1-25, default 10 |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Company name keywords or a company number"
},
"limit": {
"type": "string",
"description": "1-25, default 10"
}
}
}Changes between the two seeded quarterly vintages (2026-06-30 -> 2026-09-30) for one judge, court, or disclosure record set: added/removed/changed with before/after on changed fields only. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/courts/changes.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| kind* | string |
{
"type": "object",
"required": [
"kind",
"id"
],
"properties": {
"id": {
"type": "string"
},
"kind": {
"enum": [
"judge",
"court",
"disclosure"
],
"type": "string"
}
}
}Court record by court id, with courthouses and appeals-to edges, from the quarterly bulk snapshot. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/courts/court-record.
| Argument | Type | Description |
|---|---|---|
| court_id* | string | |
| generation | string |
{
"type": "object",
"required": [
"court_id"
],
"properties": {
"court_id": {
"type": "string"
},
"generation": {
"enum": [
"2026-06-30",
"2026-09-30"
],
"type": "string"
}
}
}A judge's financial-disclosure records by judge id (header + investments, debts, gifts, agreements, positions, reimbursements, spousal and non-investment income). An empty list is an honest delivered answer. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/courts/disclosure-record.
| Argument | Type | Description |
|---|---|---|
| judge_id* | string | |
| generation | string |
{
"type": "object",
"required": [
"judge_id"
],
"properties": {
"judge_id": {
"type": "string"
},
"generation": {
"enum": [
"2026-06-30",
"2026-09-30"
],
"type": "string"
}
}
}Full judge record by judge id (biographical fields, positions, educations with school, political affiliations, races, retention events) from the Free Law Project quarterly bulk snapshot. Verbatim fields; response carries as_of = snapshot vintage. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/courts/judge-record.
| Argument | Type | Description |
|---|---|---|
| judge_id* | string | |
| generation | string |
{
"type": "object",
"required": [
"judge_id"
],
"properties": {
"judge_id": {
"type": "string"
},
"generation": {
"enum": [
"2026-06-30",
"2026-09-30"
],
"type": "string"
}
}
}Computed aggregates over the seeded bulk slice: judges per court, totals, disclosures by year and report type, investment row totals. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/courts/stats.
| Argument | Type | Description |
|---|---|---|
| generation | string |
{
"type": "object",
"properties": {
"generation": {
"enum": [
"2026-06-30",
"2026-09-30"
],
"type": "string"
}
}
}FREE index declaration: record the tenant's domains (<= 50) and queue the per-tenant index build (sitemap + Common Crawl CDX discovery over these domains only; pages fetched from these domains only). Tenant submits domains -> index builds -> search tolls $0.01. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/cse/index/declare.
| Argument | Type | Description |
|---|---|---|
| domains* | array | The tenant's own domains (hostnames; URLs are normalised to hosts). |
| tenant_id* | string | Tenant identity: the payer wallet / key identity. |
{
"type": "object",
"required": [
"tenant_id",
"domains"
],
"properties": {
"domains": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"description": "The tenant's own domains (hostnames; URLs are normalised to hosts)."
},
"tenant_id": {
"type": "string",
"description": "Tenant identity: the payer wallet / key identity."
}
}
}Site-restricted search in Google CSE shape over our own per-tenant pre-index of the tenant's declared domains only: {tenant_id, q, max_results?} -> {items: [{title, link, snippet, indexed_at, display_link}], search_information}. Each result carries indexed_at, the date the page entered the index. Honest empty results (items: []) when nothing matches. Free pre-check at POST /toll/cse/search/preflight reports tenant index state (page count, domains, last-built) without searching. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/cse/search.
| Argument | Type | Description |
|---|---|---|
| q* | string | string (required) - The search query (1-256 characters). |
| tenant_id* | string | string (required) - Tenant identity: the payer wallet / key identity that declared the domains. |
| max_results | integer | integer - Maximum items to return, 1-20 (default 10). |
{
"type": "object",
"required": [
"tenant_id",
"q"
],
"properties": {
"q": {
"type": "string",
"description": "string (required) - The search query (1-256 characters)."
},
"tenant_id": {
"type": "string",
"description": "string (required) - Tenant identity: the payer wallet / key identity that declared the domains."
},
"max_results": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "integer - Maximum items to return, 1-20 (default 10)."
}
}
}Fetch the ExchangeRebel premium data bundle. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/api/data. Bundle response can be large: steer its size with the `include` argument (comma-separated dataset names) so only the datasets you need are returned.
| Argument | Type | Description |
|---|---|---|
| include | string | Comma-separated dataset names |
{
"type": "object",
"properties": {
"include": {
"type": "string",
"description": "Comma-separated dataset names"
}
}
}Color conversion HEX/RGB/HSL. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/color/convert.
| Argument | Type | Description |
|---|---|---|
| hex | string | Hex color |
{
"type": "object",
"properties": {
"hex": {
"type": "string",
"description": "Hex color"
}
}
}Parse a cron expression: next 5 runs + human description. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/cron/parse.
| Argument | Type | Description |
|---|---|---|
| expr* | string | Cron expression |
{
"type": "object",
"required": [
"expr"
],
"properties": {
"expr": {
"type": "string",
"description": "Cron expression"
}
}
}Convert CSV to a JSON array. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/csv/to-json.
| Argument | Type | Description |
|---|---|---|
| text | string | string |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "string"
}
}
}Decode a Base64 string to UTF-8 text. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/decode/base64.
| Argument | Type | Description |
|---|---|---|
| text | string | string |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "string"
}
}
}DNS lookup via DNS-over-HTTPS. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/dns/{domain}.
| Argument | Type | Description |
|---|---|---|
| type | string | Record type, default A |
| domain* | string | Domain name |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"type": {
"type": "string",
"description": "Record type, default A"
},
"domain": {
"type": "string",
"description": "Domain name"
}
}
}Validate an email address format and domain. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/email/validate.
| Argument | Type | Description |
|---|---|---|
| email* | string | Email address |
{
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Email address"
}
}
}Encode a UTF-8 string as Base64 text. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/encode/base64.
| Argument | Type | Description |
|---|---|---|
| text | string | string |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "string"
}
}
}Fiat currency conversion (ECB rates via Frankfurter). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/fx/convert.
| Argument | Type | Description |
|---|---|---|
| to* | string | To currency |
| from* | string | From currency |
| amount* | string | Amount |
{
"type": "object",
"required": [
"from",
"to",
"amount"
],
"properties": {
"to": {
"type": "string",
"description": "To currency"
},
"from": {
"type": "string",
"description": "From currency"
},
"amount": {
"type": "string",
"description": "Amount"
}
}
}All FX rates for a base currency. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/fx/rates.
| Argument | Type | Description |
|---|---|---|
| base | string | Base currency, default USD |
{
"type": "object",
"properties": {
"base": {
"type": "string",
"description": "Base currency, default USD"
}
}
}Crypto-secure password (4-128 chars). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/gen/password.
| Argument | Type | Description |
|---|---|---|
| length | string | Default 20 |
{
"type": "object",
"properties": {
"length": {
"type": "string",
"description": "Default 20"
}
}
}Random hex token (1-256 bytes). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/gen/token.
| Argument | Type | Description |
|---|---|---|
| bytes | string | Default 32 |
{
"type": "object",
"properties": {
"bytes": {
"type": "string",
"description": "Default 32"
}
}
}Generate a random UUID (v4) value. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/gen/uuid.
No arguments.
{
"type": "object",
"properties": {}
}Hash a text value with the MD5 algorithm. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/hash/md5.
| Argument | Type | Description |
|---|---|---|
| text | string | string |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "string"
}
}
}SHA-256 hex digest of text. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/hash/sha256.
| Argument | Type | Description |
|---|---|---|
| text | string | string |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "string"
}
}
}Caller IP geolocation (country, city, ASN, timezone). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/ip.
No arguments.
{
"type": "object",
"properties": {}
}Format and prettify a JSON document. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/json/format.
| Argument | Type | Description |
|---|---|---|
| text | string | string |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "string"
}
}
}Validate a JSON document's syntax. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/json/validate.
| Argument | Type | Description |
|---|---|---|
| text | string | string |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "string"
}
}
}Decode a JWT header+payload (no signature verification). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/jwt/decode.
| Argument | Type | Description |
|---|---|---|
| token | string | string |
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "string"
}
}
}Convert basic markdown to HTML. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/markdown/to-html.
| Argument | Type | Description |
|---|---|---|
| text | string | string |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "string"
}
}
}QR code as SVG (max 106 bytes of text). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/qr.
| Argument | Type | Description |
|---|---|---|
| size | string | Size, default 200 |
| text* | string | Text to encode |
{
"type": "object",
"required": [
"text"
],
"properties": {
"size": {
"type": "string",
"description": "Size, default 200"
},
"text": {
"type": "string",
"description": "Text to encode"
}
}
}Domain registration data (RDAP). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/rdap/{domain}.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name"
}
}
}Convert a time between timezones. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/time/convert.
| Argument | Type | Description |
|---|---|---|
| time | string | string |
| to_tz | string | string |
| from_tz | string | string |
{
"type": "object",
"properties": {
"time": {
"type": "string",
"description": "string"
},
"to_tz": {
"type": "string",
"description": "string"
},
"from_tz": {
"type": "string",
"description": "string"
}
}
}Current time in any IANA timezone. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/time/now.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone |
{
"type": "object",
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone"
}
}
}Unit conversion (length/weight/temp/volume/data/speed). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/devutils/units/convert.
| Argument | Type | Description |
|---|---|---|
| to* | string | To unit |
| from* | string | From unit |
| value* | string | Value |
{
"type": "object",
"required": [
"from",
"to",
"value"
],
"properties": {
"to": {
"type": "string",
"description": "To unit"
},
"from": {
"type": "string",
"description": "From unit"
},
"value": {
"type": "string",
"description": "Value"
}
}
}Parse a user-agent string into browser/OS/device/bot. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/devutils/useragent/parse.
| Argument | Type | Description |
|---|---|---|
| user_agent | string | string |
{
"type": "object",
"properties": {
"user_agent": {
"type": "string",
"description": "string"
}
}
}Match a plain-language task to ranked agent tools/services. $0.02 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/discovery/match.
| Argument | Type | Description |
|---|---|---|
| task* | string | string (required) - plain-language task |
| limit | integer | integer 1-20, default 5 |
| max_price | number | number - max USD per call |
{
"type": "object",
"required": [
"task"
],
"properties": {
"task": {
"type": "string",
"description": "string (required) - plain-language task"
},
"limit": {
"type": "integer",
"description": "integer 1-20, default 5"
},
"max_price": {
"type": "number",
"description": "number - max USD per call"
}
}
}Field-level change events computed between held EMA snapshot generations: per medicine when an identity is given ({ema_product_number}, or a resolved {name} / {inn}), feed-wide (all held product numbers, capped at 100 events per call, truncation flagged) when only {since} is given. Event types: added, status_changed, revision_advanced, procedure_updated, withdrawn_or_suspended_transition (a labelled subcase of status_changed, emitted additionally), field_changed — computed only from held diffs and source stamps, never inferred. since is a generation id or a UTC timestamp; a since before the first held generation is clamped to it and the clamp is stated in the payload; with no since, the window is the latest consecutive pair only. An unchanged medicine in the window delivers an explicit empty events list with covered:true — a delivered answer, not an error. Every payload carries the EMA acknowledgement + official-text-prevails lines. Free pre-check at POST /toll/ema/changes/preflight (tool ema_changes_preflight). Price: $0.01 per call (RULED). — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/ema/changes.
| Argument | Type | Description |
|---|---|---|
| inn | string | |
| name | string | |
| since | string | |
| ema_product_number | string |
{
"type": "object",
"properties": {
"inn": {
"type": "string"
},
"name": {
"type": "string"
},
"since": {
"type": "string"
},
"ema_product_number": {
"type": "string"
}
}
}FREE pre-check twin for ema_changes: validation + identity resolution + coverage + toll fingerprint, with no change events. Accepts the same inputs as ema_changes (an identity and/or {since}; feed-wide when only {since} is given). The toll quoted is $0.01 RULED (10000 USDC units / 68000 lamports). You only pay for delivered answers. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/ema/changes/preflight.
| Argument | Type | Description |
|---|---|---|
| inn | string | |
| name | string | |
| since | string | |
| ema_product_number | string |
{
"type": "object",
"properties": {
"inn": {
"type": "string"
},
"name": {
"type": "string"
},
"since": {
"type": "string"
},
"ema_product_number": {
"type": "string"
}
}
}One EMA centrally authorised medicine at the latest held generation: every DESIGN.md §2 served field verbatim (name, INN, active substance, therapeutic area (MeSH), ATC code, pharmacotherapeutic group, EMA product number, marketing authorisation holder, opinion adopted date, marketing authorisation issued date, EC decision date, revision number, medicine_status, opinion_status, latest procedure affecting product information and its date, first_published_date, last_updated_date), the generation's source UTC stamp, and the EMA acknowledgement + official-text-prevails lines carried in every payload. Facts only, never advice: no dosage, therapeutic claim, patient-availability judgement, or annex (SmPC / leaflet) text exists in this service; barred shapes are refused free. Structured input only: one identity — {ema_product_number}, {name} (exact, case-insensitive), or {inn} (exact, case-insensitive). Ambiguous identities are refused free with the candidate product numbers listed. Free pre-check at POST /toll/ema/record/preflight (tool ema_record_preflight). Price: $0.01 per call (RULED). — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/ema/record.
| Argument | Type | Description |
|---|---|---|
| inn | string | |
| name | string | |
| ema_product_number | string |
{
"type": "object",
"anyOf": [
{
"required": [
"ema_product_number"
]
},
{
"required": [
"name"
]
},
{
"required": [
"inn"
]
}
],
"properties": {
"inn": {
"type": "string"
},
"name": {
"type": "string"
},
"ema_product_number": {
"type": "string"
}
}
}FREE pre-check twin for ema_record: validation + identity resolution + coverage + toll fingerprint, with no record fields. Servable answers state the deliverable shape and freshness class; ambiguous identities list the candidate EMA product numbers free. The toll quoted is $0.01 RULED (10000 USDC units / 68000 lamports). You only pay for delivered answers. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/ema/record/preflight.
| Argument | Type | Description |
|---|---|---|
| inn | string | |
| name | string | |
| ema_product_number | string |
{
"type": "object",
"anyOf": [
{
"required": [
"ema_product_number"
]
},
{
"required": [
"name"
]
},
{
"required": [
"inn"
]
}
],
"properties": {
"inn": {
"type": "string"
},
"name": {
"type": "string"
},
"ema_product_number": {
"type": "string"
}
}
}Calculate CO2e for one activity from a published factor. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/emissions/calculate.
| Argument | Type | Description |
|---|---|---|
| year | integer | integer - optional activity year selecting the factor vintage; omitted = latest vintage, disclosed in the answer |
| quantity* | number | number (required) - activity quantity in the factor's unit (must be > 0) |
| factor_id* | string | string (required) - factor id from GET /toll/emissions/factors (base id or full record id incl. vintage) |
{
"type": "object",
"required": [
"factor_id",
"quantity"
],
"properties": {
"year": {
"type": "integer",
"description": "integer - optional activity year selecting the factor vintage; omitted = latest vintage, disclosed in the answer"
},
"quantity": {
"type": "number",
"description": "number (required) - activity quantity in the factor's unit (must be > 0)"
},
"factor_id": {
"type": "string",
"description": "string (required) - factor id from GET /toll/emissions/factors (base id or full record id incl. vintage)"
}
}
}Calculate CO2e for up to 100 activities in one call. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/emissions/calculate/batch.
| Argument | Type | Description |
|---|---|---|
| items* | array | array (required) - 1-100 calculation items, each {factor_id: string, quantity: number, year?: integer} |
{
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "string"
},
"description": "array (required) - 1-100 calculation items, each {factor_id: string, quantity: number, year?: integer}"
}
}
}Fetch an ETF's full distribution history. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/etf/distributions/{ticker}.
| Argument | Type | Description |
|---|---|---|
| price | string | Optional current price for yield math |
| ticker* | string | ETF ticker |
{
"type": "object",
"required": [
"ticker"
],
"properties": {
"price": {
"type": "string",
"description": "Optional current price for yield math"
},
"ticker": {
"type": "string",
"description": "ETF ticker"
}
}
}Simulate an income portfolio and its distribution flywheel. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/etf/distributions/simulate.
| Argument | Type | Description |
|---|---|---|
| reinvest | boolean | boolean - default true (flywheel compounding; linear projection when off or any holding lacks a price) |
| allocations* | array | array (required) - holdings: {ticker, shares} | {ticker, units, price_per_share} | {ticker, amount_usd, price_per_share} (price_per_share required for units/amount forms) |
| horizon_years | integer | integer 1-10, default 5 |
{
"type": "object",
"required": [
"allocations"
],
"properties": {
"reinvest": {
"type": "boolean",
"description": "boolean - default true (flywheel compounding; linear projection when off or any holding lacks a price)"
},
"allocations": {
"type": "array",
"items": {
"type": "string"
},
"description": "array (required) - holdings: {ticker, shares} | {ticker, units, price_per_share} | {ticker, amount_usd, price_per_share} (price_per_share required for units/amount forms)"
},
"horizon_years": {
"type": "integer",
"description": "integer 1-10, default 5"
}
}
}Classify an Ethereum address: EOA vs contract, proxy, token. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/evm/address-verdict.
| Argument | Type | Description |
|---|---|---|
| address* | string | string (required) - 0x-prefixed 20-byte Ethereum address |
{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "string (required) - 0x-prefixed 20-byte Ethereum address"
}
}
}Decoded ERC-20 transfer history for an Ethereum address. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/evm/transfers.
| Argument | Type | Description |
|---|---|---|
| limit | integer | integer 1-100, default 25 |
| cursor | string | string - opaque cursor from a prior response's next_cursor |
| address* | string | string (required) - 0x-prefixed 20-byte Ethereum address |
{
"type": "object",
"required": [
"address"
],
"properties": {
"limit": {
"type": "integer",
"description": "integer 1-100, default 25"
},
"cursor": {
"type": "string",
"description": "string - opaque cursor from a prior response's next_cursor"
},
"address": {
"type": "string",
"description": "string (required) - 0x-prefixed 20-byte Ethereum address"
}
}
}Decode an Ethereum transaction: function, args, amounts, ENS. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/evm/tx-decode.
| Argument | Type | Description |
|---|---|---|
| tx_hash* | string | string (required) - 0x-prefixed 32-byte transaction hash |
{
"type": "object",
"required": [
"tx_hash"
],
"properties": {
"tx_hash": {
"type": "string",
"description": "string (required) - 0x-prefixed 32-byte transaction hash"
}
}
}FREE fact bank catalog. Counts and labels only: stream labels, entity and fact counts, field names, op list and RULED prices, store freshness. No fact values. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/facts/catalog.
No arguments.
{
"type": "object",
"properties": {}
}FREE fact bank health. Counts only: snapshot_loaded, fact/entity totals, stream labels, store freshness and store_stale flag. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/facts/health.
No arguments.
{
"type": "object",
"properties": {}
}Fact bank STATUS lookup, $0.01 per call (x402), price RULED. Latest-per-status_field current state for one entity, served verbatim with per-fact provenance. Call fact_bank_status_preflight first to check coverage for free. — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/facts/status.
| Argument | Type | Description |
|---|---|---|
| name | string | Name-resolution form (alternative to entity_id). |
| team | string | |
| limit | integer | |
| cursor | string | |
| league | string | |
| stream* | string | |
| position | string | |
| entity_id | string | Canonical entity id, verbatim as stored. |
| series_id | string | |
| status_field | string |
FREE preflight for fact_bank_status. Counts only: existence, coverage counts, per-field history depth, freshness, servable/reason_class, and the $0.01 RULED toll quote. No fact values are returned. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/facts/status/preflight.
| Argument | Type | Description |
|---|---|---|
| name | string | Name-resolution form (alternative to entity_id). |
| team | string | |
| limit | integer | |
| cursor | string | |
| league | string | |
| stream* | string | |
| position | string | |
| entity_id | string | Canonical entity id, verbatim as stored. |
| series_id | string |
{
"type": "object",
"required": [
"stream"
],
"properties": {
"name": {
"type": "string",
"description": "Name-resolution form (alternative to entity_id)."
},
"team": {
"type": "string"
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"league": {
"type": "string"
},
"stream": {
"enum": [
"nfl-player-status",
"epl-player-status",
"bls-release-status",
"fed-board-status"
],
"type": "string"
},
"position": {
"type": "string"
},
"entity_id": {
"type": "string",
"description": "Canonical entity id, verbatim as stored."
},
"series_id": {
"type": "string"
}
}
}Fact bank TENDENCY, $0.02 per call (x402), price RULED. Computed direction over one (entity, status_field) history with at least 3 facts; the verbatim steps and any rank map are shipped so the computation is checkable. Nominal, period-parameterised and structured fields are refused as not_computable. Call fact_bank_tendency_preflight first to check eligibility for free. — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/facts/tendency.
| Argument | Type | Description |
|---|---|---|
| name | string | Name-resolution form (alternative to entity_id). |
| team | string | |
| limit | integer | |
| cursor | string | |
| league | string | |
| stream* | string | |
| position | string | |
| entity_id | string | Canonical entity id, verbatim as stored. |
| series_id | string |
FREE preflight for fact_bank_tendency. Counts only: eligibility, history depth, distinct-value count, freshness, servable/reason_class, and the $0.02 RULED toll quote. No fact values are returned. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: POST https://exchangerebel.com/toll/facts/tendency/preflight.
| Argument | Type | Description |
|---|---|---|
| name | string | Name-resolution form (alternative to entity_id). |
| team | string | |
| limit | integer | |
| cursor | string | |
| league | string | |
| stream* | string | |
| position | string | |
| entity_id | string | Canonical entity id, verbatim as stored. |
| series_id | string | |
| status_field* | string |
Solana landing recipe: one call that fuses the fee oracle's /estimate and /optimize — send an unsigned transaction, get the simulated compute-unit limit, priority-fee tiers (economy=p50, balanced=p75, fast=p95) with the chosen tier marked, the expected total fee, the ready-to-sign rewritten transaction, and a precomputed 3-rung escalation ladder. Optional fee_cap_lamports: if the chosen tier exceeds it, the answer flags cap_exceeded and returns no rewritten transaction. Paid: $0.01 flat per call via x402. Free pre-check at POST /toll/fees/recipe/preflight (same JSON body) validates structurally and states the exact price before payment; our-side failure after settlement queues an automatic refund intent (you only pay for delivered answers).
| Argument | Type | Description |
|---|---|---|
| urgency | string | economy=p50, balanced=p75, fast=p95 priority-fee percentile; selects the tier baked into rewritten_tx. |
| fee_cap_lamports | integer | Optional max total fee in lamports. If the chosen tier's expected total fee exceeds it, the answer carries cap_exceeded:true and rewritten_tx:null — never an over-cap transaction. |
| transaction_base64* | string | Unsigned Solana transaction, base64 (same field as /estimate and /optimize). Required. |
{
"type": "object",
"required": [
"transaction_base64"
],
"properties": {
"urgency": {
"enum": [
"economy",
"balanced",
"fast"
],
"type": "string",
"default": "balanced",
"description": "economy=p50, balanced=p75, fast=p95 priority-fee percentile; selects the tier baked into rewritten_tx."
},
"fee_cap_lamports": {
"type": "integer",
"minimum": 0,
"description": "Optional max total fee in lamports. If the chosen tier's expected total fee exceeds it, the answer carries cap_exceeded:true and rewritten_tx:null — never an over-cap transaction."
},
"transaction_base64": {
"type": "string",
"description": "Unsigned Solana transaction, base64 (same field as /estimate and /optimize). Required."
}
}
}Estimate a Solana transaction's total fee cost. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/fees/estimate.
| Argument | Type | Description |
|---|---|---|
| accounts | array | array of pubkeys |
| priority | string | low|medium|high |
| transaction_base64 | string | string (or use accounts) |
{
"type": "object",
"properties": {
"accounts": {
"type": "array",
"items": {
"type": "string"
},
"description": "array of pubkeys"
},
"priority": {
"type": "string",
"description": "low|medium|high"
},
"transaction_base64": {
"type": "string",
"description": "string (or use accounts)"
}
}
}Return an unsigned, fee-optimized version of a transaction. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/fees/optimize.
| Argument | Type | Description |
|---|---|---|
| priority | string | low|medium|high |
| transaction_base64 | string | string |
{
"type": "object",
"properties": {
"priority": {
"type": "string",
"description": "low|medium|high"
},
"transaction_base64": {
"type": "string",
"description": "string"
}
}
}Fleet KPIs for ExchangeRebel, computed live from the systems themselves: services live, paid endpoints, MCP tools, external settlements, agents served, bots connected, script calls served, and repeat customers — each with its printed definition and, where a counter is new, its counting-since date. Counts only: no customer identities, no per-agent details, ever. The same result object powers the human board page, so the machine door and the human door can never disagree. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/api/kpis.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Fleet freshness / what changed across ExchangeRebel since a timestamp: per-service freshness metadata only (as_of stamps and whether each dataset-grade service's data is newer than `since`), each service's changes-op pointer (supported, paid, price, basis, endpoint) mirrored from its own free health envelope, and whitelisted already-free freshness facts. Change COUNTS are returned only for the free Ideas Commons event log; paid services' change counts are part of their paid changes ops and are never republished here. Never returns record contents or paid payloads. FREE — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/api/freshness.
| Argument | Type | Description |
|---|---|---|
| since* | string | ISO-8601 timestamp, e.g. 2026-10-01T00:00:00Z. Required. A future timestamp is valid and returns zeros/nulls. |
{
"type": "object",
"required": [
"since"
],
"properties": {
"since": {
"type": "string",
"description": "ISO-8601 timestamp, e.g. 2026-10-01T00:00:00Z. Required. A future timestamp is valid and returns zeros/nulls."
}
},
"additionalProperties": false
}Fetch funding rates across three perp venues. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/funding/funding/{symbol}.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Symbol, flexible format (BTC, btc-usdt, BTC/USDT) |
{
"type": "object",
"required": [
"symbol"
],
"properties": {
"symbol": {
"type": "string",
"description": "Symbol, flexible format (BTC, btc-usdt, BTC/USDT)"
}
}
}Fetch the liquidation heatmap for a symbol. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/funding/liquidations/{symbol}.
| Argument | Type | Description |
|---|---|---|
| hours | string | Window hours, default 24 |
| symbol* | string | Symbol |
{
"type": "object",
"required": [
"symbol"
],
"properties": {
"hours": {
"type": "string",
"description": "Window hours, default 24"
},
"symbol": {
"type": "string",
"description": "Symbol"
}
}
}Same-story headline clusters over a GDELT query pool. Deterministic headline clustering COMPUTED by this service over GDELT headline metadata (title/domain/url/timestamps only; article text is never read): overlap coefficient over normalized headline token sets, threshold 0.40 with at least 3 shared tokens, single-linkage. Not a GDELT-reported grouping. Singletons are counted, not returned. Call gdelt_news_clusters_preflight first to check story counts for free. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/news/clusters.
| Argument | Type | Description |
|---|---|---|
| q* | string | |
| days | integer | |
| limit | integer | Article pool size the clustering runs over; stated in the response as articles_considered. |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string"
},
"days": {
"type": "integer",
"default": 7,
"maximum": 31,
"minimum": 1
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Article pool size the clustering runs over; stated in the response as articles_considered."
}
}
}FREE preflight for gdelt_news_clusters. Counts only: articles_in_window, multi_outlet_story_count, singleton_count, servable/reason_class, and the $0.01 toll quote. No cluster membership or representatives are returned. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/news/clusters/preflight.
| Argument | Type | Description |
|---|---|---|
| q* | string | |
| days | integer | |
| limit | integer |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string"
},
"days": {
"type": "integer",
"default": 7,
"maximum": 31,
"minimum": 1
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1
}
}
}Crypto-vertical GDELT news feed. Deterministic whole-token matching over headline text (title/domain/url only; article text is never read). Tags are COMPUTED by this service, not reported by GDELT. Each article carries computed_tags {assets, topics} (taxonomy crypto-v1) and crypto_native_source. Call gdelt_news_crypto_preflight first to check coverage for free. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/news/crypto.
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| lang | string | Optional ISO language code. |
| asset | string | Optional taxonomy asset id, e.g. BTC, ETH, SOL, XRP, DOGE, USDC, USDT, HYPE, TAO, NEAR, SUI, LTC, SEI, AURORA. |
| limit | integer | |
| topic | string | Optional taxonomy topic id, e.g. etf, regulation, stablecoin, tokenization, treasury, defi, hack-exploit. |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 7,
"maximum": 31,
"minimum": 1
},
"lang": {
"type": "string",
"description": "Optional ISO language code."
},
"asset": {
"type": "string",
"description": "Optional taxonomy asset id, e.g. BTC, ETH, SOL, XRP, DOGE, USDC, USDT, HYPE, TAO, NEAR, SUI, LTC, SEI, AURORA."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"topic": {
"type": "string",
"description": "Optional taxonomy topic id, e.g. etf, regulation, stablecoin, tokenization, treasury, defi, hack-exploit."
}
}
}FREE preflight for gdelt_news_crypto. Counts only: articles_in_window, crypto_matched_count, per_asset_counts, per_topic_counts, servable/reason_class, and the $0.01 toll quote. No titles, URLs, or tag assignments are returned. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/news/crypto/preflight.
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| lang | string | |
| asset | string | |
| limit | integer | |
| topic | string |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 7,
"maximum": 31,
"minimum": 1
},
"lang": {
"type": "string"
},
"asset": {
"type": "string"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"topic": {
"type": "string"
}
}
}FREE preflight for the held gdelt enriched search. Counts + snapshot state only: articles_in_window, gkg_snapshot_present, gkg_snapshot_as_of, gkg_coverage_pct, servable/reason_class, and the $0.01 toll quote. No GKG field values are returned. Until the GKG ingest is loaded it honestly reports servable:false, reason_class gkg_snapshot_absent; the enriched op itself is held and is not purchasable on any surface. — no payment required: call directly without payment (no x402 challenge; this tool is free). HTTP equivalent: GET https://exchangerebel.com/toll/news/enriched/preflight.
| Argument | Type | Description |
|---|---|---|
| q* | string | |
| days | integer | |
| lang | string | |
| limit | integer |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string"
},
"days": {
"type": "integer",
"default": 7,
"maximum": 31,
"minimum": 1
},
"lang": {
"type": "string"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
}
}
}OpenAI-compatible chat completion over the open-weight GPT-OSS 120B model: openai/gpt-oss-120b (GPT-OSS family, Apache 2.0). Paid: $0.01 flat per call via x402. Limits: estimated input <= 2000 tokens (estimate: chars/4 + 4 per message), max_tokens <= 500, temperature 0..2, NO streaming at v1. Free pre-check at POST /toll/inference/chat/preflight (same JSON body) validates and states the exact price before payment; upstream failure after settlement queues an automatic refund (you only pay for delivered answers). — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/inference/chat.
| Argument | Type | Description |
|---|---|---|
| model* | string | |
| messages* | array | |
| max_tokens | integer | |
| temperature | number |
{
"type": "object",
"required": [
"model",
"messages"
],
"properties": {
"model": {
"enum": [
"openai/gpt-oss-120b"
],
"type": "string"
},
"messages": {
"type": "array",
"items": {
"type": "object",
"required": [
"role",
"content"
],
"properties": {
"role": {
"type": "string"
},
"content": {
"type": [
"string",
"array"
]
}
}
},
"minItems": 1
},
"max_tokens": {
"type": "integer",
"maximum": 500,
"minimum": 1
},
"temperature": {
"type": "number",
"maximum": 2,
"minimum": 0
}
}
}Search remote jobs across three public boards. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/jobs/search.
| Argument | Type | Description |
|---|---|---|
| q | string | Keyword query (titles/companies/tags) |
| remote | string | true = remote only, false = on-site only |
| source | string | Comma-separated subset of arbeitnow,himalayas,remotive |
| location | string | Location substring |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Keyword query (titles/companies/tags)"
},
"remote": {
"type": "string",
"description": "true = remote only, false = on-site only"
},
"source": {
"type": "string",
"description": "Comma-separated subset of arbeitnow,himalayas,remotive"
},
"location": {
"type": "string",
"description": "Location substring"
}
}
}Congress bills (Congress.gov, public domain). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/macro/bills.
| Argument | Type | Description |
|---|---|---|
| limit | string | Result limit |
| congress | string | Congress number |
{
"type": "object",
"properties": {
"limit": {
"type": "string",
"description": "Result limit"
},
"congress": {
"type": "string",
"description": "Congress number"
}
}
}Population data (US Census, public domain). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/macro/census/population.
| Argument | Type | Description |
|---|---|---|
| state | string | State filter |
{
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "State filter"
}
}
}US CPI series (BLS, public domain). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/macro/cpi.
| Argument | Type | Description |
|---|---|---|
| end | string | End period |
| start | string | Start period |
{
"type": "object",
"properties": {
"end": {
"type": "string",
"description": "End period"
},
"start": {
"type": "string",
"description": "Start period"
}
}
}Federal funds rate (FRED, public domain). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/macro/fed-rate.
No arguments.
{
"type": "object",
"properties": {}
}US payrolls series (BLS, public domain). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/macro/payrolls.
| Argument | Type | Description |
|---|---|---|
| end | string | End period |
| start | string | Start period |
{
"type": "object",
"properties": {
"end": {
"type": "string",
"description": "End period"
},
"start": {
"type": "string",
"description": "Start period"
}
}
}US unemployment series (BLS, public domain). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/macro/unemployment.
| Argument | Type | Description |
|---|---|---|
| end | string | End period |
| start | string | Start period |
{
"type": "object",
"properties": {
"end": {
"type": "string",
"description": "End period"
},
"start": {
"type": "string",
"description": "Start period"
}
}
}Per-NDC per-unit NADAC values at every held snapshot generation, with latest-vs-previous and latest-vs-12-month-anchor deltas. Input {ndc} or {ndcs: [max 25]}; uncovered batch members are marked covered:false. Free pre-check at POST /toll/nadac/changes/preflight. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/nadac/changes.
| Argument | Type | Description |
|---|---|---|
| ndc | string | |
| ndcs | array |
{
"type": "object",
"properties": {
"ndc": {
"type": "string"
},
"ndcs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 25
}
}
}Dispersion across all latest-generation presentations sharing the input NDC's exact ndc_description: presentations, stats {count,min,max,median,mean}, and brand-vs-generic medians and gap with honest nulls when a side is absent. Free pre-check at POST /toll/nadac/dispersion/preflight. $0.02 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/nadac/dispersion.
| Argument | Type | Description |
|---|---|---|
| ndc* | string |
{
"type": "object",
"required": [
"ndc"
],
"properties": {
"ndc": {
"type": "string"
}
}
}Per-NDC NADAC fact at the latest held generation: verbatim published fields (ndc_description, nadac_per_unit, pricing_unit, effective_date, classification, corresponding-generic pair), the computed corresponding-generic gap, and long-horizon changes (~1 week / ~1 month / ~6 months / 12 months, honest nulls). NADAC is a national average pharmacy acquisition benchmark published by CMS — not a consumer figure; every response carries the label sentence. Structured input only. Free pre-check at POST /toll/nadac/fact/preflight. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/nadac/fact.
| Argument | Type | Description |
|---|---|---|
| ndc* | string |
{
"type": "object",
"required": [
"ndc"
],
"properties": {
"ndc": {
"type": "string"
}
}
}Search global news coverage (GDELT). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/news/search.
| Argument | Type | Description |
|---|---|---|
| q* | string | Query |
| days | string | Lookback days |
| lang | string | Language filter |
| limit | string | Result limit |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Query"
},
"days": {
"type": "string",
"description": "Lookback days"
},
"lang": {
"type": "string",
"description": "Language filter"
},
"limit": {
"type": "string",
"description": "Result limit"
}
}
}Coverage timeline for a query (GDELT). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/news/timeline.
| Argument | Type | Description |
|---|---|---|
| q* | string | Query |
| days | string | Lookback days |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Query"
},
"days": {
"type": "string",
"description": "Lookback days"
}
}
}Trending stories (GDELT). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/news/trending.
| Argument | Type | Description |
|---|---|---|
| days | string | Lookback days |
| limit | string | Result limit |
{
"type": "object",
"properties": {
"days": {
"type": "string",
"description": "Lookback days"
},
"limit": {
"type": "string",
"description": "Result limit"
}
}
}Compose one pre-computed Agent Data Core pack from the Layer 0 store: the pack's authored guidance plus, for every constituent, its pack-authored use-when line, verification state, and verbatim endpoints, with totals computed at compose time. An unknown pack id is answered free, before payment. Per-pack price (RULED): chain-reads $0.01 per call; web-evidence, company-diligence, market-intel and safety-preflight $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/packs/{pack_id}.
| Argument | Type | Description |
|---|---|---|
| pack_id* | string | The pack id to compose (see packs_catalog): chain-reads, web-evidence, company-diligence, market-intel or safety-preflight. |
{
"type": "object",
"required": [
"pack_id"
],
"properties": {
"pack_id": {
"type": "string",
"description": "The pack id to compose (see packs_catalog): chain-reads, web-evidence, company-diligence, market-intel or safety-preflight."
}
},
"additionalProperties": false
}FREE catalog of the Agent Data Core pre-computed packs: for each pack, its id, name, buyer job, use-when line, proven payer category evidence, and constituent service ids. Returns no endpoint data and no pack prices. Free — no payment required, call it directly. HTTP equivalent: GET https://exchangerebel.com/toll/packs/packs.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}ERCOT daily battery charge/discharge windows. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/power/flags/battery.
| Argument | Type | Description |
|---|---|---|
| hub | string | Optional ERCOT hub filter (HB_*); omit for all 7 hubs |
{
"type": "object",
"properties": {
"hub": {
"type": "string",
"description": "Optional ERCOT hub filter (HB_*); omit for all 7 hubs"
}
}
}ERCOT hub-spread congestion spikes, ranked. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/power/flags/congestion.
| Argument | Type | Description |
|---|---|---|
| threshold | string | Spread threshold USD/MWh, 5..500, default 25 |
| window_hours | string | Trailing window in hours, 1..168, default 48 |
{
"type": "object",
"properties": {
"threshold": {
"type": "string",
"description": "Spread threshold USD/MWh, 5..500, default 25"
},
"window_hours": {
"type": "string",
"description": "Trailing window in hours, 1..168, default 48"
}
}
}ERCOT DA vs RT divergence flags for one hub. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/power/flags/dart.
| Argument | Type | Description |
|---|---|---|
| hub* | string | ERCOT hub: HB_NORTH | HB_HOUSTON | HB_SOUTH | HB_WEST | HB_PAN | HB_BUSAVG | HB_HUBAVG |
| threshold | string | Divergence threshold USD/MWh, 5..500, default 25 |
| window_hours | string | Trailing window in hours, 1..168, default 48 |
{
"type": "object",
"required": [
"hub"
],
"properties": {
"hub": {
"type": "string",
"description": "ERCOT hub: HB_NORTH | HB_HOUSTON | HB_SOUTH | HB_WEST | HB_PAN | HB_BUSAVG | HB_HUBAVG"
},
"threshold": {
"type": "string",
"description": "Divergence threshold USD/MWh, 5..500, default 25"
},
"window_hours": {
"type": "string",
"description": "Trailing window in hours, 1..168, default 48"
}
}
}ERCOT negative-price windows: 24h/7d counts. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/power/flags/negative.
| Argument | Type | Description |
|---|---|---|
| hub | string | Optional ERCOT hub filter (HB_*); omit for all 7 hubs |
{
"type": "object",
"properties": {
"hub": {
"type": "string",
"description": "Optional ERCOT hub filter (HB_*); omit for all 7 hubs"
}
}
}Ranked ERCOT multi-hub power-flag scan. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/power/scan.
No arguments.
{
"type": "object",
"properties": {}
}Batch-convert Publisher files to PDF (async). $0.05 per file, up to 100 files per batch — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/pubconvert/batch.
No arguments.
{
"type": "object",
"properties": {}
}Convert a Publisher file to PDF + verdict. $0.10 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/pubconvert/convert.
No arguments.
{
"type": "object",
"properties": {}
}Publisher file verification verdict only. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/pubconvert/verify.
No arguments.
{
"type": "object",
"properties": {}
}Match-state changes over watched products since an ISO8601 timestamp. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/recalls/changes-since.
| Argument | Type | Description |
|---|---|---|
| since* | string |
{
"type": "object",
"required": [
"since"
],
"properties": {
"since": {
"type": "string"
}
}
}Join a product identity (GTIN/UPC, model, or listing) to US CPSC + openFDA recall status: graded verdict clear | matched | probable with confidence and evidence. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/recalls/product-check.
| Argument | Type | Description |
|---|---|---|
| upc | string | |
| gtin | string | |
| brand | string | |
| model | string | |
| listing | object |
{
"type": "object",
"properties": {
"upc": {
"type": "string"
},
"gtin": {
"type": "string"
},
"brand": {
"type": "string"
},
"model": {
"type": "string"
},
"listing": {
"type": "object"
}
}
}Fetch one full normalized recall record by its id. $0.02 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/recalls/recall/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | Source-prefixed record id, e.g. fda:H-1395-2026, cpsc:11020, nhtsa:19V903000 |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Source-prefixed record id, e.g. fda:H-1395-2026, cpsc:11020, nhtsa:19V903000"
}
}
}Search FDA, CPSC, and NHTSA recall records in one call. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/recalls/search.
| Argument | Type | Description |
|---|---|---|
| q | string | Free-text query over product, firm, hazard (or use filters alone) |
| to | string | Announced-date upper bound YYYY-MM-DD |
| from | string | Announced-date lower bound YYYY-MM-DD |
| class | string | FDA hazard class I | II | III |
| limit | string | 1-50, default 20 |
| source | string | fda | cpsc | nhtsa | all (default all) |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free-text query over product, firm, hazard (or use filters alone)"
},
"to": {
"type": "string",
"description": "Announced-date upper bound YYYY-MM-DD"
},
"from": {
"type": "string",
"description": "Announced-date lower bound YYYY-MM-DD"
},
"class": {
"type": "string",
"description": "FDA hazard class I | II | III"
},
"limit": {
"type": "string",
"description": "1-50, default 20"
},
"source": {
"type": "string",
"description": "fda | cpsc | nhtsa | all (default all)"
}
}
}List NHTSA recall campaigns for one vehicle. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/recalls/vehicle.
| Argument | Type | Description |
|---|---|---|
| make* | string | Vehicle make, e.g. ford |
| year* | string | Model year, e.g. 2025 |
| model* | string | Vehicle model, e.g. f-150 |
{
"type": "object",
"required": [
"make",
"model",
"year"
],
"properties": {
"make": {
"type": "string",
"description": "Vehicle make, e.g. ford"
},
"year": {
"type": "string",
"description": "Model year, e.g. 2025"
},
"model": {
"type": "string",
"description": "Vehicle model, e.g. f-150"
}
}
}Register a product identity into the recall-join watched set. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/recalls/watch.
| Argument | Type | Description |
|---|---|---|
| gtin | string | |
| model | string |
{
"type": "object",
"properties": {
"gtin": {
"type": "string"
},
"model": {
"type": "string"
}
}
}Render + read/extract bundle of one public web page, self-rendered by our own headless Chromium: body {url, op?: bundle|full-page|read, width?, height?, format?: markdown|text, max_chars?} -> PNG inline (base64 in JSON, image legs) plus extracted text/markdown from the SAME render session, with render metadata and extraction counts. Bundle leg $0.02, full-page leg $0.05, read leg (extraction only) $0.01 — leg selected by body field op; the 402 challenge carries the selected leg's price. Full SSRF fence, refusals free before payment. Free pre-check at POST /toll/render/preflight (shape + full fence incl. resolve-then-pin, no render). $0.02 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/render.
| Argument | Type | Description |
|---|---|---|
| op | string | Leg: bundle (default, viewport PNG + extraction, $0.02), full-page (full-page PNG + extraction, $0.05, height capped at 8,000 px), or read (extraction only, $0.01). |
| url* | string | The bare public URL to render. No credentials in the URL; caller cookies/headers are never accepted. |
| width | integer | Viewport width in CSS pixels, 1..1920, default 1280. |
| format | string | Extraction format: markdown (default) or text. |
| height | integer | Viewport height in CSS pixels, 1..1080, default 800. Bundle and read legs only; rejected with the full-page leg. |
| max_chars |
Call Solana JSON-RPC (cached, failover proxy). $0.01 per call via MCP (each tool call is toll-gated individually; the direct HTTP gateway at /toll/rpc is billed as $0.01 per 1,000 requests = $0.00001/request) — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/rpc/. Generic Solana JSON-RPC passthrough (cached, failover proxy): pass the RPC method and its params array. Intended for standard Solana read methods (getBalance, getBlock, getTransaction, getSignaturesForAddress, getAccountInfo, ...). One MCP tool call is one RPC call.
| Argument | Type | Description |
|---|---|---|
| method* | string | Solana JSON-RPC method name, e.g. getBalance |
| params | array | Positional params array for the RPC method |
{
"type": "object",
"required": [
"method"
],
"properties": {
"method": {
"type": "string",
"description": "Solana JSON-RPC method name, e.g. getBalance"
},
"params": {
"type": "array",
"items": {},
"description": "Positional params array for the RPC method"
}
}
}Single-ticker snapshot (delayed quote). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/screener/quote/{ticker}.
| Argument | Type | Description |
|---|---|---|
| ticker* | string | Ticker symbol |
{
"type": "object",
"required": [
"ticker"
],
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol"
}
}
}Screen the S&P 500 with Finviz-style filters. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/screener/screen.
| Argument | Type | Description |
|---|---|---|
| limit | integer | integer |
| offset | integer | integer |
| pe_max | number | number |
| pe_min | number | number |
| sector | string | string |
| country | string | string |
| sort_by | string | string |
| industry | string | string |
| sort_dir | string | string |
| price_max | number | number |
| price_min | number | number |
Screenshot of one public web page, self-rendered by our own headless Chromium: body {url, tier?: viewport|full-page, width?, height?} -> PNG inline (base64 in JSON) + render metadata. Viewport tier $0.03, full-page tier $0.02 (tier selected in the body; the 402 challenge carries the selected tier's price). Full SSRF fence, refusals free before payment. Free pre-check at POST /toll/screenshot/preflight (shape + full fence incl. resolve-then-pin, no render). $0.03 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/screenshot.
| Argument | Type | Description |
|---|---|---|
| url* | string | The bare public URL to render. No credentials in the URL; caller cookies/headers are never accepted. |
| tier | string | Capture tier: viewport (default, $0.03) or full-page ($0.02, page height capped at 8,000 px). |
| width | integer | Viewport width in CSS pixels, 1..1920, default 1280. |
| height | integer | Viewport height in CSS pixels, 1..1080, default 800. Viewport tier only; rejected with the full-page tier. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The bare public URL to render. No credentials in the URL; caller cookies/headers are never accepted."
},
"tier": {
"enum": [
"viewport",
"full-page"
],
"type": "string",
"description": "Capture tier: viewport (default, $0.03) or full-page ($0.02, page height capped at 8,000 px)."
},
"width": {
"type": "integer",
"maximum": 1920,
"minimum": 1,
"description": "Viewport width in CSS pixels, 1..1920, default 1280."
},
"height": {
"type": "integer",
"maximum": 1080,
"minimum": 1,
"description": "Viewport height in CSS pixels, 1..1080, default 800. Viewport tier only; rejected with the full-page tier."
}
}
}Poll the alerts view of a registered watch: the filings matching the watch's own rules that this service first saw since the cursor — new filings, /A amendments grouped to their base form, and deletion flags from weekly index reconciliation only. Paid via x402: $0.01 — RULED (10000 USDC units / 68000 SOL lamports) per delivered view — one poll delivers ALL matching events since the cursor, up to 200 per poll; it is NOT charged per event. Always call the free preflight first (same watch_id + cursor): GET /toll/secalerts/alerts/preflight returns the pending-event count only (no event content) — pending_count 0 is the complete free answer, so you never pay for an empty view. A settled poll that still delivers zero writes exactly one refund intent (net charge zero, cursor unmoved). If you lose a response, re-poll the same cursor within 7 days: the delivery record is re-served verbatim and free (redelivered: true). first_seen_at is ExchangeRebel's own detection timestamp — the moment this service first recorded the filing in its append-only store. The SEC publishes no availability timestamp, so no seller's first-seen time can be anything other than their own observation. For a filer's first-ever touch, the store is seeded from the filer's returned history and first_seen_at is the seed time (records carry seeded:true). Deletion flags are issued only for removals confirmed by the weekly full-index reconciliation: a deletion_flag event is produced only from a record whose provenance marks it weekly-index-reconciliation-sourced. Removals noticed when a single filer's submissions record is re-read are never issued as deletion alerts by this service. Until the weekly reconciliation is wired to the live store, deletion flags do not fire in production. Honest crossover: polls cost $0.01 (ruled price) per delivered alerts view. A caller whose watches deliver about 500 events a month is spending about $5.00 a month here — the price of Datamule's $5/month subscription — and continuous, high-volume watchers are better served by that subscription. This service is built for episodic, task-driven agent queries: register a watch, poll it when the task needs the answer, and pay only for delivered views. Price: $0.01 per call (per delivered alerts view). — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/secalerts/alerts.
| Argument |
|---|
Register a watch for SEC EDGAR filing alerts: a set of CIKs and/or tickers plus an optional form-type set. Paid via x402: $0.005 — RULED (5000 USDC units / 33500 SOL lamports). The $0.005 registration price is RULED (Mauricio, 2026-10-20) — the evaluation ladder figure, ruled as proposed. Always call the free preflight first (same body): POST /toll/secalerts/watch/preflight performs all validation, resolves tickers to CIKs, and returns the exact price ($0.005 — RULED) before any payment; an unresolvable ticker is a free unknown_ticker refusal, never a guess. Registration returns a watch_id (a bearer credential — possession IS read access to that watch's alerts view; there is no separate secret, no rotation, and no recovery for a lost watch_id) and its initial cursor: the watch reports only filings first seen after it was created. first_seen_at is ExchangeRebel's own detection timestamp — the moment this service first recorded the filing in its append-only store. The SEC publishes no availability timestamp, so no seller's first-seen time can be anything other than their own observation. For a filer's first-ever touch, the store is seeded from the filer's returned history and first_seen_at is the seed time (records carry seeded:true). You only pay for delivered answers — a registration that fails after settlement writes exactly one refund intent and creates no watch. Price: $0.005 per call (per watch registration). — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/secalerts/watch.
| Argument | Type | Description |
|---|---|---|
| ciks | array | CIK strings, 1-10 digits each, at most 25 — provide ciks and/or tickers. |
| forms | array | Optional form strings, at most 20; omit for all forms. A filter matches the exact form or its base form (8-K matches 8-K and 8-K/A). |
| tickers | array |
Fetch SEC company fundamentals for a ticker. $0.02 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/sec/fundamentals/{ticker}.
| Argument | Type | Description |
|---|---|---|
| ticker* | string | US ticker symbol |
{
"type": "object",
"required": [
"ticker"
],
"properties": {
"ticker": {
"type": "string",
"description": "US ticker symbol"
}
}
}SEC filing changes since a timestamp. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/secfilings/changes.
| Argument | Type | Description |
|---|---|---|
| cik | string | CIK, 1-10 digits — provide cik OR ticker |
| form | string | Optional form filter (exact or base form) |
| since | string | ISO-8601 timestamp; only filings first seen after it |
| cursor | string | Opaque cursor from a prior /changes call |
| ticker | string | Ticker symbol — provide cik OR ticker |
{
"type": "object",
"properties": {
"cik": {
"type": "string",
"description": "CIK, 1-10 digits — provide cik OR ticker"
},
"form": {
"type": "string",
"description": "Optional form filter (exact or base form)"
},
"since": {
"type": "string",
"description": "ISO-8601 timestamp; only filings first seen after it"
},
"cursor": {
"type": "string",
"description": "Opaque cursor from a prior /changes call"
},
"ticker": {
"type": "string",
"description": "Ticker symbol — provide cik OR ticker"
}
}
}SEC EDGAR filing status for a filer. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/secfilings/status.
| Argument | Type | Description |
|---|---|---|
| cik | string | CIK, 1-10 digits — provide cik OR ticker |
| form | string | Optional form filter (exact or base form) |
| ticker | string | Ticker symbol — provide cik OR ticker |
{
"type": "object",
"properties": {
"cik": {
"type": "string",
"description": "CIK, 1-10 digits — provide cik OR ticker"
},
"form": {
"type": "string",
"description": "Optional form filter (exact or base form)"
},
"ticker": {
"type": "string",
"description": "Ticker symbol — provide cik OR ticker"
}
}
}Fetch FINRA short interest for a ticker. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/short/short/{ticker}.
| Argument | Type | Description |
|---|---|---|
| ticker* | string | US ticker symbol |
{
"type": "object",
"required": [
"ticker"
],
"properties": {
"ticker": {
"type": "string",
"description": "US ticker symbol"
}
}
}Check a proposed agent spend against the agent's budget policy. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/spend/check.
| Argument | Type | Description |
|---|---|---|
| agent_id | string | string |
| category | string | string (optional) |
| recipient | string | string (optional) |
| amount_usd_cents | integer | integer |
{
"type": "object",
"properties": {
"agent_id": {
"type": "string",
"description": "string"
},
"category": {
"type": "string",
"description": "string (optional)"
},
"recipient": {
"type": "string",
"description": "string (optional)"
},
"amount_usd_cents": {
"type": "integer",
"description": "integer"
}
}
}Normalised indicator series for 30 countries. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/stats/indicator.
| Argument | Type | Description |
|---|---|---|
| country* | string | ISO alpha-2 country code |
| periods | string | Number of periods, 1-36 |
| indicator* | string | Indicator id: cpi_index | cpi_yoy_pct | unemployment_rate | average_earnings | gdp_growth |
{
"type": "object",
"required": [
"country",
"indicator"
],
"properties": {
"country": {
"type": "string",
"description": "ISO alpha-2 country code"
},
"periods": {
"type": "string",
"description": "Number of periods, 1-36"
},
"indicator": {
"type": "string",
"description": "Indicator id: cpi_index | cpi_yoy_pct | unemployment_rate | average_earnings | gdp_growth"
}
}
}Aggregate HS trade flows (Comext EU; StatCan CA-US). $0.02 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/stats/trade.
| Argument | Type | Description |
|---|---|---|
| flow* | string | IMPORT | EXPORT |
| period | string | YYYY or YYYY-MM |
| partner | string | WORLD | INT_EU27_2020 | EXT_EU27_2020 | ISO alpha-2 |
| periods | string | StatCan only: number of periods, 1-24 |
| product | string | TOTAL or HS2/HS4/HS6 code (EU reporters) |
| reporter* | string | Reporter: EU-27 ISO alpha-2 or CA |
| hs_section | string | StatCan CA-US only: HS section I-XXI or TOTAL |
{
"type": "object",
"required": [
"reporter",
"flow"
],
"properties": {
"flow": {
"type": "string",
"description": "IMPORT | EXPORT"
},
"period": {
"type": "string",
"description": "YYYY or YYYY-MM"
},
"partner": {
"type": "string",
"description": "WORLD | INT_EU27_2020 | EXT_EU27_2020 | ISO alpha-2"
},
"periods": {
"type": "string",
"description": "StatCan only: number of periods, 1-24"
},
"product": {
"type": "string",
"description": "TOTAL or HS2/HS4/HS6 code (EU reporters)"
},
"reporter": {
"type": "string",
"description": "Reporter: EU-27 ISO alpha-2 or CA"
},
"hs_section": {
"type": "string",
"description": "StatCan CA-US only: HS section I-XXI or TOTAL"
}
}
}Allocate a Telegram bot for one month. $0.50 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/telegram/provision. STATE-CHANGING: one settled call allocates one Telegram bot for one month. Payment is settle-once (replay-protected): do NOT retry blindly after a timeout — the call result returns the allocation, which is your receipt.
No arguments.
{
"type": "object",
"properties": {}
}0-100 token safety score with explainable factors. $0.02 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/tokens/score/{mint}.
| Argument | Type | Description |
|---|---|---|
| mint* | string | Solana mint address |
{
"type": "object",
"required": [
"mint"
],
"properties": {
"mint": {
"type": "string",
"description": "Solana mint address"
}
}
}Token mint info: name, symbol, decimals, supply, authorities. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/tokens/token/{mint}.
| Argument | Type | Description |
|---|---|---|
| mint* | string | Solana mint address |
{
"type": "object",
"required": [
"mint"
],
"properties": {
"mint": {
"type": "string",
"description": "Solana mint address"
}
}
}Score a comment for toxicity (Perspective-compatible). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/toxicity/analyze.
| Argument | Type | Description |
|---|---|---|
| comment* | object | object (required) - {text: string} comment to score, Perspective comments:analyze body |
| languages | array | array of strings - optional; en = full attributes, fr/es/it/pt/tr/ru = TOXICITY-only |
| doNotStore | boolean | boolean - optional; comment text is never stored regardless |
| clientToken | string | string - optional, echoed back in the response |
| requestedAttributes* | object | object (required) - attribute configs for TOXICITY, SEVERE_TOXICITY, IDENTITY_ATTACK, INSULT, THREAT, PROFANITY (FLIRTATION unsupported) |
{
"type": "object",
"required": [
"comment",
"requestedAttributes"
],
"properties": {
"comment": {
"type": "object",
"description": "object (required) - {text: string} comment to score, Perspective comments:analyze body"
},
"languages": {
"type": "array",
"items": {
"type": "string"
},
"description": "array of strings - optional; en = full attributes, fr/es/it/pt/tr/ru = TOXICITY-only"
},
"doNotStore": {
"type": "boolean",
"description": "boolean - optional; comment text is never stored regardless"
},
"clientToken": {
"type": "string",
"description": "string - optional, echoed back in the response"
},
"requestedAttributes": {
"type": "object",
"description": "object (required) - attribute configs for TOXICITY, SEVERE_TOXICITY, IDENTITY_ATTACK, INSULT, THREAT, PROFANITY (FLIRTATION unsupported)"
}
}
}Score up to 100 comments for toxicity in one call. $0.25 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/toxicity/analyze/batch.
| Argument | Type | Description |
|---|---|---|
| comments* | array | array (required) - up to 100 comments:analyze requests, each {comment:{text}, requestedAttributes, languages?} |
{
"type": "object",
"required": [
"comments"
],
"properties": {
"comments": {
"type": "array",
"items": {
"type": "string"
},
"description": "array (required) - up to 100 comments:analyze requests, each {comment:{text}, requestedAttributes, languages?}"
}
}
}Fetch full case detail for a trademark serial. $0.10 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/trademarks/case/{serialNumber}.
| Argument | Type | Description |
|---|---|---|
| serialNumber* | string | 8-digit USPTO serial number |
{
"type": "object",
"required": [
"serialNumber"
],
"properties": {
"serialNumber": {
"type": "string",
"description": "8-digit USPTO serial number"
}
}
}Search US trademark records by wordmark text. $0.25 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/trademarks/search. (The HTTP endpoint also accepts a POST form; this tool is the canonical search.)
| Argument | Type | Description |
|---|---|---|
| q | string | Wordmark text (required unless owner given) |
| class | string | International class 1-45 |
| limit | string | 1-25, default 10 |
| owner | string | Owner name match |
| status | string | live | dead | 3-digit USPTO status code |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Wordmark text (required unless owner given)"
},
"class": {
"type": "string",
"description": "International class 1-45"
},
"limit": {
"type": "string",
"description": "1-25, default 10"
},
"owner": {
"type": "string",
"description": "Owner name match"
},
"status": {
"type": "string",
"description": "live | dead | 3-digit USPTO status code"
}
}
}Register a 30-day trademark watch (daily checks). $0.50 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/trademarks/watch. STATE-CHANGING: one settled call registers one 30-day trademark watch; the returned watch id is your receipt. Payment is settle-once (replay-protected): do NOT retry blindly after a timeout — a duplicate call creates a duplicate watch.
| Argument | Type | Description |
|---|---|---|
| mark_text | string | string - mark text to watch for new filings |
| serial_numbers | array | array of 8-digit serial numbers to watch for status changes (max 20) |
{
"type": "object",
"properties": {
"mark_text": {
"type": "string",
"description": "string - mark text to watch for new filings"
},
"serial_numbers": {
"type": "array",
"items": {
"type": "string"
},
"description": "array of 8-digit serial numbers to watch for status changes (max 20)"
}
}
}Fetch changes detected for a trademark watch. $0.05 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/trademarks/watch/{id}/changes.
| Argument | Type | Description |
|---|---|---|
| id* | string | Watch id returned by POST /watch |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Watch id returned by POST /watch"
}
}
}Transcribe audio with Groq Whisper (whisper-large-v3). $0.005 per minute of audio, per-second prorated — NOT a flat per-call price: billed seconds = ceil(parsed duration to whole seconds); charge = ceil(seconds x 5000 / 60) USDC units (SOL rail: ceil(seconds x 34000 / 60) lamports), quoted exactly by the free preflight (POST /toll/transcribe/preflight) before payment. Accepts WAV/PCM, MP3, Ogg Opus/Vorbis, FLAC, MP4/M4A audio-only (max 25 MB, max 600 s); WebM refused at v1. The MCP adapter converts the tool arguments into the multipart HTTP shape (file part + optional language/model fields). You only pay for delivered answers — any failure after settlement queues an automatic refund. — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/transcribe.
No arguments.
{
"type": "object",
"properties": {}
}Estimate TRON energy/bandwidth needed for a USDT transfer. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/tron/estimate.
| Argument | Type | Description |
|---|---|---|
| to | string | string - TRON address |
| from | string | string - TRON address |
| amount_usdt | number | number |
| contract_call | boolean | boolean (optional) |
| trx_balance_sun | number | number (optional) |
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "string - TRON address"
},
"from": {
"type": "string",
"description": "string - TRON address"
},
"amount_usdt": {
"type": "number",
"description": "number"
},
"contract_call": {
"type": "boolean",
"description": "boolean (optional)"
},
"trx_balance_sun": {
"type": "number",
"description": "number (optional)"
}
}
}Pre-sign verdict for an unsigned Solana transaction. $0.01 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: POST https://exchangerebel.com/toll/txcheck/check.
| Argument | Type | Description |
|---|---|---|
| tx* | string | string - base64 unsigned transaction (required) |
| policy | object | object (optional): {max_sol_out_lamports, max_token_out_bps_by_mint {mint: bps}, allowed_programs, blocked_programs, blocked_addresses, fail_on_unknown_program} |
{
"type": "object",
"required": [
"tx"
],
"properties": {
"tx": {
"type": "string",
"description": "string - base64 unsigned transaction (required)"
},
"policy": {
"type": "object",
"description": "object (optional): {max_sol_out_lamports, max_token_out_bps_by_mint {mint: bps}, allowed_programs, blocked_programs, blocked_addresses, fail_on_unknown_program}"
}
}
}Active weather alerts (US points; NOAA). $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/weather/alerts.
| Argument | Type | Description |
|---|---|---|
| lat* | string | Latitude |
| lon* | string | Longitude |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "string",
"description": "Latitude"
},
"lon": {
"type": "string",
"description": "Longitude"
}
}
}Current conditions (metric + imperial). Source: Open-Meteo. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/weather/current.
| Argument | Type | Description |
|---|---|---|
| lat* | string | Latitude |
| lon* | string | Longitude |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "string",
"description": "Latitude"
},
"lon": {
"type": "string",
"description": "Longitude"
}
}
}Daily forecast, 1-16 days. Source: Open-Meteo. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/weather/forecast.
| Argument | Type | Description |
|---|---|---|
| lat* | string | Latitude |
| lon* | string | Longitude |
| days | string | 1-16, default 7 |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "string",
"description": "Latitude"
},
"lon": {
"type": "string",
"description": "Longitude"
},
"days": {
"type": "string",
"description": "1-16, default 7"
}
}
}Answer a query from Wikipedia content. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/wiki/answer.
| Argument | Type | Description |
|---|---|---|
| q* | string | Question or topic |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Question or topic"
}
}
}Articles linked from the resolved Wikipedia page. $0.005 per call — USDC on Solana via x402 (over MCP: call without payment to get the PaymentRequired challenge, then retry with the payment at _meta["x402/payment"]). HTTP equivalent: GET https://exchangerebel.com/toll/wiki/related.
| Argument | Type | Description |
|---|---|---|
| q* | string | Question or topic |
| limit | string | Max 50, default 10 |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Question or topic"
},
"limit": {
"type": "string",
"description": "Max 50, default 10"
}
}
}| string |
| Optional: the seller's reference for this run. |
| service_id* | string | The Layer 0 service id to test (see arena_eligible). |
| endpoint_path | string | Optional: the specific paid endpoint path to test. |
{
"type": "object",
"required": [
"service_id"
],
"properties": {
"tier": {
"enum": [
"standard",
"full_service",
"retest"
],
"type": "string",
"description": "Optional price tier: standard ($25, default), full_service ($50), retest ($10; same seller must have a prior run of the target)."
},
"run_id": {
"type": "string",
"description": "Optional: caller-chosen run id; one is generated when omitted."
},
"seller_ref": {
"type": "string",
"description": "Optional: the seller's reference for this run."
},
"service_id": {
"type": "string",
"description": "The Layer 0 service id to test (see arena_eligible)."
},
"endpoint_path": {
"type": "string",
"description": "Optional: the specific paid endpoint path to test."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"operator_id",
"title",
"body",
"category",
"scope",
"signature"
],
"properties": {
"body": {
"type": "string"
},
"scope": {
"enum": [
"layer-roadmap",
"fleet-wide"
],
"type": "string"
},
"title": {
"type": "string"
},
"category": {
"type": "string"
},
"signature": {
"type": "string",
"description": "Base64 Ed25519 signature over ideas-commons-proposal-v1|{operator_id}|{title}|{category}|{scope}|{sha256_hex(body)}"
},
"operator_id": {
"type": "string"
},
"reopen_condition": {
"type": "string"
}
},
"additionalProperties": false
}| Optional; omit for all current fields. |
{
"type": "object",
"required": [
"stream"
],
"properties": {
"name": {
"type": "string",
"description": "Name-resolution form (alternative to entity_id)."
},
"team": {
"type": "string"
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"league": {
"type": "string"
},
"stream": {
"enum": [
"nfl-player-status",
"epl-player-status",
"bls-release-status",
"fed-board-status"
],
"type": "string"
},
"position": {
"type": "string"
},
"entity_id": {
"type": "string",
"description": "Canonical entity id, verbatim as stored."
},
"series_id": {
"type": "string"
},
"status_field": {
"type": "string",
"description": "Optional; omit for all current fields."
}
}
}| status_field* | string |
{
"type": "object",
"required": [
"stream",
"status_field"
],
"properties": {
"name": {
"type": "string",
"description": "Name-resolution form (alternative to entity_id)."
},
"team": {
"type": "string"
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"league": {
"type": "string"
},
"stream": {
"enum": [
"nfl-player-status",
"epl-player-status",
"bls-release-status",
"fed-board-status"
],
"type": "string"
},
"position": {
"type": "string"
},
"entity_id": {
"type": "string",
"description": "Canonical entity id, verbatim as stored."
},
"series_id": {
"type": "string"
},
"status_field": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"stream",
"status_field"
],
"properties": {
"name": {
"type": "string",
"description": "Name-resolution form (alternative to entity_id)."
},
"team": {
"type": "string"
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"league": {
"type": "string"
},
"stream": {
"enum": [
"nfl-player-status",
"epl-player-status",
"bls-release-status",
"fed-board-status"
],
"type": "string"
},
"position": {
"type": "string"
},
"entity_id": {
"type": "string",
"description": "Canonical entity id, verbatim as stored."
},
"series_id": {
"type": "string"
},
"status_field": {
"type": "string"
}
}
}| integer |
| Caller ceiling on returned extraction characters, 1000..262144; truncation is disclosed with untruncated totals. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"op": {
"enum": [
"bundle",
"full-page",
"read"
],
"type": "string",
"description": "Leg: bundle (default, viewport PNG + extraction, $0.02), full-page (full-page PNG + extraction, $0.05, height capped at 8,000 px), or read (extraction only, $0.01)."
},
"url": {
"type": "string",
"description": "The bare public URL to render. No credentials in the URL; caller cookies/headers are never accepted."
},
"width": {
"type": "integer",
"maximum": 1920,
"minimum": 1,
"description": "Viewport width in CSS pixels, 1..1920, default 1280."
},
"format": {
"enum": [
"markdown",
"text"
],
"type": "string",
"description": "Extraction format: markdown (default) or text."
},
"height": {
"type": "integer",
"maximum": 1080,
"minimum": 1,
"description": "Viewport height in CSS pixels, 1..1080, default 800. Bundle and read legs only; rejected with the full-page leg."
},
"max_chars": {
"type": "integer",
"maximum": 262144,
"minimum": 1000,
"description": "Caller ceiling on returned extraction characters, 1000..262144; truncation is disclosed with untruncated totals."
}
}
}| volume_max | number | number |
| volume_min | number | number |
| change_pct_max | number | number |
| change_pct_min | number | number |
| market_cap_max | number | number |
| market_cap_min | number | number |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "integer"
},
"offset": {
"type": "integer",
"description": "integer"
},
"pe_max": {
"type": "number",
"description": "number"
},
"pe_min": {
"type": "number",
"description": "number"
},
"sector": {
"type": "string",
"description": "string"
},
"country": {
"type": "string",
"description": "string"
},
"sort_by": {
"type": "string",
"description": "string"
},
"industry": {
"type": "string",
"description": "string"
},
"sort_dir": {
"type": "string",
"description": "string"
},
"price_max": {
"type": "number",
"description": "number"
},
"price_min": {
"type": "number",
"description": "number"
},
"volume_max": {
"type": "number",
"description": "number"
},
"volume_min": {
"type": "number",
"description": "number"
},
"change_pct_max": {
"type": "number",
"description": "number"
},
"change_pct_min": {
"type": "number",
"description": "number"
},
"market_cap_max": {
"type": "number",
"description": "number"
},
"market_cap_min": {
"type": "number",
"description": "number"
}
}
}| Type |
|---|
| Description |
|---|
| cursor | string | Optional opaque cursor from a prior poll's next_cursor (or the registration initial_cursor); omit for the watch's initial cursor. A cursor bound to a different watch is refused free (bad_cursor). |
| watch_id* | string | The bearer credential issued by sec_alerts_register_watch. |
{
"type": "object",
"required": [
"watch_id"
],
"properties": {
"cursor": {
"type": "string",
"description": "Optional opaque cursor from a prior poll's next_cursor (or the registration initial_cursor); omit for the watch's initial cursor. A cursor bound to a different watch is refused free (bad_cursor)."
},
"watch_id": {
"type": "string",
"description": "The bearer credential issued by sec_alerts_register_watch."
}
}
}| Ticker symbols, at most 25, resolved to CIKs at registration. |
| amendments_only | boolean | Optional, default false; filters filing events only, never deletion flags. |
| include_deletions | boolean | Optional, default false; deletion flags are produced only from records whose provenance marks them weekly-index-reconciliation-sourced. |
{
"type": "object",
"properties": {
"ciks": {
"type": "array",
"items": {
"type": "string"
},
"description": "CIK strings, 1-10 digits each, at most 25 — provide ciks and/or tickers."
},
"forms": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional form strings, at most 20; omit for all forms. A filter matches the exact form or its base form (8-K matches 8-K and 8-K/A)."
},
"tickers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ticker symbols, at most 25, resolved to CIKs at registration."
},
"amendments_only": {
"type": "boolean",
"description": "Optional, default false; filters filing events only, never deletion flags."
},
"include_deletions": {
"type": "boolean",
"description": "Optional, default false; deletion flags are produced only from records whose provenance marks them weekly-index-reconciliation-sourced."
}
}
}