Documentation

API Reference

Everything you need to integrate agentsvc.io into your agent. Payments run on the x402 protocol with USDC on Base.

Quickstart

Start by listing available services. No API key or authentication required.

bash
# 1. List all available services
curl https://agentsvc.io/api/v1/services

# 2. Filter by category and max price
curl "https://agentsvc.io/api/v1/services?category=visual&max_price=0.01"

# 3. Get a specific service
curl https://agentsvc.io/api/v1/services/screenshot

To call a service, send a POST request with the x402 payment header:

bash
# Call the Screenshot API with x402 payment
curl -X POST https://agentsvc.io/api/v1/proxy/screenshot \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <your-signed-payment>" \
  -d '{
    "url": "https://example.com",
    "width": 1280,
    "full_page": false
  }'
json
{
  "success": true,
  "data": {
    "image_base64": "iVBORw0KGgoAAAANS...",
    "width": 1280,
    "height": 800,
    "url": "https://example.com",
    "captured_at": "2026-04-07T12:00:00.000Z"
  }
}

x402 Payment Flow

agentsvc.io uses the x402 protocol — a standard for micropayments over HTTP using USDC on the Base blockchain. No subscription required, pay only for what you use.

1

Call the endpoint

Send a POST request to the service endpoint without a payment header.

POST /api/v1/proxy/screenshot
Content-Type: application/json

{ "url": "https://example.com" }
2

Receive HTTP 402

The server responds with 402 Payment Required and details about the payment needed.

HTTP/1.1 402 Payment Required
Content-Type: application/json

{
  "x402Version": 1,
  "error": "Payment required",
  "accepts": [{
    "scheme": "exact",
    "network": "base",
    "maxAmountRequired": "5000",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "payTo": "0xC33336EB299d97aa76E61337906A677552878818",
    "maxTimeoutSeconds": 60
  }]
}
3

Sign and attach payment

Sign the USDC payment on Base and attach it as an X-Payment header.

POST /api/v1/proxy/screenshot
Content-Type: application/json
X-Payment: x402 usdc base eyJ...<signed-payload>

{ "url": "https://example.com" }
4

Receive the response

The payment is verified on-chain. The service executes and returns the result.

HTTP/1.1 200 OK
Content-Type: application/json

{
  "success": true,
  "data": { ... }
}

Service Schema

Every service in the catalog follows this TypeScript interface:

typescript
type ServiceCategory = 'visual' | 'data' | 'text' | 'utility' | 'finance';

interface Service {
  id: string;                 // Unique service identifier
  slug: string;               // URL-friendly identifier
  name: string;               // Human-readable name
  description: string;        // What the service does
  category: ServiceCategory;  // Service category
  endpoint: string;           // Full POST endpoint URL
  price_usdc: number;         // Cost in USDC per call (e.g. 0.005)
  latency_p99_ms: number;     // 99th percentile latency in ms
  input_schema: object;       // JSON Schema for request body
  output_schema: object;      // JSON Schema for response data
  is_active: boolean;         // Whether the service is available
  provider: string;           // Service provider identifier
  tags: string[];             // Searchable tags
}

The catalog API returns a paginated list response:

typescript
interface CatalogResponse {
  success: boolean;
  data: Service[];
  meta: {
    total: number;     // Total matching services
    limit: number;     // Items per page (default: 20)
    offset: number;    // Pagination offset
  };
  error?: string;      // Only present on failure
}

Supported query parameters for GET /api/v1/services:

qstringFull-text search across name, description, and tags
categorystringFilter by category: visual, data, text, utility, finance
max_pricenumberMaximum price in USDC (e.g. 0.01)
limitintegerResults per page, max 100, default 20
offsetintegerPagination offset, default 0

Error Codes

All error responses follow the same structure:

json
{
  "success": false,
  "error": "Service not found"
}
CodeStatusDescription
400Bad RequestMissing or invalid parameters in the request body.
402Payment RequiredNo X-Payment header provided, or payment is invalid/insufficient.
404Not FoundThe requested service slug does not exist.
429Too Many RequestsRate limit exceeded. See X-RateLimit-* headers for details.
500Internal Server ErrorUpstream service error. Retry with exponential backoff.

Rate Limits

