# agentsvc.io — complete guide for AI agents

> Pay-per-call API marketplace for AI agents. 27 services (web scraping to Markdown, screenshots, PDF, OCR, search, news, weather, geocoding, DNS/SSL/WHOIS, email and phone validation, crypto and stock prices, FX rates, wallet balance, barcodes, image resize, timezone). Paid per request with USDC on Base via the x402 protocol. No account, no API key, no subscription. Prices from $0.002 per call. Free trial calls on every service.


## 1. Payment (x402)

- protocol: x402
- x402_versions_accepted: [1,2]
- scheme: exact
- network: eip155:8453
- network_v1: base
- chain_id: 8453
- asset: USDC
- asset_contract: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
- asset_decimals: 6
- eip712_domain: {"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}
- pay_to: 0x622efA6Ceb83a5b6EdBC931332f4db68B7f74F27
- facilitator: https://facilitator.payai.network
- request_header_v2: PAYMENT-SIGNATURE
- request_header_v1: X-PAYMENT
- requirements_v2: base64 JSON in the PAYMENT-REQUIRED response header of the 402
- requirements_v1: JSON body of the 402 (accepts[0])
- receipt_header: PAYMENT-RESPONSE (and X-PAYMENT-RESPONSE): base64 JSON with transaction hash
- accounts_required: false
- api_keys_required: false
- settlement: per call, on-chain, after the service succeeded. Failed calls are never charged.

### Flow

1. Request without payment → HTTP 402. Body (x402 v1): {"x402Version":1,"accepts":[{scheme:"exact",network:"base",maxAmountRequired,asset,payTo,resource,maxTimeoutSeconds,extra:{name:"USD Coin",version:"2"}}]}. Header PAYMENT-REQUIRED (x402 v2): base64 JSON {"x402Version":2,"resource":{url},"accepts":[{scheme:"exact",network:"eip155:8453",amount,asset,payTo,maxTimeoutSeconds,extra}]}.
2. Sign an EIP-3009 TransferWithAuthorization (EIP-712, domain name "USD Coin" version "2", chainId 8453, verifyingContract 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913) for exactly the amount, to payTo, with a random 32-byte nonce and validBefore at least 60 s ahead.
3. Retry the same request with header PAYMENT-SIGNATURE (v2) or X-PAYMENT (v1) = base64 JSON PaymentPayload.
4. We verify with the facilitator, run the service, then settle on-chain. 200 response: {"success":true,"data":{...},"payment":{"settled":true,"transaction":"0x…","payer":"0x…"}} and header PAYMENT-RESPONSE.
5. If verification fails you get 402 again with "error" (machine code) and "hint" (what to fix). Input errors return 400 with example_input and are never charged. 5xx are never charged.

### Client code

JavaScript:
```js
npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.EVM_PRIVATE_KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agentsvc.io/api/v1/proxy/web-scrape", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ url: "https://example.com" }) });
console.log(await res.json());
```

Python:
```python
pip install "x402[httpx]" eth_account
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
client = x402Client(); register_exact_evm_client(client, EthAccountSigner(Account.from_key(PRIVATE_KEY)))
async with x402HttpxClient(client) as http:
    r = await http.post("https://agentsvc.io/api/v1/proxy/web-scrape", json={"url": "https://example.com"}); await r.aread(); print(r.text)
```

Free trial (no wallet needed):
```bash
curl -X POST https://agentsvc.io/api/v1/try/ip-lookup -H "Content-Type: application/json" -d '{"ip":"8.8.8.8"}'
```

Wallet: Any EVM wallet with USDC on Base mainnet (chain 8453). $1 USDC covers roughly 300 to 500 calls. No ETH for gas needed: the facilitator pays gas.

## 2. Response format

Success: {"success":true,"data":<service output>,"payment":{...}}. Error: {"success":false,"error":"<code>","message":"<text>","hint":"<what to do>","charged":false}. Binary outputs (PNG, PDF) are base64 strings in data.image_base64 / data.pdf_base64.

Error codes: service_not_found (404), invalid_input (400), payment_required / wrong_network / amount_too_low / authorization_expired / insufficient_funds / invalid_signature / payment_already_used / settlement_failed (402), trial_limit_reached (429, trial endpoint only), facilitator_unavailable (503), internal_error (500).

## 3. Services (27)

### screenshot ($0.005 USDC)

Capture any URL as a PNG screenshot. Returns image_base64 (base64 PNG — decode to get raw bytes). Full JS rendering via Playwright, works on SPAs and dynamic content. Params: url (required), width px (default 1280), height px (default 800), full_page boolean, wait_ms.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/screenshot
- Free trial (1/day per IP): POST https://agentsvc.io/api/v1/try/screenshot
- Example input: `{"url":"https://example.com","width":1280,"height":800}`
- Input schema: `{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The URL to capture"},"width":{"type":"integer","default":1280,"description":"Viewport width in pixels"},"height":{"type":"integer","default":800,"description":"Viewport height in pixels"},"full_page":{"type":"boolean","default":false,"description":"Capture full page height"},"wait_ms":{"type":"integer","default":1000,"description":"Wait time after page load in ms"}}}`
- Example output: `{"image_base64":"iVBORw0KGgoAAAANSUhEUgAABQAAAASwCAYAAACPT...","width":1280,"height":800,"url":"https://example.com","captured_at":"2026-04-07T12:00:00.000Z"}`

### weather ($0.002 USDC)

Real-time weather + 3-day forecast. Returns current (temp_c, feels_like_c, humidity_pct, wind_kph, weather_code) and forecast_3d array. Pass location as city name ('Berlin') or GPS string ('52.52,13.41'). WMO codes: 0=clear, 1-3=cloudy, 45-48=fog, 51-67=rain, 71-77=snow, 95-99=thunderstorm.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/weather
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/weather
- Example input: `{"location":"Berlin"}`
- Input schema: `{"type":"object","required":["location"],"properties":{"location":{"type":"string","description":"City name (e.g. 'Berlin'), or lat,lon string (e.g. '52.52,13.41'). Default: Berlin","default":"Berlin"}}}`
- Example output: `{"location":{"name":"Berlin","lat":52.52,"lon":13.41},"current":{"temp_c":12.5,"feels_like_c":10.2,"humidity_pct":71,"wind_kph":14.8,"weather_code":3},"forecast_3d":[{"date":"2026-04-07","temp_max_c":14,"temp_min_c":8.2,"weather_code":1},{"date":"2026-04-08","temp_max_c":16.5,"temp_min_c":9,"weather_code":2},{"date":"2026-04-09","temp_max_c":13,"temp_min_c":7.8,"weather_code":61}]}`

### exchange-rates ($0.002 USDC)

Live forex rates from European Central Bank (ECB), updated hourly. Returns rates object mapping currency codes to rates relative to base. Pass symbols array to filter (e.g. ['USD','CHF','GBP']). Empty symbols = all 30+ currencies. Use for currency conversion in invoices, pricing, or financial calculations.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/exchange-rates
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/exchange-rates
- Example input: `{"base":"EUR","symbols":["USD","CHF","GBP"]}`
- Input schema: `{"type":"object","properties":{"base":{"type":"string","default":"EUR","description":"Base currency (e.g. USD, EUR, GBP)"},"symbols":{"type":"array","items":{"type":"string"},"description":"Target currencies to return. Empty = all."}}}`
- Example output: `{"base":"EUR","date":"2026-04-07","rates":{"USD":1.0892,"CHF":0.9242,"GBP":0.8594,"JPY":161.32},"source":"European Central Bank via frankfurter.dev"}`

### html-to-pdf ($0.008 USDC)

Render a URL or raw HTML string to PDF. Returns pdf_base64 (base64 PDF — decode to get raw bytes) and page_count. Provide url OR html — never both. Supports format (A4/Letter/Legal), landscape boolean, and margin settings (top/bottom/left/right in CSS units). Use for invoices, reports, or printable document generation.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/html-to-pdf
- Free trial (1/day per IP): POST https://agentsvc.io/api/v1/try/html-to-pdf
- Example input: `{"html":"<h1>Invoice #123</h1><p>Total: $42.00</p>"}`
- Input schema: `{"description":"Provide either 'url' OR 'html' (not both). Common fields (format, landscape, margin) apply to both.","oneOf":[{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"URL to render as PDF (must be publicly accessible)"},"format":{"type":"string","enum":["A4","Letter","Legal"],"default":"A4","description":"Page format"},"landscape":{"type":"boolean","default":false,"description":"Landscape orientation"},"margin":{"type":"object","description":"Page margins (CSS units, e.g. '1cm', '10mm', '0.5in')","properties":{"top":{"type":"string","default":"1cm"},"bottom":{"type":"string","default":"1cm"},"left":{"type":"string","default":"1cm"},"right":{"type":"string","default":"1cm"}}}}},{"type":"object","required":["html"],"properties":{"html":{"type":"string","description":"Raw HTML string to render as PDF"},"format":{"type":"string","enum":["A4","Letter","Legal"],"default":"A4","description":"Page format"},"landscape":{"type":"boolean","default":false,"description":"Landscape orientation"},"margin":{"type":"object","description":"Page margins (CSS units, e.g. '1cm', '10mm', '0.5in')","properties":{"top":{"type":"string","default":"1cm"},"bottom":{"type":"string","default":"1cm"},"left":{"type":"string","default":"1cm"},"right":{"type":"string","default":"1cm"}}}}}]}`
- Example output: `{"pdf_base64":"JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9...","page_count":2,"file_size_bytes":14867,"generated_at":"2026-04-07T12:00:00.000Z"}`

### ip-lookup ($0.002 USDC)

Resolve any IPv4 or IPv6 address to location and network data. Returns country, country_code, city, region, postal, lat/lon, timezone, ISP, org, and ASN. Use for fraud detection, geolocation enrichment, or access log analysis.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/ip-lookup
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/ip-lookup
- Example input: `{"ip":"8.8.8.8"}`
- Input schema: `{"type":"object","required":["ip"],"properties":{"ip":{"type":"string","description":"IPv4 or IPv6 address to look up (e.g. '8.8.8.8' or '2001:4860:4860::8888')"}}}`
- Example output: `{"ip":"8.8.8.8","country":"United States","country_code":"US","region":"Virginia","city":"Ashburn","postal":"20149","lat":39.0438,"lon":-77.4874,"timezone":"America/New_York","isp":"Google LLC","org":"Google Public DNS","asn":"AS15169"}`

### webpage-reader ($0.006 USDC)

Fetch and extract clean readable text from any URL. Full JS rendering via Playwright — works on SPAs and dynamic sites. Returns title, text (cleaned content, default max 8000 chars), description, word_count, and optional links array. Ideal for web research, content summarization, or feeding page content to an LLM.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/webpage-reader
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/webpage-reader
- Example input: `{"url":"https://example.com","max_chars":4000}`
- Input schema: `{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The URL to read and extract content from"},"include_links":{"type":"boolean","default":false,"description":"If true, include up to 50 links found on the page"},"max_chars":{"type":"integer","default":8000,"description":"Maximum characters of text to return (truncated with …)"}}}`
- Example output: `{"url":"https://example.com","title":"Example Domain","description":"This domain is for use in illustrative examples in documents.","text":"Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.\n\nMore information...","word_count":34,"fetched_at":"2026-04-07T12:00:00.000Z","http_status":200}`

### dns-lookup ($0.002 USDC)

Resolve DNS records for any domain. Supports A, AAAA, MX, TXT, CNAME, NS. Returns records object with array per type. Default: A records only. Use to verify mail server setup (MX), check domain ownership (TXT), or debug DNS propagation.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/dns-lookup
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/dns-lookup
- Example input: `{"domain":"github.com","types":["A","MX"]}`
- Input schema: `{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Domain name to look up (e.g. 'example.com', 'mail.google.com')"},"types":{"type":"array","items":{"type":"string","enum":["A","AAAA","MX","TXT","CNAME","NS"]},"default":["A"],"description":"DNS record types to resolve. Default: [\"A\"]. Supported: A, AAAA, MX, TXT, CNAME, NS"}}}`
- Example output: `{"domain":"example.com","records":{"A":["93.184.216.34"],"MX":[{"priority":10,"exchange":"mail.example.com"}]},"resolved_at":"2026-04-07T12:00:00.000Z"}`

### qr-code ($0.002 USDC)

Generate a QR code for any text or URL. Returns image_base64 (base64 PNG — decode to get raw bytes). Params: text (required), size in px (64-1024, default 256), error_correction (L/M/Q/H, default M). H = highest redundancy, survives up to 30% damage.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/qr-code
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/qr-code
- Example input: `{"text":"https://agentsvc.io","size":256}`
- Input schema: `{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text or URL to encode in the QR code"},"size":{"type":"integer","default":256,"description":"Output image size in pixels (width and height). Min: 64, Max: 1024."},"error_correction":{"type":"string","enum":["L","M","Q","H"],"default":"M","description":"Error correction level: L=7%, M=15%, Q=25%, H=30% data recovery. Higher = bigger QR code."}}}`
- Example output: `{"image_base64":"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAA...","width":256,"height":256,"text":"https://agentsvc.io","generated_at":"2026-04-07T12:00:00.000Z"}`

### web-search ($0.003 USDC)

Search for factual information via DuckDuckGo + Wikipedia. Returns heading, abstract (plain-language summary), abstract_url, and results (list of relevant links). Best for: people, places, concepts, history, science. NOT for breaking news — use news-search instead.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/web-search
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/web-search
- Example input: `{"query":"x402 payment protocol"}`
- Input schema: `{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search query string (e.g. 'current Bitcoin price', 'capital of France', 'Next.js 15 release date')"}}}`
- Example output: `{"query":"capital of France","heading":"Paris","abstract":"Paris is the capital and most populous city of France. With an official estimated population of 2,102,650 residents as of 1 January 2023 in an area of more than 105 km²...","abstract_url":"https://en.wikipedia.org/wiki/Paris","abstract_source":"Wikipedia","results":[{"text":"Paris — Wikipedia","url":"https://en.wikipedia.org/wiki/Paris"},{"text":"Visit Paris — Official Tourism Site","url":"https://www.parisinfo.com/"}],"answer":""}`

### translate ($0.002 USDC)

Translate text between 100+ languages. Max 500 characters per call. Returns translated_text and confidence (0-1). Set target_lang to IETF code: 'de' (German), 'fr' (French), 'es' (Spanish), 'ja' (Japanese), 'zh-CN' (Chinese Simplified), 'ar' (Arabic), 'pt' (Portuguese), 'it' (Italian), 'nl' (Dutch). source_lang defaults to auto-detect.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/translate
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/translate
- Example input: `{"text":"Hello, how are you?","target_lang":"de"}`
- Input schema: `{"type":"object","required":["text","target_lang"],"properties":{"text":{"type":"string","description":"Text to translate (max 500 characters per call)"},"target_lang":{"type":"string","description":"Target language code (e.g. 'de' for German, 'fr' for French, 'es' for Spanish, 'ja' for Japanese, 'zh' for Chinese). Use ISO 639-1 codes."},"source_lang":{"type":"string","default":"auto","description":"Source language code. Default: 'auto' (auto-detect). Use ISO 639-1 codes."}}}`
- Example output: `{"original_text":"Hello, how are you?","translated_text":"Hallo, wie geht es Ihnen?","source_lang":"en","target_lang":"de","confidence":1,"service":"MyMemory"}`

### email-validate ($0.002 USDC)

Validate an email address: RFC 5322 format check, domain MX record lookup, disposable provider detection, and role address detection (e.g. info@, admin@). Returns is_valid boolean and granular checks object. Use before storing or sending to email addresses to prevent bounces.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/email-validate
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/email-validate
- Example input: `{"email":"support@github.com"}`
- Input schema: `{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email","description":"The email address to validate (e.g. 'user@example.com')"}}}`
- Example output: `{"email":"user@example.com","is_valid":true,"local_part":"user","domain":"example.com","checks":{"format_valid":true,"domain_has_mx":true,"is_disposable":false,"is_role_address":false},"mx_records":["mail.example.com"]}`

### ssl-check ($0.002 USDC)

Inspect SSL/TLS certificate for any domain. Returns valid boolean, days_remaining, issuer, valid_from, valid_to, subject_alt_names (SANs), fingerprint_sha256, and protocol version. Default port 443. Use for certificate expiry monitoring, security audits, or HTTPS verification.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/ssl-check
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/ssl-check
- Example input: `{"domain":"github.com"}`
- Input schema: `{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Domain to check SSL for (e.g. 'github.com', 'api.example.com'). Do not include https://"},"port":{"type":"integer","default":443,"description":"Port to check (default: 443)"}}}`
- Example output: `{"domain":"github.com","port":443,"valid":true,"subject":"CN=github.com","subject_alt_names":["github.com","www.github.com"],"issuer":"DigiCert Inc","valid_from":"2024-03-07T00:00:00.000Z","valid_to":"2025-03-07T23:59:59.000Z","days_remaining":156,"serial_number":"0a:bc:12:...","fingerprint_sha256":"AB:CD:EF:...","protocol":"TLSv1.3"}`

### whois ($0.002 USDC)

Domain registration lookup via RDAP (modern WHOIS). Returns registrar, registrar_url, created_at, updated_at, expires_at, days_until_expiry, name_servers array, status array, and registrant_country. Clean JSON — no raw WHOIS text to parse. Covers all major TLDs.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/whois
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/whois
- Example input: `{"domain":"github.com"}`
- Input schema: `{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Domain to look up (e.g. 'github.com', 'openai.com'). Include TLD, exclude https://"}}}`
- Example output: `{"domain":"github.com","registrar":"MarkMonitor Inc.","registrar_url":"http://www.markmonitor.com","status":["clientDeleteProhibited","clientTransferProhibited","clientUpdateProhibited"],"created_at":"2007-10-09T18:20:50.000Z","updated_at":"2024-09-08T09:18:28.000Z","expires_at":"2026-10-09T18:20:50.000Z","days_until_expiry":548,"name_servers":["dns1.p08.nsone.net","dns2.p08.nsone.net","ns-1283.awsdns-32.org","ns-1707.awsdns-21.co.uk"],"dnssec":"unsigned","registrant_country":"US"}`

### crypto-prices ($0.002 USDC)

Real-time crypto prices, market caps, and 24h % changes via CoinGecko. Pass coins as CoinGecko IDs (['bitcoin','ethereum','solana']) or tickers. Max 25 coins per call. Returns usd, usd_24h_change, usd_market_cap per coin. Add currencies param for multi-currency output (['usd','eur','gbp']).

- Endpoint: POST https://agentsvc.io/api/v1/proxy/crypto-prices
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/crypto-prices
- Example input: `{"coins":["bitcoin","ethereum"],"currencies":["usd"]}`
- Input schema: `{"type":"object","required":["coins"],"properties":{"coins":{"type":"array","items":{"type":"string"},"description":"List of coin IDs or ticker symbols. Accepts CoinGecko IDs (e.g. 'bitcoin', 'ethereum') or common tickers (e.g. 'BTC', 'ETH', 'SOL'). Max 25 coins per call.","examples":[["bitcoin","ethereum"],["BTC","ETH","SOL"],["bitcoin","BNB","cardano"]]},"currencies":{"type":"array","items":{"type":"string"},"default":["usd"],"description":"Target fiat currencies. Default: ['usd']. Supported: usd, eur, gbp, jpy, chf, aud, cad, btc, eth."}}}`
- Example output: `{"prices":{"bitcoin":{"name":"Bitcoin","symbol":"BTC","usd":71923,"usd_24h_change":1.42,"usd_market_cap":1419000000000},"ethereum":{"name":"Ethereum","symbol":"ETH","usd":2188,"usd_24h_change":0.41,"usd_market_cap":263000000000}},"fetched_at":"2026-04-10T14:00:00.000Z","source":"CoinGecko","not_found":[]}`

### pdf-extract ($0.004 USDC)

Extract all text from a PDF. Send as pdf_base64 (base64-encoded PDF, max ~10 MB decoded). Returns text (full concatenated text), pages array (per-page text + char_count), page_count, and metadata (title, author, creator). Encode with: Buffer.from(pdfBytes).toString('base64'). Ideal for RAG pipelines, document QA, or LLM ingestion.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/pdf-extract
- Free trial (1/day per IP): POST https://agentsvc.io/api/v1/try/pdf-extract
- Example input: `{"pdf_base64":"<base64 of a PDF>","max_pages":10}`
- Input schema: `{"type":"object","required":["pdf_base64"],"properties":{"pdf_base64":{"type":"string","description":"Base64-encoded PDF file content. Decode a PDF file to base64 and pass it here. Max ~10 MB (unencoded)."},"max_pages":{"type":"integer","default":50,"description":"Maximum number of pages to extract. Default: 50. Use to limit processing time for large PDFs."}}}`
- Example output: `{"text":"Quarterly Financial Report Q1 2026\n\nExecutive Summary\nTotal revenue increased by 23% year-over-year...","page_count":12,"pages":[{"page":1,"text":"Quarterly Financial Report Q1 2026\n\nExecutive Summary","char_count":54},{"page":2,"text":"Table of Contents\n1. Revenue Overview\n2. Cost Analysis","char_count":58}],"metadata":{"title":"Q1 2026 Financial Report","author":"Finance Department","creator":"Adobe Acrobat"},"file_size_bytes":245760,"extracted_at":"2026-04-10T14:00:00.000Z"}`

### phone-validate ($0.002 USDC)

Parse and validate any phone number worldwide using libphonenumber. Returns is_valid, e164 (canonical international format e.g. '+4917612345678'), national_format, country_code (ISO alpha-2), and line_type (MOBILE/FIXED_LINE/VOIP/TOLL_FREE). Provide country_code hint (e.g. 'DE') for local numbers without country prefix.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/phone-validate
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/phone-validate
- Example input: `{"phone":"+41 44 668 18 00"}`
- Input schema: `{"type":"object","required":["phone"],"properties":{"phone":{"type":"string","description":"Phone number to validate. Can be in any format: E.164 ('+4915123456789'), national ('015123456789'), or international ('0049 151 23456789'). Include country code (+ prefix) for best results."},"country_code":{"type":"string","description":"ISO 3166-1 alpha-2 country code hint for parsing national numbers without country prefix (e.g. 'DE' for Germany, 'US' for United States). Optional if number includes country code (+...)."}}}`
- Example output: `{"phone":"+49 151 23456789","is_valid":true,"e164":"+4915123456789","national_format":"0151 23456789","international_format":"+49 151 23456789","country_code":"DE","country_calling_code":"49","line_type":"MOBILE","checks":{"is_possible":true,"is_valid":true}}`

### stock-prices ($0.002 USDC)

Real-time stock data via Yahoo Finance. Returns price, change, change_pct, previous_close, market_cap, pe_ratio, week_52_high, week_52_low, volume, and market_state. Max 10 symbols per call. Non-US exchange suffixes: 'SAP.DE' (Xetra), 'VOD.L' (London LSE), 'AIR.PA' (Paris Euronext), 'ASML.AS' (Amsterdam).

- Endpoint: POST https://agentsvc.io/api/v1/proxy/stock-prices
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/stock-prices
- Example input: `{"symbols":["AAPL","MSFT"]}`
- Input schema: `{"type":"object","required":["symbols"],"properties":{"symbols":{"type":"array","items":{"type":"string"},"description":"List of stock ticker symbols. Max 10 per call. Examples: ['AAPL', 'MSFT', 'NVDA'] for US stocks, ['SAP.DE', 'BAYN.DE'] for German XETRA stocks, ['TSLA', 'GOOGL', 'AMZN']. Use the exchange suffix for non-US stocks (e.g. .DE, .L, .PA)."}}}`
- Example output: `{"stocks":{"AAPL":{"symbol":"AAPL","name":"Apple Inc.","exchange":"NMS","currency":"USD","price":260.49,"change":1.59,"change_pct":0.61,"previous_close":258.9,"open":259.5,"day_high":261.2,"day_low":258.75,"volume":48200000,"market_cap":3910000000000,"pe_ratio":32.4,"week_52_high":273.59,"week_52_low":169.21,"market_state":"REGULAR"},"MSFT":{"symbol":"MSFT","name":"Microsoft Corporation","exchange":"NMS","currency":"USD","price":373.07,"change":1.43,"change_pct":0.38,"previous_close":371.64,"market_state":"REGULAR"}},"not_found":[],"fetched_at":"2026-04-10T14:00:00.000Z","source":"Yahoo Finance"}`

### geocode ($0.002 USDC)

Forward geocoding: address string → lat/lon. Reverse geocoding: lat/lon → human-readable address. Powered by OpenStreetMap Nominatim. Returns results array with display_name, lat, lon, type, and structured address object. Provide address (string) for forward, or lat + lon (numbers) for reverse.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/geocode
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/geocode
- Example input: `{"address":"Brandenburger Tor, Berlin"}`
- Input schema: `{"type":"object","description":"Provide either 'address' for forward geocoding, or both 'lat' + 'lon' for reverse geocoding.","oneOf":[{"required":["address"],"properties":{"address":{"type":"string","description":"Address string to geocode (e.g. 'Eiffel Tower, Paris', '1600 Pennsylvania Ave NW, Washington DC', 'Marienplatz 1, Munich')"},"limit":{"type":"integer","default":1,"description":"Max number of results to return (default: 1, max: 5)"}}},{"required":["lat","lon"],"properties":{"lat":{"type":"number","description":"Latitude for reverse geocoding (e.g. 48.8566)"},"lon":{"type":"number","description":"Longitude for reverse geocoding (e.g. 2.3522)"}}}]}`
- Example output: `{"mode":"forward","results":[{"display_name":"Eiffel Tower, 5, Avenue Anatole France, Quartier du Gros-Caillou, Paris, Île-de-France, France","lat":48.8583736,"lon":2.2922926,"type":"tourism","address":{"road":"Avenue Anatole France","city":"Paris","state":"Île-de-France","postcode":"75007","country":"France","country_code":"fr"},"osm_type":"way","place_id":158515771}],"source":"OpenStreetMap Nominatim"}`

### news-search ($0.003 USDC)

Search recent news articles by keyword. Returns articles with title, url, source, published_at, and snippet. Sources: HackerNews Algolia (tech) + BBC RSS (general/world). Optional category filter: general/tech/business/science/health/politics. Limit max 30. Use for current events, topic monitoring, or market sentiment.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/news-search
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/news-search
- Example input: `{"query":"AI agents","limit":5}`
- Input schema: `{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search query (e.g. 'artificial intelligence', 'climate change 2026', 'Apple earnings')"},"limit":{"type":"integer","default":10,"description":"Number of articles to return (default: 10, max: 30)"},"category":{"type":"string","enum":["general","tech","business","science","health","politics"],"default":"general","description":"News category filter. 'tech' searches HackerNews for developer/tech news. Others search BBC + general news feeds."}}}`
- Example output: `{"query":"artificial intelligence","articles":[{"title":"OpenCode – Open source AI coding agent","url":"https://github.com/opencode-ai/opencode","source":"Hacker News","published_at":"2026-04-10T08:32:00Z","snippet":"","score":1274},{"title":"AI breakthroughs in 2026: what's next","url":"https://www.bbc.co.uk/news/technology-67890123","source":"BBC News","published_at":"2026-04-10T06:15:00Z","snippet":"Scientists and engineers are pushing the boundaries..."}],"total_found":48,"sources_queried":["Hacker News","BBC News"]}`

### ocr ($0.008 USDC)

Extract text from images using Tesseract OCR. Send image as image_base64 (PNG/JPEG/WebP/TIFF/BMP, max 10 MB decoded). Returns text and confidence (0-100, where 80+ is reliable). Set language to Tesseract code: 'eng' (default), 'deu' (German), 'fra' (French), 'chi_sim' (Chinese Simplified), 'jpn' (Japanese), 'ara' (Arabic). Use for invoices, receipts, scanned documents, or screenshots with text.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/ocr
- Free trial (1/day per IP): POST https://agentsvc.io/api/v1/try/ocr
- Example input: `{"image_base64":"<base64 of a PNG/JPG>","language":"eng"}`
- Input schema: `{"type":"object","required":["image_base64"],"properties":{"image_base64":{"type":"string","description":"Base64-encoded image. Supported formats: PNG, JPEG, WebP, TIFF, BMP. Max 10 MB decoded. For best results use high-contrast images with clear text."},"language":{"type":"string","default":"eng","description":"Tesseract language code. Default: 'eng' (English). Other supported: 'deu' (German), 'fra' (French), 'spa' (Spanish), 'ita' (Italian), 'por' (Portuguese), 'rus' (Russian), 'chi_sim' (Chinese Simplified), 'jpn' (Japanese), 'ara' (Arabic), 'kor' (Korean), 'nld' (Dutch), 'pol' (Polish). Use '+' to combine: 'eng+deu'."},"psm":{"type":"integer","default":3,"description":"Page Segmentation Mode. 3 = fully automatic (default, best for most images). 6 = single uniform block of text. 7 = single text line. 11 = sparse text (find text anywhere). 13 = raw line (no line ordering). Use 6 or 7 for forms/labels."}}}`
- Example output: `{"text":"Invoice #12345\nDate: April 10, 2026\n\nBill To:\nJohn Smith\n123 Main Street\n\nTotal Due: $1,250.00","confidence":94,"language":"eng","word_count":18,"char_count":72,"processing_ms":1840,"processed_at":"2026-04-10T14:00:00.000Z"}`

### web-scrape ($0.004 USDC)

Fetch any public URL and return the page as clean Markdown for LLM consumption (title, meta description, main content with headings/lists/links preserved). Pass render:true to execute JavaScript in a real browser for SPAs (slower, returns plain text). Use this instead of raw fetch when a site blocks bots or when you want token-efficient content. Params: url (required), max_chars (default 8000, max 60000), include_links boolean, render boolean.

- Endpoint: POST https://agentsvc.io/api/v1/proxy/web-scrape
- Free trial (1/day per IP): POST https://agentsvc.io/api/v1/try/web-scrape
- Example input: `{"url":"https://example.com","max_chars":8000}`
- Input schema: `{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public http(s) URL to scrape"},"max_chars":{"type":"integer","default":8000,"maximum":60000,"description":"Truncate Markdown after this many characters"},"include_links":{"type":"boolean","default":false,"description":"Also return up to 100 absolute links found on the page"},"render":{"type":"boolean","default":false,"description":"Render with a headless browser (for JavaScript-heavy pages). Returns plain text instead of Markdown."}}}`
- Example output: `{"url":"https://example.com/","status":200,"title":"Example Domain","description":"","markdown":"# Example Domain\n\nThis domain is for use in illustrative examples in documents.\n\n[More information...](https://www.iana.org/domains/example)","word_count":21,"truncated":false,"rendered":false,"fetch_ms":312,"fetched_at":"2026-09-09T12:00:00.000Z"}`

### rss-fetch ($0.002 USDC)

Fetch an RSS 2.0, RSS 1.0 or Atom feed and return normalized JSON items (title, link, published_at ISO 8601, summary without HTML, author, guid). Use for monitoring blogs, news sites, GitHub releases, podcasts or any feed URL without writing an XML parser. Params: url (required), limit (default 20, max 100).

- Endpoint: POST https://agentsvc.io/api/v1/proxy/rss-fetch
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/rss-fetch
- Example input: `{"url":"https://hnrss.org/frontpage","limit":10}`
- Input schema: `{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Feed URL (RSS or Atom)"},"limit":{"type":"integer","default":20,"maximum":100,"description":"Maximum number of items to return"}}}`
- Example output: `{"feed":{"title":"Hacker News: Front Page","link":"https://news.ycombinator.com/","description":"Hacker News RSS","format":"rss","url":"https://hnrss.org/frontpage"},"items":[{"title":"Show HN: An x402 marketplace for agents","link":"https://news.ycombinator.com/item?id=1","published_at":"2026-09-09T10:12:00.000Z","summary":"Article URL: https://agentsvc.io","author":"jakob","guid":"https://news.ycombinator.com/item?id=1"}],"item_count":1,"total_in_feed":30,"fetched_at":"2026-09-09T12:00:00.000Z"}`

### url-status ($0.002 USDC)

Check whether a URL is reachable and what it returns: final status code, full redirect chain, response time, content-type, server header and content length. Use for link validation, uptime checks, canonical URL resolution or before spending money on a scrape/screenshot. Params: url (required), method (GET default, or HEAD).

- Endpoint: POST https://agentsvc.io/api/v1/proxy/url-status
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/url-status
- Example input: `{"url":"https://example.com"}`
- Input schema: `{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"URL to check"},"method":{"type":"string","enum":["GET","HEAD"],"default":"GET"}}}`
- Example output: `{"url":"http://github.com","final_url":"https://github.com/","status":200,"ok":true,"reachable":true,"redirect_count":1,"redirects":[{"url":"http://github.com/","status":301,"location":"https://github.com/","ms":48},{"url":"https://github.com/","status":200,"ms":210}],"response_ms":258,"content_type":"text/html; charset=utf-8","content_length":284421,"server":"GitHub.com","https":true,"checked_at":"2026-09-09T12:00:00.000Z"}`

### evm-balance ($0.002 USDC)

Read the ETH and USDC balance of any address on Base mainnet (chain 8453) straight from the chain, plus transaction count and how many x402 calls the USDC covers. Use it to check your own agent wallet before a paid workflow, to verify a counterparty was paid, or to monitor treasury addresses. Params: address (required, 0x...).

- Endpoint: POST https://agentsvc.io/api/v1/proxy/evm-balance
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/evm-balance
- Example input: `{"address":"0x622efA6Ceb83a5b6EdBC931332f4db68B7f74F27"}`
- Input schema: `{"type":"object","required":["address"],"properties":{"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"EVM address on Base"}}}`
- Example output: `{"address":"0x622efA6Ceb83a5b6EdBC931332f4db68B7f74F27","network":"base","chain_id":8453,"eth":"0.0041","eth_wei":"4100000000000000","usdc":"12.5","usdc_atomic":"12500000","usdc_contract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","tx_count":17,"block_number":41234567,"x402_calls_affordable":{"at_0_002":6250,"at_0_005":2500},"checked_at":"2026-09-09T12:00:00.000Z"}`

### barcode ($0.002 USDC)

Generate a barcode as PNG (base64): code128 (default), ean13, ean8, upca, upce, code39, itf14, gs1_128, isbn, datamatrix, pdf417, aztec or qr. Validates check digits for EAN/UPC. Use for labels, shipping, inventory, tickets or invoices. Params: text (required), type, scale (1-8, default 3), include_text boolean (human-readable text under the bars).

- Endpoint: POST https://agentsvc.io/api/v1/proxy/barcode
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/barcode
- Example input: `{"text":"4006381333931","type":"ean13"}`
- Input schema: `{"type":"object","required":["text"],"properties":{"text":{"type":"string","maxLength":500,"description":"Data to encode"},"type":{"type":"string","default":"code128","enum":["code128","ean13","ean8","upca","upce","code39","itf14","gs1_128","isbn","datamatrix","pdf417","aztec","qr"]},"scale":{"type":"integer","default":3,"minimum":1,"maximum":8},"include_text":{"type":"boolean","default":true}}}`
- Example output: `{"image_base64":"iVBORw0KGgoAAAANSUhEUgAAAM...","format":"png","type":"ean13","text":"4006381333931","width":342,"height":132,"size_bytes":1840}`

### image-resize ($0.003 USDC)

Resize, crop-fit and convert images (PNG, JPEG, WebP, AVIF, GIF, TIFF, SVG input) to webp, png, jpeg or avif. Auto-rotates by EXIF. Use to shrink screenshots before sending them to a vision model, create thumbnails, or convert formats. Params: image_base64 or image_url (one required), width, height (max 4096), fit (inside default | cover | contain | fill), format (webp default), quality (1-100, default 80).

- Endpoint: POST https://agentsvc.io/api/v1/proxy/image-resize
- Free trial (1/day per IP): POST https://agentsvc.io/api/v1/try/image-resize
- Example input: `{"image_url":"https://agentsvc.io/sample.png","width":130,"format":"webp"}`
- Input schema: `{"type":"object","properties":{"image_base64":{"type":"string","description":"Base64 image data (data: URI prefix allowed)"},"image_url":{"type":"string","format":"uri","description":"Public URL of the image (max 15 MB)"},"width":{"type":"integer","maximum":4096},"height":{"type":"integer","maximum":4096},"fit":{"type":"string","enum":["inside","cover","contain","fill"],"default":"inside"},"format":{"type":"string","enum":["webp","png","jpeg","avif"],"default":"webp"},"quality":{"type":"integer","minimum":1,"maximum":100,"default":80}}}`
- Example output: `{"image_base64":"UklGRiQAAABXRUJQVlA4...","format":"webp","width":320,"height":200,"size_bytes":6120,"original":{"width":1280,"height":800,"format":"png","size_bytes":214000}}`

### timezone ($0.002 USDC)

Resolve a city name or coordinates to its IANA timezone and return the current local time, UTC offset, DST flag and weekday. Use for scheduling across regions, 'what time is it in X', or normalizing timestamps. Params: location (required, e.g. 'Tokyo' or '35.68,139.69').

- Endpoint: POST https://agentsvc.io/api/v1/proxy/timezone
- Free trial (3/day per IP): POST https://agentsvc.io/api/v1/try/timezone
- Example input: `{"location":"Tokyo"}`
- Input schema: `{"type":"object","required":["location"],"properties":{"location":{"type":"string","description":"City name or 'lat,lon'"}}}`
- Example output: `{"location":{"name":"Tokyo","country":"Japan","lat":35.6895,"lon":139.6917},"timezone":"Asia/Tokyo","abbreviation":"JST","utc_offset":"+09:00","utc_offset_seconds":32400,"is_dst":false,"local_time":"2026-09-09T21:00:00+09:00","local_date":"2026-09-09","weekday":"Wednesday","utc_time":"2026-09-09T12:00:00.000Z","unix_time":1788955200}`


## 4. Choosing a service

- Read a web page as text for an LLM: web-scrape (Markdown, cheapest for content) or webpage-reader (rendered text with a real browser).
- Visual proof of a page: screenshot. Archive or invoice: html-to-pdf.
- Extract text from files: pdf-extract (PDF), ocr (images).
- Facts and search: web-search (summary + links), news-search (recent articles), rss-fetch (any feed).
- Data: weather, timezone, geocode, exchange-rates, crypto-prices, stock-prices, evm-balance.
- Validation and infrastructure: email-validate, phone-validate, dns-lookup, ssl-check, whois, url-status, ip-lookup.
- Generate: qr-code, barcode, image-resize.

## 5. Links

- catalog: https://agentsvc.io/api/v1/services
- openapi: https://agentsvc.io/openapi.json
- llms_txt: https://agentsvc.io/llms.txt
- llms_full_txt: https://agentsvc.io/llms-full.txt
- agents_md: https://agentsvc.io/AGENTS.md
- skill_md: https://agentsvc.io/SKILL.md
- status: https://agentsvc.io/api/v1/status
- docs: https://agentsvc.io/docs
- mcp_server: https://agentsvc.io/mcp-server.mjs
- discovery: https://agentsvc.io/.well-known/x402
- agent_card: https://agentsvc.io/.well-known/agent-card.json
