API Reference
Complete API reference for AgentUtil. All tools use the same async pattern.
Quick Start
Base URL
https://api.agentutil.devThe Pattern
Every tool uses the same async pattern:
Payment
x402 Micropayments
Just send a request. You'll get a 402 response with payment details. Pay with USDC on Base, then retry with the payment proof.
Tools Reference
Email Verify
email.verifyVerify email deliverability and quality
POST /v1/tools/email.verify/tasks{
"email": "test@gmail.com"
}{
"email": "test@gmail.com",
"deliverable": true,
"status": "DELIVERABLE",
"status_detail": null,
"quality_score": 0.95,
"is_format_valid": true,
"is_smtp_valid": true,
"is_mx_valid": true,
"mx_records": [
"gmail-smtp-in.l.google.com"
],
"is_disposable": false,
"is_free_email": true,
"is_role_based": false,
"is_catchall": false
}{
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Email address to verify"
}
}
}{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "The email address that was verified"
},
"deliverable": {
"type": "boolean",
"description": "Whether the email is deliverable"
},
"status": {
"type": "string",
"nullable": true,
"description": "Deliverability status (DELIVERABLE, UNDELIVERABLE, RISKY, UNKNOWN)"
},
"status_detail": {
"type": "string",
"nullable": true,
"description": "Additional detail about the status"
},
"quality_score": {
"type": "number",
"description": "Quality score from 0 to 1"
},
"is_format_valid": {
"type": "boolean",
"description": "Whether the email format is valid"
},
"is_smtp_valid": {
"type": "boolean",
"description": "Whether SMTP validation passed"
},
"is_mx_valid": {
"type": "boolean",
"description": "Whether MX records exist for the domain"
},
"mx_records": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of MX records found"
},
"is_disposable": {
"type": "boolean",
"description": "Whether from a disposable email provider"
},
"is_free_email": {
"type": "boolean",
"description": "Whether from a free provider (Gmail, Yahoo, etc.)"
},
"is_role_based": {
"type": "boolean",
"description": "Whether role-based (info@, support@, etc.)"
},
"is_catchall": {
"type": "boolean",
"description": "Whether the domain is a catch-all"
}
}
}DNS Lookup
dns.lookupLook up DNS records for a domain
POST /v1/tools/dns.lookup/tasks{
"domain": "google.com"
}{
"domain": "google.com",
"records": {
"A": [
"142.250.80.46"
],
"AAAA": [
"2607:f8b0:4004:800::200e"
],
"MX": [
{
"priority": 10,
"exchange": "smtp.google.com"
}
],
"NS": [
"ns1.google.com",
"ns2.google.com"
],
"TXT": [
"v=spf1 include:_spf.google.com ~all"
]
},
"queried_at": "2026-03-07T08:00:00.000Z"
}{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name to look up"
},
"record_type": {
"type": "string",
"enum": [
"A",
"AAAA",
"MX",
"TXT",
"NS",
"CNAME",
"SOA",
"SRV",
"CAA",
"ALL"
],
"default": "ALL",
"description": "DNS record type to query. Defaults to ALL"
}
}
}{
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"records": {
"type": "object",
"description": "Map of record type to results. Only queried types are present.",
"properties": {
"A": {
"type": "array",
"items": {
"type": "string"
},
"description": "IPv4 addresses"
},
"AAAA": {
"type": "array",
"items": {
"type": "string"
},
"description": "IPv6 addresses"
},
"MX": {
"type": "array",
"items": {
"type": "object",
"properties": {
"priority": {
"type": "integer"
},
"exchange": {
"type": "string"
}
}
}
},
"TXT": {
"type": "array",
"items": {
"type": "string"
}
},
"NS": {
"type": "array",
"items": {
"type": "string"
}
},
"CNAME": {
"type": "array",
"items": {
"type": "string"
}
},
"SOA": {
"type": "object",
"nullable": true,
"properties": {
"nsname": {
"type": "string"
},
"hostmaster": {
"type": "string"
},
"serial": {
"type": "integer"
},
"refresh": {
"type": "integer"
},
"retry": {
"type": "integer"
},
"expire": {
"type": "integer"
},
"minttl": {
"type": "integer"
}
}
},
"SRV": {
"type": "array",
"items": {
"type": "object",
"properties": {
"priority": {
"type": "integer"
},
"weight": {
"type": "integer"
},
"port": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
},
"CAA": {
"type": "array",
"items": {
"type": "object"
}
}
}
},
"queried_at": {
"type": "string",
"format": "date-time"
}
}
}IP Geolocate
ip.geolocateGet geographic location and network info for an IP address
POST /v1/tools/ip.geolocate/tasks{
"ip": "8.8.8.8"
}{
"ip": "8.8.8.8",
"city": "Mountain View",
"region": "California",
"region_code": "CA",
"country": "United States",
"country_code": "US",
"zip": "94043",
"lat": 37.4056,
"lng": -122.0775,
"timezone": "America/Los_Angeles",
"isp": "Google LLC",
"organization": "Google LLC",
"as": "AS15169 Google LLC",
"is_mobile": false,
"is_proxy": false,
"is_hosting": true
}{
"type": "object",
"required": [
"ip"
],
"properties": {
"ip": {
"type": "string",
"description": "IPv4 or IPv6 address"
}
}
}{
"type": "object",
"properties": {
"ip": {
"type": "string"
},
"city": {
"type": "string",
"nullable": true
},
"region": {
"type": "string",
"nullable": true,
"description": "Region/state full name"
},
"region_code": {
"type": "string",
"nullable": true,
"description": "Region/state code"
},
"country": {
"type": "string",
"nullable": true,
"description": "Country full name"
},
"country_code": {
"type": "string",
"nullable": true,
"description": "Two-letter ISO country code"
},
"zip": {
"type": "string",
"nullable": true
},
"lat": {
"type": "number",
"nullable": true
},
"lng": {
"type": "number",
"nullable": true
},
"timezone": {
"type": "string",
"nullable": true,
"description": "IANA timezone (e.g. America/Los_Angeles)"
},
"isp": {
"type": "string",
"nullable": true
},
"organization": {
"type": "string",
"nullable": true
},
"as": {
"type": "string",
"nullable": true,
"description": "Autonomous system number and name"
},
"is_mobile": {
"type": "boolean"
},
"is_proxy": {
"type": "boolean"
},
"is_hosting": {
"type": "boolean",
"description": "Whether the IP belongs to a hosting/datacenter provider"
}
}
}Geocode Address
geo.locateConvert an address to geographic coordinates
POST /v1/tools/geo.locate/tasks{
"address": "1600 Amphitheatre Parkway, Mountain View, CA"
}{
"lat": 37.4224,
"lng": -122.0856,
"confidence": 0.95,
"formatted_address": "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
"components": {
"house_number": "1600",
"street": "Amphitheatre Parkway",
"city": "Mountain View",
"state": "California",
"country": "United States",
"postal_code": "94043"
}
}{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "Address to geocode",
"minLength": 3
}
}
}{
"type": "object",
"properties": {
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"confidence": {
"type": "number",
"description": "Confidence score from 0 to 1"
},
"formatted_address": {
"type": "string",
"description": "Full formatted address string"
},
"components": {
"type": "object",
"properties": {
"house_number": {
"type": "string",
"nullable": true
},
"street": {
"type": "string",
"nullable": true
},
"city": {
"type": "string",
"nullable": true
},
"state": {
"type": "string",
"nullable": true
},
"country": {
"type": "string",
"nullable": true
},
"postal_code": {
"type": "string",
"nullable": true
}
}
}
}
}URL Status
url.statusCheck if a URL is reachable and get response details
POST /v1/tools/url.status/tasks{
"url": "https://example.com"
}{
"url": "https://example.com",
"final_url": "https://example.com/",
"status_code": 200,
"status_text": "OK",
"reachable": true,
"headers": {
"content-type": "text/html; charset=UTF-8",
"server": "ECS"
},
"ssl": {
"valid": true
},
"response_time_ms": 156,
"checked_at": "2026-03-07T08:00:00.000Z"
}{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL to check (http or https)"
},
"follow_redirects": {
"type": "boolean",
"default": true,
"description": "Whether to follow redirects"
},
"timeout_ms": {
"type": "integer",
"default": 10000,
"maximum": 30000,
"description": "Request timeout in milliseconds (max 30000)"
}
}
}{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Original URL requested"
},
"final_url": {
"type": "string",
"description": "Final URL after any redirects"
},
"status_code": {
"type": "integer",
"description": "HTTP status code (0 if unreachable/timeout)"
},
"status_text": {
"type": "string",
"description": "HTTP status text or error message on failure"
},
"reachable": {
"type": "boolean",
"description": "Whether the URL returned a successful (2xx) response"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Response headers as key-value pairs"
},
"ssl": {
"type": "object",
"nullable": true,
"description": "SSL info for https:// URLs (null for http://)",
"properties": {
"valid": {
"type": "boolean"
}
}
},
"response_time_ms": {
"type": "integer",
"description": "Time taken in milliseconds"
},
"checked_at": {
"type": "string",
"format": "date-time"
}
}
}Home Services Search
homeservices.searchFind local home service professionals
POST /v1/tools/homeservices.search/tasks{
"service": "plumber",
"zip": "94110",
"number_of_results": 3
}{
"pros": [
{
"id": "pro_abc123",
"name": "Bay Area Plumbing",
"phone": "415-555-0123",
"rating": 4.8,
"review_count": 127,
"address": "123 Main St, San Francisco, CA",
"website": "https://bayareaplumbing.com",
"description": "Licensed plumber with 15 years experience."
}
]
}{
"type": "object",
"required": [
"service",
"zip"
],
"properties": {
"service": {
"type": "string",
"description": "Service type (e.g. plumber, electrician, hvac, roofer, landscaper)"
},
"zip": {
"type": "string",
"pattern": "^\\d{5}$",
"description": "5-digit US zip code"
},
"number_of_results": {
"type": "integer",
"default": 25,
"minimum": 1,
"maximum": 100,
"description": "Number of professionals to return"
}
}
}{
"type": "object",
"properties": {
"pros": {
"type": "array",
"description": "List of matching professionals. Use id in homeservices.request to contact them.",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Professional ID — pass to homeservices.request"
},
"name": {
"type": "string"
},
"phone": {
"type": "string",
"nullable": true
},
"rating": {
"type": "number",
"nullable": true
},
"review_count": {
"type": "integer",
"nullable": true
},
"address": {
"type": "string",
"nullable": true
},
"website": {
"type": "string",
"nullable": true
},
"description": {
"type": "string",
"nullable": true
}
}
}
}
}
}Home Services Request
homeservices.requestSubmit a service request to a specific professional (from homeservices.search results)
POST /v1/tools/homeservices.request/tasks{
"pro_id": "pro_abc123",
"requester": {
"name": "John Doe",
"phone": "415-555-0100"
},
"notes": "Leaky faucet in kitchen, needs repair ASAP"
}{
"request_id": "req_xk8f2a9c0012",
"pro_id": "pro_abc123",
"pro_name": "Bay Area Plumbing",
"status": "sent",
"message": "Request sent to Bay Area Plumbing."
}{
"type": "object",
"required": [
"pro_id",
"requester",
"notes"
],
"properties": {
"pro_id": {
"type": "string",
"description": "Professional ID from homeservices.search results (e.g. pro_abc123)"
},
"requester": {
"type": "object",
"required": [
"name",
"phone"
],
"properties": {
"name": {
"type": "string",
"description": "Customer name"
},
"phone": {
"type": "string",
"description": "Customer phone number"
},
"email": {
"type": "string",
"format": "email",
"description": "Customer email (optional)"
}
}
},
"notes": {
"type": "string",
"description": "Job description — details of what work is needed"
}
}
}{
"type": "object",
"properties": {
"request_id": {
"type": "string",
"description": "Unique ID for this service request"
},
"pro_id": {
"type": "string",
"description": "ID of the professional notified"
},
"pro_name": {
"type": "string",
"description": "Name of the professional notified"
},
"status": {
"type": "string",
"description": "Always 'sent' on success"
},
"message": {
"type": "string",
"description": "Human-readable confirmation message"
}
}
}Browser Screenshot
browser.screenshotCapture a screenshot of a webpage or HTML content
POST /v1/tools/browser.screenshot/tasks{
"url": "https://example.com",
"width": 1280,
"full_page": true
}{
"file_id": "file_abc123def4567890",
"file_url": "https://1234567890abcdef.r2.cloudflarestorage.com/agentutil/browser/123/screenshot-file_abc123def4567890.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=86400&X-Amz-Signature=...",
"content_type": "image/png",
"file_url_notes": "Signed URL will expire in 24 hours. If you need it for longer then download it and store it somewhere",
"expires_at": "2026-03-12T08:00:00.000Z",
"expires_in_days": 1,
"width": 1280,
"height": 2400,
"bytes": 145832
}{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL to capture"
},
"html": {
"type": "string",
"description": "HTML content to render"
},
"width": {
"type": "integer",
"default": 1280,
"description": "Viewport width"
},
"height": {
"type": "integer",
"default": 800,
"description": "Viewport height"
},
"full_page": {
"type": "boolean",
"default": false,
"description": "Capture full scrollable page"
},
"format": {
"type": "string",
"enum": [
"png",
"jpeg",
"webp"
],
"default": "png"
},
"quality": {
"type": "integer",
"default": 80,
"description": "Quality for jpeg/webp (1-100)"
},
"transparent": {
"type": "boolean",
"default": false,
"description": "Transparent background (png only)"
},
"wait": {
"type": "string",
"enum": [
"load",
"dom",
"idle"
],
"default": "load",
"description": "When to capture"
}
}
}{
"type": "object",
"properties": {
"file_id": {
"type": "string",
"description": "Stored artifact ID"
},
"file_url": {
"type": "string",
"description": "24-hour signed URL for the rendered image"
},
"content_type": {
"type": "string",
"description": "Artifact MIME type"
},
"file_url_notes": {
"type": "string",
"description": "Notes about the signed URL lifetime"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Signed URL expiry timestamp"
},
"expires_in_days": {
"type": "integer",
"description": "Signed URL expiry in days"
},
"width": {
"type": "integer"
},
"height": {
"type": "integer"
},
"bytes": {
"type": "integer"
}
}
}Browser PDF
browser.pdfRender a webpage or HTML content to PDF
POST /v1/tools/browser.pdf/tasks{
"url": "https://example.com",
"size": "a4"
}{
"file_id": "file_abc123def4567890",
"file_url": "https://1234567890abcdef.r2.cloudflarestorage.com/agentutil/browser/123/pdf-file_abc123def4567890.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=86400&X-Amz-Signature=...",
"content_type": "application/pdf",
"file_url_notes": "Signed URL will expire in 24 hours. If you need it for longer then download it and store it somewhere",
"expires_at": "2026-03-12T08:00:00.000Z",
"expires_in_days": 1,
"pages": 3,
"bytes": 234567
}{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL to render"
},
"html": {
"type": "string",
"description": "HTML content to render"
},
"size": {
"type": "string",
"enum": [
"letter",
"a4",
"legal",
"a3",
"a5"
],
"default": "letter"
},
"landscape": {
"type": "boolean",
"default": false
},
"margins": {
"type": "string",
"default": "0.5in",
"description": "Page margins (CSS format)"
},
"background": {
"type": "boolean",
"default": true,
"description": "Include backgrounds"
},
"wait": {
"type": "string",
"enum": [
"load",
"dom",
"idle"
],
"default": "load"
}
}
}{
"type": "object",
"properties": {
"file_id": {
"type": "string",
"description": "Stored artifact ID"
},
"file_url": {
"type": "string",
"description": "24-hour signed URL for the rendered PDF"
},
"content_type": {
"type": "string",
"description": "Artifact MIME type"
},
"file_url_notes": {
"type": "string",
"description": "Notes about the signed URL lifetime"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Signed URL expiry timestamp"
},
"expires_in_days": {
"type": "integer",
"description": "Signed URL expiry in days"
},
"pages": {
"type": "integer"
},
"bytes": {
"type": "integer"
}
}
}Browser Content
browser.contentGet fully rendered HTML content (JavaScript executed)
POST /v1/tools/browser.content/tasks{
"url": "https://example.com",
"wait": "idle"
}{
"html": "<!DOCTYPE html>...",
"title": "Example Domain",
"bytes": 12345
}{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "URL to render"
},
"wait": {
"type": "string",
"enum": [
"load",
"dom",
"idle"
],
"default": "load"
}
}
}{
"type": "object",
"properties": {
"html": {
"type": "string"
},
"title": {
"type": "string"
},
"bytes": {
"type": "integer"
}
}
}Browser Markdown
browser.markdownExtract readable content from a webpage as Markdown
POST /v1/tools/browser.markdown/tasks{
"url": "https://example.com"
}{
"markdown": "# Example Domain\n\nThis domain is...",
"title": "Example Domain",
"bytes": 456
}{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "URL to extract from"
},
"wait": {
"type": "string",
"enum": [
"load",
"dom",
"idle"
],
"default": "load"
}
}
}{
"type": "object",
"properties": {
"markdown": {
"type": "string"
},
"title": {
"type": "string"
},
"bytes": {
"type": "integer"
}
}
}Browser Scrape
browser.scrapeExtract specific elements using named CSS selectors
POST /v1/tools/browser.scrape/tasks{
"url": "https://example.com",
"select": {
"title": "h1",
"links": "a"
}
}{
"title": "Example Domain",
"links": [
"More information..."
]
}{
"type": "object",
"required": [
"url",
"select"
],
"properties": {
"url": {
"type": "string",
"description": "URL to scrape"
},
"select": {
"type": "object",
"description": "Named selectors: {\"title\": \"h1\", \"prices\": \".price\"}"
},
"wait": {
"type": "string",
"enum": [
"load",
"dom",
"idle"
],
"default": "load"
}
}
}{
"type": "object",
"description": "Named results matching your selectors"
}Browser Links
browser.linksExtract all links from a webpage
POST /v1/tools/browser.links/tasks{
"url": "https://example.com",
"filter": "external"
}{
"count": 1,
"links": [
{
"url": "https://iana.org/domains/example",
"text": "More information..."
}
]
}{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "URL to extract links from"
},
"filter": {
"type": "string",
"enum": [
"all",
"internal",
"external"
],
"default": "all"
},
"wait": {
"type": "string",
"enum": [
"load",
"dom",
"idle"
],
"default": "load"
}
}
}{
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"links": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"text": {
"type": "string"
}
}
}
}
}
}Task Lifecycle
{
"task_id": "task_abc123",
"status": "complete",
"tool": "email.verify",
"result": { ... },
"error": "..."
}Error Handling
| Status | Meaning | Action |
|---|---|---|
| 400 | Invalid input | Fix request per error message |
| 402 | Payment required | Pay via x402 or use API key |
| 404 | Not found | Check tool name or task ID |
| 500 | Server error | Retry or contact support |
Discovery
/.well-known/agent-service.jsonService metadata/.well-known/agent.jsonA2A Agent Card/openapi.jsonOpenAPI 3.1 spec/v1/toolsList all tools/v1/tools/{tool}Tool detailsQuestions? Email silas@agentutil.dev