Currently no hard rate limits are enforced. The platform is designed for high-volume agent traffic. If you experience 503 errors from a service, use exponential backoff with a maximum of 3 retries.

bash
# Retry strategy for agents:
# HTTP 500 / 503 → retry with exponential backoff (max 3x)
# HTTP 400       → do NOT retry (invalid input)
# HTTP 402       → payment required, attach X-Payment header
# HTTP 404       → service does not exist

Services Reference

Every service follows the same pattern: POST /api/v1/proxy/<slug> without payment → receive HTTP 402 → attach X-Payment header → get result. All inputs go in the JSON request body. All outputs are wrapped in { "success": true, "data": { ... } }.

Screenshot API

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.

$0.005/callp99 ~2.8s

Endpoint

POST https://agentsvc.io/api/v1/proxy/screenshot

Input Parameters

ParameterTypeDescription
urlREQ
stringThe URL to capture
width
integer = 1280Viewport width in pixels
height
integer = 800Viewport height in pixels
full_page
boolean = falseCapture full page height
wait_ms
integer = 1000Wait time after page load in ms

Response Fields — inside data

FieldTypeDescription
image_base64stringBase64-encoded PNG image (decode to get raw bytes)
widthintegerActual image width in pixels
heightintegerActual image height in pixels
urlstringThe URL that was captured
captured_atstringISO 8601 timestamp of when screenshot was taken

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/screenshot \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "url": "https://example.com",
  "width": 1280,
  "full_page": false
}'

Example Response

json
{
  "success": true,
  "data": {
    "image_base64": "iVBORw0KGgoAAAANSUhEUgAABQAAAASwCAYAAACPT...",
    "width": 1280,
    "height": 800,
    "url": "https://example.com",
    "captured_at": "2026-04-07T12:00:00.000Z"
  }
}

Weather Data

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.

$0.002/callp99 ~400ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/weather

Input Parameters

ParameterTypeDescription
locationREQ
string = "Berlin"City name (e.g. 'Berlin'), or lat,lon string (e.g. '52.52,13.41'). Default: Berlin

Response Fields — inside data

FieldTypeDescription
locationobject
currentobject
forecast_3darray3-day daily forecast

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/weather \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "location": "Berlin"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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
      }
    ]
  }
}

Currency Exchange Rates

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.

$0.001/callp99 ~300ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/exchange-rates

Input Parameters

ParameterTypeDescription
base
string = "EUR"Base currency (e.g. USD, EUR, GBP)
symbols
arrayTarget currencies to return. Empty = all.

Response Fields — inside data

FieldTypeDescription
basestringBase currency code (e.g. EUR)
datestringDate of the exchange rates
ratesobjectMap of currency code → exchange rate relative to base
sourcestringData source attribution. Always: 'European Central Bank via frankfurter.dev'

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/exchange-rates \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "base": "EUR",
  "symbols": [
    "USD",
    "GBP",
    "CHF"
  ]
}'

Example Response

