61 x402 pay-per-call tools that chain: each answer names the next call. No API key, no account.
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.
Use when an agent must read a document it was handed: it turns it into clean Markdown in about a second - pass an https URL or base64 of a PDF, Word, Excel, PowerPoint, HTML, CSV or XML file and get the text back with its headings, tables and page markers, plus the token count. It reads the text layer, so a scanned page with no text layer comes back without text. You are only charged if the Markdown is delivered. No API key, no account. $0.01 per call, paid over x402 (USDC).
https URL of the document to convert. Use this or document.
The document, as base64. Use this or url.
Name with extension, e.g. invoice.pdf. Helps the converter pick the parser. Default: taken from the URL.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Use when an agent must read a document it was handed: it turns it into clean Markdown in about a second - pass an https URL or base64 of a PDF, Word, Excel, PowerPoint, HTML, CSV or XML file and get the text back with its headings, tables and page markers, plus the token count. It reads the text layer, so a scanned page with no text layer comes back without text. You are only charged if the Markdown is delivered. No API key, no account. $0.01 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| url | string | https URL of the document to convert. Use this or document. |
| document | string | The document, as base64. Use this or url. |
| filename | string | Name with extension, e.g. invoice.pdf. Helps the converter pick the parser. Default: taken from the URL. |
{
"type": "object",
"required": [],
"properties": {
"url": {
"type": "string",
"description": "https URL of the document to convert. Use this or document."
},
"document": {
"type": "string",
"description": "The document, as base64. Use this or url."
},
"filename": {
"type": "string",
"description": "Name with extension, e.g. invoice.pdf. Helps the converter pick the parser. Default: taken from the URL."
}
},
"additionalProperties": false
}Use when an agent needs a picture it can hand straight to the next step: a 1024x1024 JPEG from a text prompt with FLUX.1 [schnell] in about 2 seconds. Returns a hosted image URL valid for 24 hours that you can hand straight to the next tool; add inline=true to also get the base64. Choose 1-8 diffusion steps (default 4). You are only charged if the image is delivered. No API key, no account. $0.02 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| steps | number | Diffusion steps, 1-8. More is sharper and slower. Default 4. |
| inline | boolean | Also return the JPEG as base64. Default false. |
| prompt* | string | What to draw, up to 2048 characters. English works best. |
{
"type": "object",
"required": [
"prompt"
],
"properties": {
"steps": {
"type": "number",
"description": "Diffusion steps, 1-8. More is sharper and slower. Default 4."
},
"inline": {
"type": "boolean",
"description": "Also return the JPEG as base64. Default false."
},
"prompt": {
"type": "string",
"description": "What to draw, up to 2048 characters. English works best."
}
},
"additionalProperties": false
}Use when an agent has an image and needs words it can act on, in about a second: pass an https URL or base64 and ask anything about it, from a one-line caption to reading a sign. Pairs with the rest of the chain: describe an image, translate the description, then have it read aloud. You are only charged if the description is delivered. No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| url | string | https URL of the image to describe. Use this or image. |
| image | string | The image, as base64. Use this or url. |
| prompt | string | What to ask about the image. Default: a one-sentence description. |
| max_tokens | number | Length limit of the answer, 16-512. Default 128. |
{
"type": "object",
"required": [],
"properties": {
"url": {
"type": "string",
"description": "https URL of the image to describe. Use this or image."
},
"image": {
"type": "string",
"description": "The image, as base64. Use this or url."
},
"prompt": {
"type": "string",
"description": "What to ask about the image. Default: a one-sentence description."
},
"max_tokens": {
"type": "number",
"description": "Length limit of the answer, 16-512. Default 128."
}
},
"additionalProperties": false
}Use when an agent must change part of an image and leave the rest untouched: pass the image and a black-and-white mask, and Stable Diffusion inpainting repaints only the white area following your prompt. Image and mask go as https URLs or as base64, up to 10 MB each. Returns a hosted image URL valid for 24 hours. You are only charged if the edit is delivered. No API key, no account. $0.02 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| url | string | https URL of the image to edit. Use this or image. |
| mask | string | The mask, as base64. Use this or mask_url. |
| seed | number | Same inputs and same seed give the same edit. |
| image | string | The image to edit, as base64. Use this or url. |
| steps | number | Diffusion steps, 1-20. |
| prompt* | string | What to paint into the masked area, up to 2048 characters. |
| guidance | number | How closely to follow the prompt, 0-20. |
| mask_url | string | https URL of the mask: white where it should repaint, black where it must not. Use this or mask. |
Use when an agent needs an illustration rather than a photo: DreamShaper 8 LCM from a text prompt in about 2 seconds - painterly and character art rather than photoreal. Takes a seed for a repeatable result, a negative prompt, and your own width and height. Returns a hosted image URL valid for 24 hours; add inline=true to also get the base64. You are only charged if the image is delivered. No API key, no account. $0.01 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| seed | number | Same prompt and same seed give the same image. |
| steps | number | Diffusion steps, 1-20. |
| width | number | Width in pixels, a multiple of 8 between 256 and 1536. Default 1024. |
| height | number | Height in pixels, a multiple of 8 between 256 and 1536. Default 1024. |
| inline | boolean | Also return the image as base64. Default false. |
| prompt* | string | What to draw, up to 2048 characters. English works best. |
| guidance | number | How closely to follow the prompt, 0-20. |
| negative_prompt | string | What to keep out of the image, up to 1024 characters. |
Use when an agent must be heard and not read, in English, Spanish, French, Chinese, Japanese or Korean: Deepgram Aura-2 for English and Spanish, MeloTTS for the rest. Returns a hosted audio URL valid for 24 hours (MP3 for English and Spanish, WAV otherwise) plus its size; add inline=true to also get the base64. Up to 2000 characters per call. You are only charged if the audio is delivered. No API key, no account. $0.01 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| lang | string | en, es, fr, zh, ja or ko. Default en. |
| text* | string | What to say, up to 2000 characters. |
| inline | boolean | Also return the WAV as base64. Default false. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"lang": {
"type": "string",
"description": "en, es, fr, zh, ja or ko. Default en."
},
"text": {
"type": "string",
"description": "What to say, up to 2000 characters."
},
"inline": {
"type": "boolean",
"description": "Also return the WAV as base64. Default false."
}
},
"additionalProperties": false
}Use when an agent is handed audio and needs text it can work with: Whisper large v3 turbo - pass an https URL (mp3, wav, flac, m4a, ogg, up to 10 MB) or base64 audio in a POST. Returns the text, the detected language with its probability, the duration, and timed segments; add words=true for word-level timestamps. Around 100 languages. You are only charged if the transcript is delivered. No API key, no account. $0.02 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| url | string | https URL of the audio file, up to 10 MB. |
| audio | string | Alternative to url: the audio as base64 (POST only). |
| words | boolean | Include word-level timestamps. Default false. |
| language | string | Optional ISO code to skip detection, e.g. es. |
{
"type": "object",
"required": [],
"properties": {
"url": {
"type": "string",
"description": "https URL of the audio file, up to 10 MB."
},
"audio": {
"type": "string",
"description": "Alternative to url: the audio as base64 (POST only)."
},
"words": {
"type": "boolean",
"description": "Include word-level timestamps. Default false."
},
"language": {
"type": "string",
"description": "Optional ISO code to skip detection, e.g. es."
}
},
"additionalProperties": false
}Use when an agent must say something in a language it was not given: about 100 languages with Meta M2M100 1.2B - pass the text and the target language (ISO code or English name); the source language is detected if omitted. Long texts are split by sentence, keeping order and line breaks. Up to 2000 characters per call. Chains with /v1/ai/transcribe and /v1/ai/speech. You are only charged if the translation is delivered. No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| to* | string | Target language: ISO code (es, fr, de, zh, ja...) or English name (spanish). |
| from | string | Optional source language; detected when omitted. |
| text* | string | What to translate, up to 2000 characters. |
{
"type": "object",
"required": [
"text",
"to"
],
"properties": {
"to": {
"type": "string",
"description": "Target language: ISO code (es, fr, de, zh, ja...) or English name (spanish)."
},
"from": {
"type": "string",
"description": "Optional source language; detected when omitted."
},
"text": {
"type": "string",
"description": "What to translate, up to 2000 characters."
}
},
"additionalProperties": false
}FREE, no payment needed. Lists all 73 tools with a real example of the input and of the output each one returns, plus what a call costs and how to pay for it. Call this first if a tool answered HTTP 402.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Use when an agent must call an LLM with no account and no token metering: chat completions with the exact request and response shape of the OpenAI API - point your existing client at this URL and it works, no code change. One flat price per call whatever the size of the prompt or the answer — no token metering, no API key, no account, no rate limit. Automatic failover across several large models. You are only charged if the completion is delivered. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| model | string | Ignored on purpose: the service picks the model and fails over between several. Accepted so an OpenAI client can send it unchanged. |
| prompt | string | Shortcut for a single user message, if you do not want to build the array. |
| messages | string | The conversation, as in the OpenAI API: [{"role":"system|user|assistant","content":"..."}]. In a POST, send it as a real JSON array, exactly as an OpenAI client does; in a GET, pass that same JSON as text in the query string. Both are accepted. |
| max_tokens | number | Output token cap, up to 4000. Does not change the price. |
| temperature | number | Passed through to the model when given. |
{
"type": "object",
"required": [],
"properties": {
"model": {
"type": "string",
"description": "Ignored on purpose: the service picks the model and fails over between several. Accepted so an OpenAI client can send it unchanged."
},
"prompt": {
"type": "string",
"description": "Shortcut for a single user message, if you do not want to build the array."
},
"messages": {
"type": "string",
"description": "The conversation, as in the OpenAI API: [{\"role\":\"system|user|assistant\",\"content\":\"...\"}]. In a POST, send it as a real JSON array, exactly as an OpenAI client does; in a GET, pass that same JSON as text in the query string. Both are accepted."
},
"max_tokens": {
"type": "number",
"description": "Output token cap, up to 4000. Does not change the price."
},
"temperature": {
"type": "number",
"description": "Passed through to the model when given."
}
},
"additionalProperties": false
}Use when an agent must end a reply with something usable rather than a platitude: one piece of practical advice about work, life or money, in English or Spanish. Short, concrete and usable - not a fortune cookie. Filterable by topic, with an id to avoid repeats and a seed for reproducibility. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| seed | string | Same seed always returns the same advice. |
| topic | string | work | life | money. Omit for any. |
| exclude | array | Ids already seen, comma-separated in a GET. |
| language | string | en | es. Defaults to en. |
{
"type": "object",
"required": [],
"properties": {
"seed": {
"type": "string",
"description": "Same seed always returns the same advice."
},
"topic": {
"type": "string",
"description": "work | life | money. Omit for any."
},
"exclude": {
"type": "array",
"description": "Ids already seen, comma-separated in a GET."
},
"language": {
"type": "string",
"description": "en | es. Defaults to en."
}
},
"additionalProperties": false
}Use when an agent needs something true to say and must not repeat itself across a session: one curious fact, in English or Spanish, by topic: science, computing, history or nature. Takes parameters, returns an id so you can avoid repeats across a session, and accepts a seed for a reproducible answer. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| seed | string | Same seed always returns the same fact. |
| topic | string | science | computing | history | nature. Omit for any. |
| exclude | array | Ids already seen, comma-separated in a GET. |
| language | string | en | es. Defaults to en. |
{
"type": "object",
"required": [],
"properties": {
"seed": {
"type": "string",
"description": "Same seed always returns the same fact."
},
"topic": {
"type": "string",
"description": "science | computing | history | nature. Omit for any."
},
"exclude": {
"type": "array",
"description": "Ids already seen, comma-separated in a GET."
},
"language": {
"type": "string",
"description": "en | es. Defaults to en."
}
},
"additionalProperties": false
}Use when an agent has to perform something short and timed, not just print text: a two-sentence horror story, in English or Spanish, by theme: domestic, technological, cosmic or folk. Returned SPLIT into setup and payoff as well as joined, so a narrating agent can deliver the first line, pause, and then land the second. Takes parameters, returns an id to avoid repeats, and accepts a seed for a reproducible answer. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| seed | string | Same seed always returns the same story. |
| theme | string | domestic | technological | cosmic | folk. Omit for any. |
| exclude | array | Ids already seen, comma-separated in a GET. |
| language | string | en | es. Defaults to en. |
{
"type": "object",
"required": [],
"properties": {
"seed": {
"type": "string",
"description": "Same seed always returns the same story."
},
"theme": {
"type": "string",
"description": "domestic | technological | cosmic | folk. Omit for any."
},
"exclude": {
"type": "array",
"description": "Ids already seen, comma-separated in a GET."
},
"language": {
"type": "string",
"description": "en | es. Defaults to en."
}
},
"additionalProperties": false
}Use when an agent must fill a pause without repeating itself: one joke, in English or Spanish, filtered by category: programming, crypto or general. Unlike the usual one-liner endpoints this one takes parameters, returns an id so you can exclude what you have already seen, and accepts a seed for a reproducible answer. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| seed | string | Same seed always returns the same joke. |
| exclude | array | Ids already seen, comma-separated in a GET. |
| category | string | programming | crypto | general. Omit for any. |
| language | string | en | es. Defaults to en. |
{
"type": "object",
"required": [],
"properties": {
"seed": {
"type": "string",
"description": "Same seed always returns the same joke."
},
"exclude": {
"type": "array",
"description": "Ids already seen, comma-separated in a GET."
},
"category": {
"type": "string",
"description": "programming | crypto | general. Omit for any."
},
"language": {
"type": "string",
"description": "en | es. Defaults to en."
}
},
"additionalProperties": false
}Use when an agent has to run a guessing game and must mark the answer without seeing it first: one riddle by difficulty, in English or Spanish, with the answer AND the SHA-256 of the answer in lowercase. The hash is the point: an agent can check whether its guess is right without reading the solution first, which no other riddle endpoint lets you do. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| seed | string | Same seed always returns the same riddle. |
| exclude | array | Ids already seen, comma-separated in a GET. |
| language | string | en | es. Defaults to en. |
| difficulty | string | easy | medium | hard. Omit for any. |
{
"type": "object",
"required": [],
"properties": {
"seed": {
"type": "string",
"description": "Same seed always returns the same riddle."
},
"exclude": {
"type": "array",
"description": "Ids already seen, comma-separated in a GET."
},
"language": {
"type": "string",
"description": "en | es. Defaults to en."
},
"difficulty": {
"type": "string",
"description": "easy | medium | hard. Omit for any."
}
},
"additionalProperties": false
}Use when a code-review agent wants to land a joke about the actual stack in front of it: a lighthearted developer roast aimed at a target YOU choose - javascript, python, css, git, regex, kubernetes, agile or legacy code - and at the severity you ask for. Every other roast endpoint returns something generic; this one lets a code-review agent roast the actual stack in front of it. Bilingual, seedable and repeat-free. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| seed | string | Same seed always returns the same roast. |
| target | string | javascript | python | css | git | regex | kubernetes | agile | legacy. Omit for any. |
| exclude | array | Ids already seen, comma-separated in a GET. |
| language | string | en | es. Defaults to en. |
| severity | string | mild | medium | savage. Omit for any. |
{
"type": "object",
"required": [],
"properties": {
"seed": {
"type": "string",
"description": "Same seed always returns the same roast."
},
"target": {
"type": "string",
"description": "javascript | python | css | git | regex | kubernetes | agile | legacy. Omit for any."
},
"exclude": {
"type": "array",
"description": "Ids already seen, comma-separated in a GET."
},
"language": {
"type": "string",
"description": "en | es. Defaults to en."
},
"severity": {
"type": "string",
"description": "mild | medium | savage. Omit for any."
}
},
"additionalProperties": false
}Use when an agent runs something daily and everyone must get the same thing that day: the word of the day with its definition, part of speech and an example sentence, in English or Spanish. Genuinely of the day: it is picked deterministically from the UTC date, so everyone gets the same word and you can reproduce any past day by passing it. The usual endpoints just return a random word and call it the word of the day. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| date | string | YYYY-MM-DD in UTC. Defaults to today, and any past date is reproducible. |
| language | string | en | es. Defaults to en. |
{
"type": "object",
"required": [],
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD in UTC. Defaults to today, and any past date is reproducible."
},
"language": {
"type": "string",
"description": "en | es. Defaults to en."
}
},
"additionalProperties": false
}Use when an agent must decide whether it may transact with an address at all: it checks it against the OFAC SDN list published by the US Treasury, across 16 currencies including Ethereum, Bitcoin, Tron and USDT. A hit returns the actual list entry - sanctioned entity, its type and its sanctions programmes - not a risk score. Exact matching only, never fuzzy. Every answer carries the publication date of the list snapshot. No API key, no account. $0.01 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| address* | string | The crypto address to check. Any chain: EVM, Bitcoin, Tron, Litecoin, Monero and the rest of the list. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "The crypto address to check. Any chain: EVM, Bitcoin, Tron, Litecoin, Monero and the rest of the list."
}
},
"additionalProperties": false
}Use when an agent has a job to get done and does not know which tool or in what order: describe it in plain words and it happens in ONE paid call: picks from 71 capabilities - transcription, translation, documents, images, web, on-chain, domains, IPs, weather, FX - fills their parameters and chains up to 3 steps, feeding each result into the next. Priced per job: the 402 challenge quotes YOUR job before you sign, from $0.02. If nothing fits, nothing is charged. $0.02 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| job* | string | The job to do, in plain words. Example: read this page and translate it to Spanish. |
| input | string | Optional data the job needs: a URL, an EVM address, a domain, or text. |
| max_steps | number | How many tools may be chained, 1 to 3. Default 2. |
{
"type": "object",
"required": [
"job"
],
"properties": {
"job": {
"type": "string",
"description": "The job to do, in plain words. Example: read this page and translate it to Spanish."
},
"input": {
"type": "string",
"description": "Optional data the job needs: a URL, an EVM address, a domain, or text."
},
"max_steps": {
"type": "number",
"description": "How many tools may be chained, 1 to 3. Default 2."
}
},
"additionalProperties": false
}Use when an agent has to decide whether a wallet can pay before building a transaction: the native coin balance (ETH, MATIC...) of any address on Base, Ethereum, Polygon, Arbitrum or Optimism, returned both as wei (exact integer string) and as ether, with the chain it was read on. Do not use for token balances (/v1/evm/erc20-balance) or for a whole-wallet view (/v1/evm/portfolio). Flat price, no rate limits, no API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. Defaults to base. |
| address* | string | 0x-prefixed address to look up. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism. Defaults to base."
},
"address": {
"type": "string",
"description": "0x-prefixed address to look up."
}
},
"additionalProperties": false
}Use when an agent has to decide whether what it just read on-chain is fresh, or whether a node is behind: the latest block height, its timestamp and how many seconds old the chain head is. Do not use for one transaction's outcome (/v1/evm/tx) or to compare several chains at once (/v1/evm/chains does all of them in one call). Flat price, no rate limits, no API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
{
"type": "object",
"required": [],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
}
},
"additionalProperties": false
}Use when an agent needs a contract value that none of the typed routes covers: it runs any read-only call with your own calldata on five chains and returns the raw 32-byte result plus asUint, so you can decode it yourself. The escape hatch, not the first choice. Do not use for balances, allowances, token data or NFT owners: those have typed routes that decode the answer for you. No API key, no rate limit. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| to* | string | Contract address to call. |
| data* | string | 0x-prefixed calldata: 4-byte selector plus encoded arguments. |
| from | string | Optional caller address, for calls that check msg.sender. |
| block | string | Block tag or number. Defaults to latest. |
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
{
"type": "object",
"required": [
"to",
"data"
],
"properties": {
"to": {
"type": "string",
"description": "Contract address to call."
},
"data": {
"type": "string",
"description": "0x-prefixed calldata: 4-byte selector plus encoded arguments."
},
"from": {
"type": "string",
"description": "Optional caller address, for calls that check msg.sender."
},
"block": {
"type": "string",
"description": "Block tag or number. Defaults to latest."
},
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
}
},
"additionalProperties": false
}Use when an agent has to pick a chain that is actually answering before it commits to one: every supported chain in a single call, each with its chain id, block height, how many seconds stale its head is, and ok. Do not use for one chain on its own (/v1/evm/block) or for what a transaction will cost there (/v1/evm/gas, and /v1/evm/fees for EIP-1559 caps). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | Optional: check just one. base | ethereum | polygon | arbitrum | optimism. All of them when omitted. |
{
"type": "object",
"required": [],
"properties": {
"chain": {
"type": "string",
"description": "Optional: check just one. base | ethereum | polygon | arbitrum | optimism. All of them when omitted."
}
},
"additionalProperties": false
}Use when an agent has a name where it needs an address, or the other way round, before it can act: resolves an ENS name to its address or an address to its primary ENS name, read straight from Ethereum mainnet, with found telling you when there is no record. Do not use to check an address is well formed (/v1/util/address) or that it is a wallet (/v1/evm/is-contract). No API key. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| name | string | ENS name to resolve, such as vitalik.eth. |
| address | string | Address to reverse-resolve. Use instead of name. |
{
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string",
"description": "ENS name to resolve, such as vitalik.eth."
},
"address": {
"type": "string",
"description": "Address to reverse-resolve. Use instead of name."
}
},
"additionalProperties": false
}Use when an agent is about to approve a spender, or is auditing what it approved before: how much of a token the spender may still move on the owner's behalf, raw and formatted with its decimals, plus unlimited, which flags a forgotten infinite approval. Do not use for what the wallet actually holds (/v1/evm/erc20-balance) or for whether the token is safe (/v1/evm/token-safety). No API key. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| owner* | string | Address that owns the tokens. |
| token* | string | ERC20 contract address. |
| spender* | string | Address allowed to spend them. |
{
"type": "object",
"required": [
"owner",
"spender",
"token"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"owner": {
"type": "string",
"description": "Address that owns the tokens."
},
"token": {
"type": "string",
"description": "ERC20 contract address."
},
"spender": {
"type": "string",
"description": "Address allowed to spend them."
}
},
"additionalProperties": false
}Use when an agent must confirm a wallet holds enough of a token before it swaps, pays or settles: the ERC-20 balance of any address for any token (USDC, USDT, DAI or any other), returned raw (exact integer string) with its decimals, the formatted amount and the symbol, so no rounding is forced on you. Do not use for the native coin (/v1/evm/balance) or for what a contract is allowed to spend (/v1/evm/erc20-allowance). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| token* | string | ERC20 contract address. |
| address* | string | Wallet to look up. |
{
"type": "object",
"required": [
"address",
"token"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"token": {
"type": "string",
"description": "ERC20 contract address."
},
"address": {
"type": "string",
"description": "Wallet to look up."
}
},
"additionalProperties": false
}Use when an agent is about to sign a transaction and must know whether it will fail and what it will cost: the gas this exact call needs, the current gas price, the cost in ether, and wouldRevert, which says the transaction would fail before you spend anything finding out. Do not use for the price of a plain transfer (/v1/evm/gas) or for EIP-1559 caps (/v1/evm/fees). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| to* | string | Destination address. |
| data | string | Optional 0x calldata. |
| from | string | Sender address. |
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| value | string | Optional value in wei, as a decimal string. |
{
"type": "object",
"required": [
"to"
],
"properties": {
"to": {
"type": "string",
"description": "Destination address."
},
"data": {
"type": "string",
"description": "Optional 0x calldata."
},
"from": {
"type": "string",
"description": "Sender address."
},
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"value": {
"type": "string",
"description": "Optional value in wei, as a decimal string."
}
},
"additionalProperties": false
}Use when an agent is building an EIP-1559 transaction and must choose fee caps that will actually get it mined: the base fee plus suggested maxFeePerGas and maxPriorityFeePerGas at slow, normal and fast, computed from the last 20 blocks of real fee history. Do not use for a legacy gas price (/v1/evm/gas) or to price one specific call (/v1/evm/estimate-gas). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
{
"type": "object",
"required": [],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
}
},
"additionalProperties": false
}Use when an agent is about to send a transaction and needs to know what it costs right now: the chain's current gas price in wei and gwei plus the cost of a plain transfer in ether. It is the price now, not a forecast. Do not use for EIP-1559 fee caps (/v1/evm/fees returns the base fee with maxFeePerGas and maxPriorityFeePerGas) or to price a specific call (/v1/evm/estimate-gas). Flat price, no API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
{
"type": "object",
"required": [],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
}
},
"additionalProperties": false
}Use when an agent is about to send funds and must decide whether the destination is a plain wallet or a contract: returns isContract and the size of the deployed bytecode. A wallet where you expected a contract, or the reverse, is the cheapest mistake to catch before signing. Do not use to judge whether a token is safe (/v1/evm/token-safety) or worth trusting (/v1/evm/verdict). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| address* | string | Address to inspect. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"address": {
"type": "string",
"description": "Address to inspect."
}
},
"additionalProperties": false
}Use when an agent must decide whether an NFT is still held by who it thinks: the current owner of an ERC-721 token id, with its tokenURI and the collection name in the same call, read straight from the contract with no indexer in between. Do not use for a whole wallet's holdings or for ERC-1155 balances: this answers one token id. No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| tokenId* | string | Token id, in decimal. |
| contract* | string | ERC721 contract address. |
{
"type": "object",
"required": [
"contract",
"tokenId"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"tokenId": {
"type": "string",
"description": "Token id, in decimal."
},
"contract": {
"type": "string",
"description": "ERC721 contract address."
}
},
"additionalProperties": false
}Use when an agent signs transactions one after another and must not collide with one already in flight: the confirmed nonce, the pending nonce (the one to use while an earlier transaction is still unmined) and whether the address is a contract. Do not use to check the transaction is affordable (/v1/evm/balance for the funds, /v1/evm/estimate-gas for the cost). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| address* | string | Address to look up. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"address": {
"type": "string",
"description": "Address to look up."
}
},
"additionalProperties": false
}Use when an agent must see at once whether a wallet can cover something: the native balance plus the balance of every token you list, on one chain, in a single call, each already formatted with its symbol and decimals. One request instead of one per token. Do not use for a single token (/v1/evm/erc20-balance) or for what the tokens are worth (/v1/evm/token-price). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| tokens | array | Up to 20 ERC20 contract addresses. |
| address* | string | Wallet to inspect. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"tokens": {
"type": "array",
"description": "Up to 20 ERC20 contract addresses."
},
"address": {
"type": "string",
"description": "Wallet to inspect."
}
},
"additionalProperties": false
}Use when an agent is waiting on a transaction and has to answer «did it work, and what did it cost»: the receipt by hash with success or revert, gas used, the fee actually paid in ether, and how many logs it emitted. found: false means it is not mined yet, which is the answer a waiting agent needs. Do not use for the transaction's own fields like value or recipient (/v1/evm/tx returns both merged). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| hash* | string | 32-byte transaction hash. |
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
{
"type": "object",
"required": [
"hash"
],
"properties": {
"hash": {
"type": "string",
"description": "32-byte transaction hash."
},
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
}
},
"additionalProperties": false
}Use when an agent must read something a contract does not expose with a getter and has to decide from it: a raw storage slot, returned as hex and as an integer. It is how you find a proxy's implementation address, an owner or a paused flag. Do not use when the contract has a public getter (/v1/evm/call is the honest way) or for token data (/v1/evm/token-info). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| slot | string | Slot number in decimal, or a 0x slot key such as an EIP-1967 hash. |
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| address* | string | Contract to read. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"slot": {
"type": "string",
"description": "Slot number in decimal, or a 0x slot key such as an EIP-1967 hash."
},
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"address": {
"type": "string",
"description": "Contract to read."
}
},
"additionalProperties": false
}Use when an agent has a bare token address and must label or format it before showing or computing anything: name, symbol, decimals and total supply of any ERC-20 in one call. decimals is what stops an amount being shown a million times too big. Do not use for a holder's balance (/v1/evm/erc20-balance), the price (/v1/evm/token-price) or the risk (/v1/evm/token-safety). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| token* | string | ERC20 contract address. |
{
"type": "object",
"required": [
"token"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"token": {
"type": "string",
"description": "ERC20 contract address."
}
},
"additionalProperties": false
}Use when an agent must put a number on a token before trading or reporting, and be able to defend it: spot price read straight from the deepest Uniswap V3 pool against USDC, on Base, Ethereum, Polygon, Arbitrum or Optimism. Returns the pool address, fee tier, liquidity, sqrtPriceX96, tick and block, so the number can be audited instead of trusted. No aggregator and no API key: the source is the chain itself. Via eth_call. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| quote | string | Token to price it against. Defaults to the chain's native USDC. |
| token* | string | ERC20 contract address to price. |
{
"type": "object",
"required": [
"token"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"quote": {
"type": "string",
"description": "Token to price it against. Defaults to the chain's native USDC."
},
"token": {
"type": "string",
"description": "ERC20 contract address to price."
}
},
"additionalProperties": false
}Use when an agent must decide whether to touch a token at all: a pre-trade risk check on Base, Ethereum, Polygon, Arbitrum or Optimism, straight from the deployed bytecode and live state. Detects mint, pause, blacklist, upgradeable proxy and mutable buy/sell tax powers, and reports whether ownership is renounced. It returns the EVIDENCE - the exact selector found and its byte offset - so an agent can apply its own policy. Deterministic: same contract, same answer. $0.01 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| token* | string | ERC20 contract address to check. |
{
"type": "object",
"required": [
"token"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"token": {
"type": "string",
"description": "ERC20 contract address to check."
}
},
"additionalProperties": false
}Use when an agent has sent a transaction and must decide what to do next: the transaction by hash merged with its receipt in one call, so you get sender, recipient, value, gas used, success or revert, and the block it landed in without chaining two RPC calls. Do not use to find out whether it has been mined at all (/v1/evm/receipt answers found: false) or to judge it before signing (/v1/evm/estimate-gas). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| hash* | string | Transaction hash. |
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
{
"type": "object",
"required": [
"hash"
],
"properties": {
"hash": {
"type": "string",
"description": "Transaction hash."
},
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
}
},
"additionalProperties": false
}Use when an agent needs one answer it can act on, not a pile of evidence to weigh: a verdict on any ERC20 on five chains - a machine-readable label for who can act on your balance (no-owner-powers, owner-can-intervene, owner-controls-balances, not-a-token), a headline, a plain reading and a paste-ready card, with the evidence underneath selector by selector. Label and card come from the bytecode and live state, never from a model. Research, not investment advice. $0.02 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| chain | string | base | ethereum | polygon | arbitrum | optimism. |
| token* | string | ERC20 contract address to judge. |
{
"type": "object",
"required": [
"token"
],
"properties": {
"chain": {
"type": "string",
"description": "base | ethereum | polygon | arbitrum | optimism."
},
"token": {
"type": "string",
"description": "ERC20 contract address to judge."
}
},
"additionalProperties": false
}Use when an agent has to convert money in a figure someone will audit: between any two of the ~30 currencies in the European Central Bank's official reference rates, on today's publication or on a past date within the last 90 days. Returns the rate used, its publication date and whether it was crossed through the euro. This is the auditable rate accounting and customs ask for, not a live market quote: it is published once a day and it is reproducible. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| to* | string | Target currency, ISO 4217, e.g. EUR. |
| date | string | Optional publication date, YYYY-MM-DD, within the last 90 days. Defaults to the latest publication. |
| from* | string | Source currency, ISO 4217, e.g. USD. |
| amount | number | Amount to convert. Defaults to 1. |
{
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"description": "Target currency, ISO 4217, e.g. EUR."
},
"date": {
"type": "string",
"description": "Optional publication date, YYYY-MM-DD, within the last 90 days. Defaults to the latest publication."
},
"from": {
"type": "string",
"description": "Source currency, ISO 4217, e.g. USD."
},
"amount": {
"type": "number",
"description": "Amount to convert. Defaults to 1."
}
},
"additionalProperties": false
}LLM inference at a flat $0.005 per call, with no account, no API key and no token metering. POST a prompt, get the completion: the same price for 10 tokens or 4000, while metered gateways scale with usage. Automatic failover across several large models; typical response under 1s. Pay per call in USDC over x402 - nothing to sign up for. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| prompt* | string | The request for the model. Up to 24000 characters. |
| sistema | string | Optional system instruction. |
| maxTokens | number | Output token cap, up to 4000. Does not change the price. |
{
"type": "object",
"required": [
"prompt"
],
"properties": {
"prompt": {
"type": "string",
"description": "The request for the model. Up to 24000 characters."
},
"sistema": {
"type": "string",
"description": "Optional system instruction."
},
"maxTokens": {
"type": "number",
"description": "Output token cap, up to 4000. Does not change the price."
}
},
"additionalProperties": false
}Use when an agent must break a tie or split a test and cannot be seen to have chosen: one or more fair coins, each result and the tally of heads and tails, cryptographically random rather than Math.random. Do not use to pick among more than two options (/v1/random/pick) or to order a list (/v1/random/shuffle). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| count | number | How many coins to flip, 1-100. Defaults to 1. |
{
"type": "object",
"required": [],
"properties": {
"count": {
"type": "number",
"description": "How many coins to flip, 1-100. Defaults to 1."
}
},
"additionalProperties": false
}Use when an agent has to produce a roll a player or an audit will check: dice with any number of faces, every individual roll, the total and the standard notation (3d6, 1d20). It uses the platform CSPRNG with rejection sampling, so every face is equally likely, which a plain modulo is not. Do not use to choose from a list you already have (/v1/random/pick) or for a secret (/v1/random/password). $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| count | number | How many dice to roll, 1-100. Defaults to 1. |
| faces | number | Faces per die, 2-1000000. Defaults to 6. |
{
"type": "object",
"required": [],
"properties": {
"count": {
"type": "number",
"description": "How many dice to roll, 1-100. Defaults to 1."
},
"faces": {
"type": "number",
"description": "Faces per die, 2-1000000. Defaults to 6."
}
},
"additionalProperties": false
}Use when an agent needs numbers in a range that will stand up to inspection: uniform random integers between your own bounds, with or without repeats, drawn with rejection sampling so the ends of the range are not slightly less likely, which is what modulo does. Do not use to choose among items (/v1/random/pick) or for a secret (/v1/random/password). $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| max | number | Highest value, inclusive. Defaults to 100. |
| min | number | Lowest value, inclusive. Defaults to 1. |
| count | number | How many to draw, 1-100. Defaults to 1. |
| unique | boolean | No repeats. Needs a range at least as wide as count. |
{
"type": "object",
"required": [],
"properties": {
"max": {
"type": "number",
"description": "Highest value, inclusive. Defaults to 100."
},
"min": {
"type": "number",
"description": "Lowest value, inclusive. Defaults to 1."
},
"count": {
"type": "number",
"description": "How many to draw, 1-100. Defaults to 1."
},
"unique": {
"type": "boolean",
"description": "No repeats. Needs a range at least as wide as count."
}
},
"additionalProperties": false
}Use when an agent must mint a secret and be able to justify its strength: strong random passwords from the platform CSPRNG, returned with their entropy in bits so the strength is a number and not an opinion. Four alphabets, one with no look-alike characters for anything a human has to read back or dictate. Do not use for ids that only need to be unique (/v1/util/uuid). $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| count | number | How many to generate, 1-50. Defaults to 1. |
| length | number | Characters per secret, 8-256. Defaults to 20. |
| alphabet | string | alnum | legible | hex | completo. Defaults to legible. |
{
"type": "object",
"required": [],
"properties": {
"count": {
"type": "number",
"description": "How many to generate, 1-50. Defaults to 1."
},
"length": {
"type": "number",
"description": "Characters per secret, 8-256. Defaults to 20."
},
"alphabet": {
"type": "string",
"description": "alnum | legible | hex | completo. Defaults to legible."
}
},
"additionalProperties": false
}Use when an agent has several options and no reason to prefer any, and the choice has to be defensible: picks one or more items from the list you send, with or without repeats, and tells you how many it had to choose from. Do not use to order the whole list (/v1/random/shuffle) or to draw a number in a range (/v1/random/number). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| count | number | How many to pick, 1-100. Defaults to 1. |
| items* | string | The options, comma-separated. A JSON array of strings is also accepted in a POST body. |
| repeat | boolean | Allow the same item more than once. Defaults to false. |
{
"type": "object",
"required": [
"items"
],
"properties": {
"count": {
"type": "number",
"description": "How many to pick, 1-100. Defaults to 1."
},
"items": {
"type": "string",
"description": "The options, comma-separated. A JSON array of strings is also accepted in a POST body."
},
"repeat": {
"type": "boolean",
"description": "Allow the same item more than once. Defaults to false."
}
},
"additionalProperties": false
}Use when an agent must put a list in an order nobody can claim was arranged: a uniformly random shuffle with Fisher-Yates over the platform CSPRNG, so every permutation is equally likely, which sorting by a random key does not give you. Do not use to take just one or a few items (/v1/random/pick). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| items* | string | The list to shuffle, comma-separated. A JSON array of strings is also accepted in a POST body. |
{
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "string",
"description": "The list to shuffle, comma-separated. A JSON array of strings is also accepted in a POST body."
}
},
"additionalProperties": false
}Use when an agent has an origin ASN and must decide who is behind a network and whether it is still live: the RDAP registry record (holder, status, allocation dates, abuse contact), the AS name, country and RIR, and the prefixes it announces right now, split IPv4 and IPv6 with a sample. The natural second call after /v1/red/ip. Do not use for one address (/v1/red/ip) or for a domain (/v1/red/whois). $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| asn* | string | The AS number, with or without the AS prefix: 15169 or AS15169. |
{
"type": "object",
"required": [
"asn"
],
"properties": {
"asn": {
"type": "string",
"description": "The AS number, with or without the AS prefix: 15169 or AS15169."
}
},
"additionalProperties": false
}Use when an agent must audit what certificates exist for a domain: every currently valid one publicly issued for it, read from the Certificate Transparency logs - issuer, validity window, days to expiry, revocation status and every hostname each certificate covers. It reports what was ISSUED, which is how you find certificates you did not know existed - not what the server is serving today. No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| domain* | string | The domain to look up. A full URL or an email address is accepted and reduced to its host. |
| subdomains | boolean | Also return certificates issued for subdomains. Defaults to false. |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "The domain to look up. A full URL or an email address is accepted and reduced to its host."
},
"subdomains": {
"type": "boolean",
"description": "Also return certificates issued for subdomains. Defaults to false."
}
},
"additionalProperties": false
}Use when an agent must decide whether an IP is already known for abuse: it checks one IPv4 address against nine public DNS blocklists at once — SpamCop, UCEPROTECT, PSBL, Barracuda, DroneBL and four more — and returns each list's raw code and the reason text it publishes, not a score. Every list is re-checked on each call with its RFC 5782 test entry, so a dead list comes back as unavailable instead of reading as clean. Includes the delisting URL for each hit. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| ip* | string | The IPv4 address to check. IPv6 is not accepted: these nine lists are IPv4 zones. |
{
"type": "object",
"required": [
"ip"
],
"properties": {
"ip": {
"type": "string",
"description": "The IPv4 address to check. IPv6 is not accepted: these nine lists are IPv4 zones."
}
},
"additionalProperties": false
}Use when an agent must decide whether a domain is real and reachable before trusting it: everything DNS says about it in one call - whether it is registered, its A and AAAA addresses, nameservers, MX servers, SPF and DMARC, DNSSEC, and whether it looks parked. Built for going through a list of domains one at a time. Live DNS, no API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| domain* | string | The domain to check. A full URL or an email address is accepted and reduced to its host. |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "The domain to check. A full URL or an email address is accepted and reduced to its host."
}
},
"additionalProperties": false
}Use when an agent must decide whether to write to an address, or clean a list before sending: it scores one email 0-100 with a verdict (ok, risky, disposable, undeliverable, invalid) and the evidence under it: every point lost is itemised with the field that proves it. 12,141 disposable domains from two maintained open lists pinned to a commit, 4,897 free providers, 1,018 role names, typo fix (gmial.com > gmail.com), live MX/SPF/DMARC. No SMTP probe, no API key. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| email* | string | The address to check, e.g. [email protected]. |
{
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "The address to check, e.g. [email protected]."
}
},
"additionalProperties": false
}Use when an agent must decide who an IP belongs to before blocking or trusting it: one IPv4 or IPv6 address against the two authoritative, keyless public sources - RDAP registry data (holder, country, date, abuse contact) via the ARIN-to-RIR chain, and the origin ASN from Team Cymru's DNS service. No city-level geolocation and no VPN/proxy detection: that needs a licensed database this route deliberately does not use. Built for going through a list of IPs one at a time. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| ip* | string | The IPv4 or IPv6 address to look up. |
{
"type": "object",
"required": [
"ip"
],
"properties": {
"ip": {
"type": "string",
"description": "The IPv4 or IPv6 address to look up."
}
},
"additionalProperties": false
}Use when an agent must judge how established a domain is, or when it expires: registration data read from the registry's own RDAP service through the IANA bootstrap — not scraped from port-43 whois text. Returns creation, expiry and last-change dates, age and days to expiry, registrar, EPP status codes, nameservers, DNSSEC and the abuse contact. TLDs with no RDAP server say so instead of reporting the domain as unregistered. No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| domain* | string | The domain to look up. A full URL or an email address is accepted and reduced to its host. |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "The domain to look up. A full URL or an email address is accepted and reduced to its host."
}
},
"additionalProperties": false
}Use when an agent is about to commit to a time in someone else's zone and cannot be an hour wrong: converts between any two IANA zones with daylight saving applied from the runtime's own tz database. Returns both sides with their UTC offset, abbreviation and DST flag, plus the UTC instant and the difference in hours. Warns when the time asked for does not exist or happens twice because the clocks change that day: the two cases that quietly make a hand-made conversion wrong. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| to* | string | Target IANA time zone, e.g. "Asia/Tokyo". Required. |
| from* | string | Source IANA time zone, e.g. "Europe/Madrid". Required. |
| time | string | Wall clock as YYYY-MM-DD HH:MM in the "from" zone, or an ISO string with Z or an offset, or a unix timestamp, or "now". Defaults to now. |
{
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"description": "Target IANA time zone, e.g. \"Asia/Tokyo\". Required."
},
"from": {
"type": "string",
"description": "Source IANA time zone, e.g. \"Europe/Madrid\". Required."
},
"time": {
"type": "string",
"description": "Wall clock as YYYY-MM-DD HH:MM in the \"from\" zone, or an ISO string with Z or an offset, or a unix timestamp, or \"now\". Defaults to now."
}
},
"additionalProperties": false
}Use when an agent must stamp or schedule something in a particular place and needs every form at once: ISO with offset, 24-hour, 12-hour, weekday, unix timestamp and UTC. It also says whether daylight saving is active right now and what the zone's standard offset is, so a shifted clock can be told apart from a permanent one. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| zone* | string | IANA time zone, e.g. "Asia/Tokyo" or "UTC". Required. |
{
"type": "object",
"required": [
"zone"
],
"properties": {
"zone": {
"type": "string",
"description": "IANA time zone, e.g. \"Asia/Tokyo\" or \"UTC\". Required."
}
},
"additionalProperties": false
}Use when an agent has a city or a country and needs the exact zone name the other routes expect: searches the full IANA list and gives each zone's current UTC offset, abbreviation, local time and DST state. Use it to turn a city or a country into the exact zone name the other endpoints expect, or to find every zone sitting at a given offset right now. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| limit | number | Maximum zones returned, 1-500. Defaults to 50. |
| offset | string | Keep only zones at this current UTC offset, e.g. "+09:00" or "-5". |
| search | string | Substring matched against the zone name, case-insensitive. Omit to list them all. |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "number",
"description": "Maximum zones returned, 1-500. Defaults to 50."
},
"offset": {
"type": "string",
"description": "Keep only zones at this current UTC offset, e.g. \"+09:00\" or \"-5\"."
},
"search": {
"type": "string",
"description": "Substring matched against the zone name, case-insensitive. Omit to list them all."
}
},
"additionalProperties": false
}Use when an agent is handed an address and must decide whether it is safe to use before sending anything: it validates it and returns the EIP-55 mixed-case checksum form, plus whether the input was already checksummed. An address that fails the checksum is almost always mistyped. Do not use to find out whether it is a wallet or a contract (/v1/evm/is-contract) or to resolve a name (/v1/evm/ens). $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| address* | string | The address to validate, in any case. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "The address to validate, in any case."
}
},
"additionalProperties": false
}Use when an agent must put bytes through a header, a URL or a JSON field, or read what came back: base64 in both directions, including the URL-safe alphabet, with UTF-8 handled properly. x402 itself rides on base64, so this is the one that reads a payment header. Do not use for hashing (/v1/util/sha256) or for hex (/v1/util/hex). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| mode | string | encode | decode. Defaults to encode. |
| input* | string | The text or base64 to convert. |
| urlSafe | boolean | Use the URL-safe alphabet (-_ instead of +/). |
{
"type": "object",
"required": [
"input"
],
"properties": {
"mode": {
"type": "string",
"description": "encode | decode. Defaults to encode."
},
"input": {
"type": "string",
"description": "The text or base64 to convert."
},
"urlSafe": {
"type": "boolean",
"description": "Use the URL-safe alphabet (-_ instead of +/)."
}
},
"additionalProperties": false
}Use when an agent has raw RPC output and must read it as a number or as text: converts between hex, decimal and UTF-8 in one call, with big integers kept exact because a 32-byte word overflows a JavaScript number. Do not use to decode a whole ABI-encoded struct: this converts one value. No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| as | string | hex | decimal | text. What the value IS. Defaults to autodetect. |
| value* | string | A 0x-prefixed hex string, a decimal number, or text. |
{
"type": "object",
"required": [
"value"
],
"properties": {
"as": {
"type": "string",
"description": "hex | decimal | text. What the value IS. Defaults to autodetect."
},
"value": {
"type": "string",
"description": "A 0x-prefixed hex string, a decimal number, or text."
}
},
"additionalProperties": false
}Use when an agent must decide whether a bank account it was given can be paid before trying: validates one IBAN offline - country, expected length, ISO 7064 mod-97 check digits, whether it is inside SEPA, and the account number split out. Deterministic, no network call and no third party that can go down. Built for cleaning a list of accounts one at a time. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| iban* | string | The IBAN to check. Spaces and lowercase are accepted. |
{
"type": "object",
"required": [
"iban"
],
"properties": {
"iban": {
"type": "string",
"description": "The IBAN to check. Spaces and lowercase are accepted."
}
},
"additionalProperties": false
}Use when an agent is building something Ethereum will hash and must get the same digest the chain gets: Keccak-256 of any string or hex payload, with the byte count. It is NOT SHA3-256, and that confusion is the usual reason a selector or a CREATE2 address comes out wrong. Do not use for file digests or API signatures outside Ethereum (/v1/util/sha256) or for a function selector, which is already built for you (/v1/util/selector). $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| input* | string | Plain text, or a 0x-prefixed hex payload to hash as bytes. |
{
"type": "object",
"required": [
"input"
],
"properties": {
"input": {
"type": "string",
"description": "Plain text, or a 0x-prefixed hex payload to hash as bytes."
}
},
"additionalProperties": false
}Use when an agent must decide whether a phone number is usable before writing or calling: checks it offline, normalises it to E.164, works out its country (including the twelve calling codes shared by several countries) and validates the national length against that country's numbering plan, returning the tel: URI and the national dialling form. Data from Google's libphonenumber, no network call, so it cannot fail because a third party is down. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| phone* | string | The phone number, in any usual notation: +34 612 34 56 78, 0034612345678, (612) 345-678. |
| country | string | Optional ISO 3166-1 alpha-2 country, e.g. ES. Only used when the number carries no country code. |
{
"type": "object",
"required": [
"phone"
],
"properties": {
"phone": {
"type": "string",
"description": "The phone number, in any usual notation: +34 612 34 56 78, 0034612345678, (612) 345-678."
},
"country": {
"type": "string",
"description": "Optional ISO 3166-1 alpha-2 country, e.g. ES. Only used when the number carries no country code."
}
},
"additionalProperties": false
}Use when an agent is building calldata by hand or filtering logs and needs the exact identifiers: it turns a Solidity signature such as transfer(address,uint256) into its 4-byte function selector and its 32-byte event topic0. Do not use to run the call once you have the calldata (/v1/evm/call) or to hash arbitrary data (/v1/util/keccak256). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| signature* | string | Canonical signature: name(type1,type2), no spaces and no argument names. |
{
"type": "object",
"required": [
"signature"
],
"properties": {
"signature": {
"type": "string",
"description": "Canonical signature: name(type1,type2), no spaces and no argument names."
}
},
"additionalProperties": false
}Use when an agent must prove two payloads are the same byte for byte, or sign an API request: SHA-256 of any string or hex payload, returned as hex and as base64, which are the two forms signatures and content addresses are written in. Do not use for anything Ethereum hashes: the chain uses Keccak-256 (/v1/util/keccak256), which gives a different digest. No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| input* | string | Plain text, or a 0x-prefixed hex payload to hash as bytes. |
{
"type": "object",
"required": [
"input"
],
"properties": {
"input": {
"type": "string",
"description": "Plain text, or a 0x-prefixed hex payload to hash as bytes."
}
},
"additionalProperties": false
}Use when an agent must turn an on-chain integer into a human amount, or back, without losing money to rounding: converts between wei, gwei, ether and any token decimals with exact integer maths, no floating point. Being off by a factor of a thousand on decimals is the mistake that costs real funds. Do not use to find a token's decimals (/v1/evm/token-info returns them). No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| to* | string | wei | gwei | ether, or a number of decimals. |
| from* | string | wei | gwei | ether, or a number of decimals. |
| amount* | string | The quantity, as a string to avoid float loss. |
{
"type": "object",
"required": [
"amount",
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"description": "wei | gwei | ether, or a number of decimals."
},
"from": {
"type": "string",
"description": "wei | gwei | ether, or a number of decimals."
},
"amount": {
"type": "string",
"description": "The quantity, as a string to avoid float loss."
}
},
"additionalProperties": false
}Use when an agent needs ids that must not collide: cryptographically random UUID v4s, up to 100 in one call, straight from the platform CSPRNG. For idempotency keys, request ids and correlation ids, where a repeat means a duplicate charge or a lost trace. Do not use for a secret or a password (/v1/random/password reports its entropy) or for a hash (/v1/util/sha256). $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| count | number | How many to generate, 1-100. Defaults to 1. |
{
"type": "object",
"required": [],
"properties": {
"count": {
"type": "number",
"description": "How many to generate, 1-100. Defaults to 1."
}
},
"additionalProperties": false
}Use when an agent must decide whether a company's tax number is usable before invoicing: validates one EU VAT number offline - country prefix, the format that country uses, and the published check-digit algorithm where one exists. Says explicitly whether the check digits were verified or only the format. Deterministic, no network call. Built for cleaning a list of companies one at a time. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| vat* | string | The VAT number, with or without the country prefix and with any spacing. |
{
"type": "object",
"required": [
"vat"
],
"properties": {
"vat": {
"type": "string",
"description": "The VAT number, with or without the country prefix and with any spacing."
}
},
"additionalProperties": false
}Use when an agent must decide whether whoever is talking to it really controls a wallet: it recovers the address that signed a personal_sign (EIP-191) message and says whether it matches the one you expected. This is the check that turns a claimed address into a proven one. Do not use for EIP-712 typed data or for a contract signature (ERC-1271): this route verifies personal_sign. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| message* | string | The exact message that was signed. |
| expected | string | Optional address to compare the recovered signer against. |
| signature* | string | 65-byte 0x signature from personal_sign. |
{
"type": "object",
"required": [
"message",
"signature"
],
"properties": {
"message": {
"type": "string",
"description": "The exact message that was signed."
},
"expected": {
"type": "string",
"description": "Optional address to compare the recovered signer against."
},
"signature": {
"type": "string",
"description": "65-byte 0x signature from personal_sign."
}
},
"additionalProperties": false
}Use when an agent is choosing a date and has to justify the choice: a day-by-day forecast for any point on Earth, up to nine days out, from the Norwegian Meteorological Institute's official model. Each day carries its minimum and maximum temperature, total precipitation, strongest wind and the midday symbol, with the exact model run and the institute's declared units. $0.01 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| lat* | number | Latitude in decimal degrees, -90 to 90. Rounded to 4 decimals. |
| lon* | number | Longitude in decimal degrees, -180 to 180. Rounded to 4 decimals. |
| days | number | How many days to return, 1-9. Defaults to 5. The last day is usually partial and says so. |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"description": "Latitude in decimal degrees, -90 to 90. Rounded to 4 decimals."
},
"lon": {
"type": "number",
"description": "Longitude in decimal degrees, -180 to 180. Rounded to 4 decimals."
},
"days": {
"type": "number",
"description": "How many days to return, 1-9. Defaults to 5. The last day is usually partial and says so."
}
},
"additionalProperties": false
}Use when an agent must act on the weather right now and be able to cite it: current conditions for any point on Earth, from the Norwegian Meteorological Institute's official model, not an aggregator. Returns temperature, humidity, pressure, wind speed and bearing, cloud cover and the next hour's precipitation, plus the exact model run it came from and the units the institute itself declares, so the figure can be checked. $0.01 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| lat* | number | Latitude in decimal degrees, -90 to 90. Rounded to 4 decimals, which is what the institute accepts. |
| lon* | number | Longitude in decimal degrees, -180 to 180. Rounded to 4 decimals. |
| hours | number | How many hourly steps to include after the current one, 0-24. Defaults to 6. |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"description": "Latitude in decimal degrees, -90 to 90. Rounded to 4 decimals, which is what the institute accepts."
},
"lon": {
"type": "number",
"description": "Longitude in decimal degrees, -180 to 180. Rounded to 4 decimals."
},
"hours": {
"type": "number",
"description": "How many hourly steps to include after the current one, 0-24. Defaults to 6."
}
},
"additionalProperties": false
}Use when an agent needs what a page SAYS and not its HTML: it fetches one URL and returns the readable page as markdown - title, description, headings, paragraphs and links with their destinations, plus the canonical URL, language and word count. Boilerplate, scripts and navigation are stripped. Built for going through a list of links one at a time. No API key, no account. $0.01 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| url* | string | The page to read. http and https only; private and loopback addresses are refused. |
| links | boolean | Also return the outbound links as a list. Defaults to false. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The page to read. http and https only; private and loopback addresses are refused."
},
"links": {
"type": "boolean",
"description": "Also return the outbound links as a list. Defaults to false."
}
},
"additionalProperties": false
}Use when an agent must decide whether a link is alive and where it really lands, without paying for the page: it checks one URL without downloading it - HTTP status, the full redirect chain hop by hop with the code of each, the final URL, whether it ends on HTTPS, content type and size, and the security headers the server sends. Built for going through a list of links one at a time. No API key, no account. $0.005 per call, paid over x402 (USDC).
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to check. http and https only; private and loopback addresses are refused. |
| method | string | HEAD (default) or GET. Some servers refuse HEAD and only answer GET. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to check. http and https only; private and loopback addresses are refused."
},
"method": {
"type": "string",
"description": "HEAD (default) or GET. Some servers refuse HEAD and only answer GET."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"prompt"
],
"properties": {
"url": {
"type": "string",
"description": "https URL of the image to edit. Use this or image."
},
"mask": {
"type": "string",
"description": "The mask, as base64. Use this or mask_url."
},
"seed": {
"type": "number",
"description": "Same inputs and same seed give the same edit."
},
"image": {
"type": "string",
"description": "The image to edit, as base64. Use this or url."
},
"steps": {
"type": "number",
"description": "Diffusion steps, 1-20."
},
"prompt": {
"type": "string",
"description": "What to paint into the masked area, up to 2048 characters."
},
"guidance": {
"type": "number",
"description": "How closely to follow the prompt, 0-20."
},
"mask_url": {
"type": "string",
"description": "https URL of the mask: white where it should repaint, black where it must not. Use this or mask."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"prompt"
],
"properties": {
"seed": {
"type": "number",
"description": "Same prompt and same seed give the same image."
},
"steps": {
"type": "number",
"description": "Diffusion steps, 1-20."
},
"width": {
"type": "number",
"description": "Width in pixels, a multiple of 8 between 256 and 1536. Default 1024."
},
"height": {
"type": "number",
"description": "Height in pixels, a multiple of 8 between 256 and 1536. Default 1024."
},
"inline": {
"type": "boolean",
"description": "Also return the image as base64. Default false."
},
"prompt": {
"type": "string",
"description": "What to draw, up to 2048 characters. English works best."
},
"guidance": {
"type": "number",
"description": "How closely to follow the prompt, 0-20."
},
"negative_prompt": {
"type": "string",
"description": "What to keep out of the image, up to 1024 characters."
}
},
"additionalProperties": false
}