json
{
  "success": true,
  "data": {
    "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

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.

$0.008/callp99 ~3.5s

Endpoint

POST https://agentsvc.io/api/v1/proxy/html-to-pdf

Provide either url or html — not both.

Input Parameters

ParameterTypeDescription
urlREQ
stringURL to render as PDF (must be publicly accessible)
format
A4 | Letter | Legal = "A4"Page format
landscape
boolean = falseLandscape orientation
margin
objectPage margins (CSS units, e.g. '1cm', '10mm', '0.5in')
format
A4 | Letter | Legal = "A4"Page format
landscape
boolean = falseLandscape orientation
margin
objectPage margins (CSS units, e.g. '1cm', '10mm', '0.5in')

Response Fields — inside data

FieldTypeDescription
pdf_base64stringBase64-encoded PDF bytes (decode to get raw PDF file)
page_countintegerNumber of pages in the generated PDF
file_size_bytesintegerSize of the PDF in bytes
generated_atstringISO 8601 timestamp of generation

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/html-to-pdf \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "url": "https://example.com",
  "format": "A4"
}'

Example Response

json
{
  "success": true,
  "data": {
    "pdf_base64": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9...",
    "page_count": 2,
    "file_size_bytes": 14867,
    "generated_at": "2026-04-07T12:00:00.000Z"
  }
}

IP Geolocation

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.

$0.001/callp99 ~150ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/ip-lookup

Input Parameters

ParameterTypeDescription
ipREQ
stringIPv4 or IPv6 address to look up (e.g. '8.8.8.8' or '2001:4860:4860::8888')

Response Fields — inside data

FieldTypeDescription
ipstringThe queried IP address
countrystringFull country name
country_codestringISO 3166-1 alpha-2 country code
regionstringRegion/state name
citystringCity name
postalstringPostal/ZIP code
latnumberLatitude
lonnumberLongitude
timezonestringIANA timezone (e.g. America/New_York)
ispstringInternet Service Provider name
orgstringOrganization name
asnstringAutonomous System Number (e.g. AS15169)

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/ip-lookup \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "ip": "8.8.8.8"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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

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.

$0.006/callp99 ~3.2s

Endpoint

POST https://agentsvc.io/api/v1/proxy/webpage-reader

Input Parameters

ParameterTypeDescription
urlREQ
stringThe URL to read and extract content from
include_links
boolean = falseIf true, include up to 50 links found on the page
max_chars
integer = 8000Maximum characters of text to return (truncated with …)

Response Fields — inside data

FieldTypeDescription
urlstringFinal URL after any redirects
titlestringPage title (from <title> tag)
descriptionstringMeta description or Open Graph description
textstringClean readable text extracted from the page body (scripts, styles, nav, footer removed)
word_countintegerApproximate number of words in the extracted text
linksarrayLinks found on the page (only when include_links=true)
fetched_atstringISO 8601 timestamp of when the page was fetched
http_statusintegerHTTP status code of the page response

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/webpage-reader \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "url": "https://example.com",
  "include_links": false
}'

Example Response

json
{
  "success": true,
  "data": {
    "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

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.

$0.001/callp99 ~300ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/dns-lookup

Input Parameters

ParameterTypeDescription
domainREQ
stringDomain name to look up (e.g. 'example.com', 'mail.google.com')
types
array = ["A"]DNS record types to resolve. Default: ["A"]. Supported: A, AAAA, MX, TXT, CNAME, NS

Response Fields — inside data

FieldTypeDescription
domainstringThe queried domain name
recordsobjectMap of DNS record type → array of records
resolved_atstringISO 8601 timestamp of the lookup

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/dns-lookup \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "domain": "example.com",
  "types": [
    "A",
    "MX"
  ]
}'

Example Response

json
{
  "success": true,
  "data": {
    "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 Generator

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.

$0.001/callp99 ~100ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/qr-code

Input Parameters

ParameterTypeDescription
textREQ
stringThe text or URL to encode in the QR code
size
integer = 256Output image size in pixels (width and height). Min: 64, Max: 1024.
error_correction
L | M | Q | H = "M"Error correction level: L=7%, M=15%, Q=25%, H=30% data recovery. Higher = bigger QR code.

Response Fields — inside data

FieldTypeDescription
image_base64stringBase64-encoded PNG image of the QR code (decode to get raw bytes)
widthintegerImage width in pixels
heightintegerImage height in pixels
textstringThe text that was encoded
generated_atstringISO 8601 timestamp of generation

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/qr-code \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "text": "https://agentsvc.io",
  "size": 256
}'

Example Response

json
{
  "success": true,
  "data": {
    "image_base64": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAA...",
    "width": 256,
    "height": 256,
    "text": "https://agentsvc.io",
    "generated_at": "2026-04-07T12:00:00.000Z"
  }
}

Text Translation

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.

$0.002/callp99 ~500ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/translate

Input Parameters

ParameterTypeDescription
textREQ
stringText to translate (max 500 characters per call)
target_langREQ
stringTarget 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
string = "auto"Source language code. Default: 'auto' (auto-detect). Use ISO 639-1 codes.

Response Fields — inside data

FieldTypeDescription
original_textstringThe original input text
translated_textstringThe translated text in the target language
source_langstringDetected or specified source language code
target_langstringTarget language code as specified
confidencenumberTranslation confidence score (0.0-1.0)
servicestringTranslation service used. Always: 'MyMemory'

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/translate \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "text": "Hello, how are you?",
  "target_lang": "de"
}'

Example Response

json
{
  "success": true,
  "data": {
    "original_text": "Hello, how are you?",
    "translated_text": "Hallo, wie geht es Ihnen?",
    "source_lang": "en",
    "target_lang": "de",
    "confidence": 1,
    "service": "MyMemory"
  }
}

Email Validation

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.

$0.001/callp99 ~400ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/email-validate

Input Parameters

ParameterTypeDescription
emailREQ
stringThe email address to validate (e.g. 'user@example.com')

Response Fields — inside data

FieldTypeDescription
emailstringThe validated email address (normalized to lowercase)
is_validbooleantrue if the email passes all checks (format + deliverable domain)
local_partstringThe part before the @ symbol
domainstringThe domain part of the email address
checksobjectIndividual check results
mx_recordsarrayMX record hostnames found for the domain

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/email-validate \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "email": "user@example.com"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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 Certificate Check

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.

$0.001/callp99 ~800ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/ssl-check

Input Parameters

ParameterTypeDescription
domainREQ
stringDomain to check SSL for (e.g. 'github.com', 'api.example.com'). Do not include https://
port
integer = 443Port to check (default: 443)

Response Fields — inside data

FieldTypeDescription
domainstringThe checked domain
portintegerThe port that was checked
validbooleantrue if certificate is currently valid and not expired
subjectstringCertificate subject (CN=...)
subject_alt_namesarraySubject Alternative Names the cert is valid for
issuerstringCertificate issuer organization
valid_fromstringCertificate valid-from date (ISO 8601)
valid_tostringCertificate expiry date (ISO 8601)
days_remainingintegerNumber of days until certificate expires (negative = already expired)
serial_numberstringCertificate serial number (hex)
fingerprint_sha256stringSHA-256 fingerprint of the certificate
protocolstringTLS protocol version in use (e.g. TLSv1.3)

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/ssl-check \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "domain": "github.com"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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 Lookup

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.

$0.002/callp99 ~700ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/whois

Input Parameters

ParameterTypeDescription
domainREQ
stringDomain to look up (e.g. 'github.com', 'openai.com'). Include TLD, exclude https://

Response Fields — inside data

FieldTypeDescription
domainstringThe queried domain name
registrarstringDomain registrar name
registrar_urlstringRegistrar website URL
statusarrayDomain status codes (e.g. clientTransferProhibited)
created_atstringDomain registration date (ISO 8601)
updated_atstringLast updated date (ISO 8601)
expires_atstringDomain expiry date (ISO 8601)
days_until_expiryintegerDays remaining until domain expires (negative = already expired)
name_serversarrayNameservers for the domain
dnssecstringDNSSEC status (e.g. 'signedDelegation', 'unsigned')
registrant_countrystringRegistrant country code (if publicly available)

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/whois \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "domain": "anthropic.com"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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 Price Lookup

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']).

$0.002/callp99 ~500ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/crypto-prices

Input Parameters

ParameterTypeDescription
coinsREQ
arrayList 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.
currencies
array = ["usd"]Target fiat currencies. Default: ['usd']. Supported: usd, eur, gbp, jpy, chf, aud, cad, btc, eth.

Response Fields — inside data

FieldTypeDescription
pricesobjectMap of coin_id → price data. Each entry contains price(s) in requested currencies, 24h change, and market cap.
fetched_atstringISO 8601 timestamp of the data
sourcestringAlways: 'CoinGecko'
not_foundarrayCoin IDs or tickers that could not be resolved

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/crypto-prices \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "symbols": [
    "BTC",
    "ETH",
    "SOL"
  ]
}'

Example Response

json
{
  "success": true,
  "data": {
    "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 Text Extraction

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.

$0.004/callp99 ~1.5s

Endpoint

POST https://agentsvc.io/api/v1/proxy/pdf-extract

Input Parameters

ParameterTypeDescription
pdf_base64REQ
stringBase64-encoded PDF file content. Decode a PDF file to base64 and pass it here. Max ~10 MB (unencoded).
max_pages
integer = 50Maximum number of pages to extract. Default: 50. Use to limit processing time for large PDFs.

Response Fields — inside data

FieldTypeDescription
textstringFull extracted text from all pages, joined with newlines. Preserves paragraph structure where possible.
page_countintegerTotal number of pages in the PDF
pagesarrayPer-page text content (first max_pages pages)
metadataobjectPDF document metadata (if available)
file_size_bytesintegerSize of the decoded PDF in bytes
extracted_atstringISO 8601 timestamp of extraction

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/pdf-extract \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "pdf_base64": "<base64-encoded-pdf>"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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 Number Validation

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.

$0.001/callp99 ~50ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/phone-validate

Input Parameters

ParameterTypeDescription
phoneREQ
stringPhone 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
stringISO 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 (+...).

Response Fields — inside data

FieldTypeDescription
phonestringThe input phone number as provided
is_validbooleantrue if the number is a valid, dialable phone number
e164stringE.164 formatted number (e.g. '+4915123456789'). International standard format.
national_formatstringNationally formatted number (e.g. '0151 23456789' for Germany)
international_formatstringInternationally formatted number (e.g. '+49 151 23456789')
country_codestringISO 3166-1 alpha-2 country code (e.g. 'DE', 'US', 'GB')
country_calling_codestringInternational dialing code (e.g. '49' for Germany, '1' for US)
line_typestringType of phone line: 'MOBILE', 'FIXED_LINE', 'FIXED_LINE_OR_MOBILE', 'TOLL_FREE', 'PREMIUM_RATE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL', or 'UNKNOWN'
checksobject

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/phone-validate \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "phone": "+49 30 12345678"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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 Price Lookup

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).

$0.002/callp99 ~800ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/stock-prices

Input Parameters

ParameterTypeDescription
symbolsREQ
arrayList 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).

Response Fields — inside data

FieldTypeDescription
stocksobjectMap of ticker symbol → stock data
not_foundarraySymbols that could not be resolved
fetched_atstringISO 8601 timestamp
sourcestringAlways: 'Yahoo Finance'

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/stock-prices \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "symbols": [
    "AAPL",
    "TSLA",
    "MSFT"
  ]
}'

Example Response

json
{
  "success": true,
  "data": {
    "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"
  }
}

Geocoding

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.

$0.002/callp99 ~600ms

Endpoint

POST https://agentsvc.io/api/v1/proxy/geocode

Input Parameters

ParameterTypeDescription
addressREQ
stringAddress string to geocode (e.g. 'Eiffel Tower, Paris', '1600 Pennsylvania Ave NW, Washington DC', 'Marienplatz 1, Munich')
limit
integer = 1Max number of results to return (default: 1, max: 5)

Response Fields — inside data

FieldTypeDescription
modestring'forward' if address was geocoded, 'reverse' if coordinates were looked up
resultsarray
sourcestringAlways: 'OpenStreetMap Nominatim'

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/geocode \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "address": "Brandenburg Gate, Berlin"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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"
  }
}

OCR — Image to Text

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.

$0.008/callp99 ~4.0s

Endpoint

POST https://agentsvc.io/api/v1/proxy/ocr

Input Parameters

ParameterTypeDescription
image_base64REQ
stringBase64-encoded image. Supported formats: PNG, JPEG, WebP, TIFF, BMP. Max 10 MB decoded. For best results use high-contrast images with clear text.
language
string = "eng"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
integer = 3Page 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.

Response Fields — inside data

FieldTypeDescription
textstringFull extracted text from the image, with line breaks preserved
confidencenumberOverall OCR confidence score (0-100). Above 70 is considered reliable.
languagestringLanguage code used for recognition
word_countintegerNumber of words extracted
char_countintegerNumber of characters extracted (excluding whitespace)
processing_msintegerTime taken for OCR processing in milliseconds
processed_atstringISO 8601 timestamp

Example Request

bash
curl -X POST https://agentsvc.io/api/v1/proxy/ocr \
  -H "Content-Type: application/json" \
  -H "X-Payment: x402 usdc base <signed-payment>" \
  -d '{
  "image_base64": "<base64-encoded-image>",
  "language": "eng"
}'

Example Response

json
{
  "success": true,
  "data": {
    "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"
  }
}

Submit a Service

Want to offer your service to AI agents? Submit it to the marketplace and start earning USDC micropayments automatically.

Requirements for listed services:

  • Expose a JSON-based POST endpoint
  • Return structured, deterministic output
  • Support the x402 payment header for USDC on Base
  • Provide a JSON Schema for input and output
  • Maintain 99.5% uptime SLA
  • P99 latency under 10 seconds
Submit via Email →