{
  "query": "",
  "filters": {
    "category": null,
    "network": null,
    "max_price_usdc": null,
    "verified_only": false
  },
  "total": 10,
  "count": 10,
  "results": [
    {
      "id": "geocoding-api",
      "slug": "geocoding-api",
      "name": "Geocoding & Reverse Geocoding API",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Weather & Geospatial",
      "tagline": "Address to coordinates, coordinates to address.",
      "description": "Forward and reverse geocoding with normalized address components, confidence and a stable place ID.",
      "agent_summary": "Convert a free-text address or place into coordinates and a normalised address, or reverse geocode coordinates.",
      "scope": "Does not validate postal deliverability or rooftop accuracy. Uses OpenStreetMap data and is not a legal boundary source.",
      "intent_phrases": [
        "geocode an address",
        "turn coordinates into an address",
        "find latitude and longitude for a place",
        "normalise an address for an agent"
      ],
      "faqs": [],
      "code_examples": [],
      "price": {
        "min_usdc": 0.001,
        "max_usdc": 0.001,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.001,
        "price_max_usdc": 0.001,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 2,
        "total_routes": 2,
        "last_verified_at": "2026-11-13T13:52:22.884Z",
        "receipt_url": "https://basescan.org/tx/0x895d6612a320ee74cb276d1ecd31da3768f208d4d4919c4d21ea67b07e3b9cf0"
      },
      "verified_routes": 2,
      "total_routes": 2,
      "reliability": {
        "score": 87,
        "band": "caution",
        "uptime30d": 86.87,
        "lastCheckedAt": "2026-11-14T03:35:09.911Z"
      },
      "last_verified_at": "2026-11-13T13:52:22.884Z",
      "receipt_url": "https://basescan.org/tx/0x895d6612a320ee74cb276d1ecd31da3768f208d4d4919c4d21ea67b07e3b9cf0",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "geocoding",
        "maps",
        "address",
        "places",
        "coordinates",
        "osm"
      ],
      "use_cases": [
        "Convert an address to coordinates for a map",
        "Normalize a user-provided location",
        "Resolve coordinates from a photo or device"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/geocoding-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/geocoding-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=geocoding-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=geocoding-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "ip-geolocation-api",
      "slug": "ip-geolocation-api",
      "name": "IP Geolocation API",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Address & Location",
      "tagline": "Turn an IP into a place and network.",
      "description": "IP geolocation with country, region, city, coordinates, timezone and ASN. Works for public IPv4 and IPv6 addresses.",
      "agent_summary": "Turn a public IP address into approximate country, region, city, timezone, ASN and organisation data.",
      "scope": "Approximate location only. Not for identity, precise location, private IPs or fraud decisions without another signal.",
      "intent_phrases": [
        "look up an IP address",
        "find the country and city for an IP",
        "get the ASN for an IP",
        "enrich a request with IP location"
      ],
      "faqs": [],
      "code_examples": [],
      "price": {
        "min_usdc": 0.001,
        "max_usdc": 0.001,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.001,
        "price_max_usdc": 0.001,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 2,
        "total_routes": 2,
        "last_verified_at": "2026-11-13T13:52:21.457Z",
        "receipt_url": "https://basescan.org/tx/0x638e71f65c2bcc4874eb8b4eb9fde19d59d9df33c94b12c95ead4913e1522d44"
      },
      "verified_routes": 2,
      "total_routes": 2,
      "reliability": {
        "score": 86,
        "band": "caution",
        "uptime30d": 86.36,
        "lastCheckedAt": "2026-11-14T03:35:09.910Z"
      },
      "last_verified_at": "2026-11-13T13:52:21.457Z",
      "receipt_url": "https://basescan.org/tx/0x638e71f65c2bcc4874eb8b4eb9fde19d59d9df33c94b12c95ead4913e1522d44",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "ip",
        "geolocation",
        "asn",
        "fraud",
        "localization",
        "network"
      ],
      "use_cases": [
        "Localize a request by the caller's IP",
        "Add an IP risk signal to a fraud workflow",
        "Resolve an IP to a city and timezone"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/ip-geolocation-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/ip-geolocation-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=ip-geolocation-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=ip-geolocation-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "sanctions-screening-api",
      "slug": "sanctions-screening-api",
      "name": "Sanctions & PEP Screening API",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Compliance",
      "tagline": "A deterministic first pass against sanctions lists.",
      "description": "Screen a name against a local sanctions and PEP sample. Returns candidate matches with scores, lists and reasons.",
      "agent_summary": "Screen a name against a small sanctions and PEP sample and return candidate matches with a score and reason.",
      "scope": "Preview sample only. Not an official sanctions list, legal advice or a replacement for a compliance officer.",
      "intent_phrases": [
        "screen a name for sanctions",
        "check a person against a PEP sample",
        "run a first-pass compliance check",
        "flag a name for manual review"
      ],
      "faqs": [],
      "code_examples": [],
      "price": {
        "min_usdc": 0.01,
        "max_usdc": 0.01,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.01,
        "price_max_usdc": 0.01,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 1,
        "total_routes": 1,
        "last_verified_at": "2026-11-13T13:52:06.771Z",
        "receipt_url": "https://basescan.org/tx/0xcb840bab58dd774d117a9fa10bd337c58ad0be427cd9523f1b35a4b65fdf31cf"
      },
      "verified_routes": 1,
      "total_routes": 1,
      "reliability": {
        "score": 85,
        "band": "caution",
        "uptime30d": 84.85,
        "lastCheckedAt": "2026-11-14T03:35:09.905Z"
      },
      "last_verified_at": "2026-11-13T13:52:06.771Z",
      "receipt_url": "https://basescan.org/tx/0xcb840bab58dd774d117a9fa10bd337c58ad0be427cd9523f1b35a4b65fdf31cf",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "sanctions",
        "ofac",
        "pep",
        "aml",
        "kyc",
        "compliance"
      ],
      "use_cases": [
        "Screen a counterparty before onboarding",
        "Add an AML first pass to an agent workflow",
        "Check a payment beneficiary against sanctions lists"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/sanctions-screening-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/sanctions-screening-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=sanctions-screening-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=sanctions-screening-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "us-zip-code-api",
      "slug": "us-zip-code-api",
      "name": "US ZIP Code API",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Address & Location",
      "tagline": "Validate and enrich any US ZIP code.",
      "description": "US ZIP code lookup with city, state, coordinates and distance between ZIP centroids. Stable JSON for address, delivery and property workflows.",
      "agent_summary": "Resolve a US ZIP code to a city, state and coordinates, or measure the distance between two ZIP centroids.",
      "scope": "US ZIP codes only. Does not validate street addresses, ZIP+4 delivery points or international postal codes.",
      "intent_phrases": [
        "look up a US ZIP code",
        "get city and state for a ZIP",
        "calculate distance between ZIP codes",
        "validate a US ZIP before delivery"
      ],
      "faqs": [],
      "code_examples": [],
      "price": {
        "min_usdc": 0.001,
        "max_usdc": 0.002,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.001,
        "price_max_usdc": 0.002,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 2,
        "total_routes": 2,
        "last_verified_at": "2026-11-13T13:52:19.855Z",
        "receipt_url": "https://basescan.org/tx/0x73b29cce8aa1258c1fbb2e89281e070df0456f00245e5f17cb9c2be161b3c69e"
      },
      "verified_routes": 2,
      "total_routes": 2,
      "reliability": {
        "score": 87,
        "band": "caution",
        "uptime30d": 86.87,
        "lastCheckedAt": "2026-11-14T03:35:09.908Z"
      },
      "last_verified_at": "2026-11-13T13:52:19.855Z",
      "receipt_url": "https://basescan.org/tx/0x73b29cce8aa1258c1fbb2e89281e070df0456f00245e5f17cb9c2be161b3c69e",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "us",
        "zip",
        "postal-code",
        "address",
        "geocoding",
        "delivery"
      ],
      "use_cases": [
        "Validate a US ZIP before a delivery or address lookup",
        "Enrich a lead record with city, state and coordinates",
        "Calculate distance between two ZIP centroids"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/us-zip-code-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/us-zip-code-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=us-zip-code-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=us-zip-code-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "coordinates-distance-api",
      "slug": "coordinates-distance-api",
      "name": "Coordinates & Distance API",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Weather & Geospatial",
      "tagline": "Distance, midpoint and bearing between coordinates.",
      "description": "Great-circle distance, midpoint and initial bearing for any two WGS84 coordinates. Deterministic JSON, no external dependency.",
      "agent_summary": "Calculate great-circle distance, midpoint and bearing between two coordinate pairs.",
      "scope": "Straight-line geometry only. Does not route, account for roads, traffic, elevation or travel time.",
      "intent_phrases": [
        "calculate distance between coordinates",
        "find the midpoint between two points",
        "get bearing between two locations",
        "measure a straight-line distance"
      ],
      "faqs": [],
      "code_examples": [],
      "price": {
        "min_usdc": 0.001,
        "max_usdc": 0.001,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.001,
        "price_max_usdc": 0.001,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 1,
        "total_routes": 1,
        "last_verified_at": "2026-11-13T13:52:15.489Z",
        "receipt_url": "https://basescan.org/tx/0x890aa1ed1cc3531c8e2d69a6f1d74acc3473a2db6dadc1665027c78037ea7164"
      },
      "verified_routes": 1,
      "total_routes": 1,
      "reliability": {
        "score": 87,
        "band": "caution",
        "uptime30d": 86.87,
        "lastCheckedAt": "2026-11-14T03:35:09.912Z"
      },
      "last_verified_at": "2026-11-13T13:52:15.489Z",
      "receipt_url": "https://basescan.org/tx/0x890aa1ed1cc3531c8e2d69a6f1d74acc3473a2db6dadc1665027c78037ea7164",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "coordinates",
        "distance",
        "bearing",
        "geospatial",
        "math"
      ],
      "use_cases": [
        "Calculate the distance between two coordinates",
        "Find a midpoint for a meeting or delivery",
        "Get an initial bearing for a route"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/coordinates-distance-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/coordinates-distance-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=coordinates-distance-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=coordinates-distance-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "email-verification-api",
      "slug": "email-verification-api",
      "name": "Email Verification API",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Verification",
      "tagline": "Real-time email verification for AI agents, with a quality score.",
      "description": "Real-time syntax, domain, MX, disposable, role and typo checks with a quality score. x402 payments, no API key, no SMTP probe and no message sent.",
      "agent_summary": "Check email syntax, domain and MX records before an agent sends a signup, invoice or outreach message.",
      "scope": "Domain-level check only. Does not prove the mailbox exists, send a test message or perform SMTP probing. Disposable and role lists are curated samples, not a licensed feed.",
      "intent_phrases": [
        "validate an email address",
        "check if an email domain can receive mail",
        "screen an email before signup",
        "detect a disposable email domain"
      ],
      "faqs": [
        {
          "answer": "No. It verifies the domain and its mail route. It does not use SMTP, does not send a message, and returns mailbox_checked: false. A deliverable verdict means the domain can accept mail, not that the specific inbox exists.",
          "question": "Does this API confirm that a mailbox exists?"
        },
        {
          "answer": "The quality score from 0 to 100 combines syntax, MX, implicit MX, disposable-domain, role-account and typo signals. It is a confidence indicator, not a guarantee of delivery.",
          "question": "What does the quality score mean?"
        },
        {
          "answer": "Yes. The API performs the domain and MX checks during the request and returns a structured result in one call. It does not run a slow SMTP mailbox probe.",
          "question": "Is this a real-time API?"
        },
        {
          "answer": "No. The API uses DNS only. It does not connect to SMTP port 25, does not send mail and does not store the email address.",
          "question": "Does it send email or use SMTP?"
        },
        {
          "answer": "A call costs $0.001 USDC on Base. The agent reads the x402 402 challenge, pays the provider wallet directly and retries. There is no API key or subscription.",
          "question": "How much does a call cost and how do agents pay?"
        },
        {
          "answer": "A null MX record tells senders that the domain does not accept email. The API marks that domain as undeliverable instead of treating the missing mailbox as a temporary failure.",
          "question": "What is a null MX record?"
        }
      ],
      "code_examples": [],
      "price": {
        "min_usdc": 0.001,
        "max_usdc": 0.001,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.001,
        "price_max_usdc": 0.001,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 1,
        "total_routes": 1,
        "last_verified_at": "2026-11-13T13:52:26.507Z",
        "receipt_url": "https://basescan.org/tx/0x921a420d189953841232d7d6771f1352b34a5bec27ce76c4701aa6b958755a9e"
      },
      "verified_routes": 1,
      "total_routes": 1,
      "reliability": {
        "score": 88,
        "band": "caution",
        "uptime30d": 87.88,
        "lastCheckedAt": "2026-11-14T03:35:09.903Z"
      },
      "last_verified_at": "2026-11-13T13:52:26.507Z",
      "receipt_url": "https://basescan.org/tx/0x921a420d189953841232d7d6771f1352b34a5bec27ce76c4701aa6b958755a9e",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "email",
        "verification",
        "deliverability",
        "mx",
        "validation"
      ],
      "use_cases": [
        "Clean a signup list before sending",
        "Block disposable addresses and role accounts in a workflow",
        "Catch common domain typos before they become bounces",
        "Reduce bounce rates for an agent-driven campaign"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/email-verification-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/email-verification-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=email-verification-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=email-verification-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "global-weather-api",
      "slug": "global-weather-api",
      "name": "Global Weather API",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Weather & Geospatial",
      "tagline": "Current conditions and forecasts by coordinates.",
      "description": "Current weather and daily forecasts for any latitude and longitude. Compact JSON with units and timestamps.",
      "agent_summary": "Get current weather conditions or a daily forecast for a latitude and longitude.",
      "scope": "Weather only. Does not provide road conditions, air quality, alerts or historical climate data.",
      "intent_phrases": [
        "get the current weather",
        "get a weather forecast for coordinates",
        "check conditions before a delivery",
        "add weather context to a travel workflow"
      ],
      "faqs": [],
      "code_examples": [],
      "price": {
        "min_usdc": 0.001,
        "max_usdc": 0.002,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.001,
        "price_max_usdc": 0.002,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 2,
        "total_routes": 2,
        "last_verified_at": "2026-11-13T13:52:10.060Z",
        "receipt_url": "https://basescan.org/tx/0x8a3a1b940900f2a67a7c29aa5dfb9aec316b728a64bb9bb97ac992fb9d9afe85"
      },
      "verified_routes": 2,
      "total_routes": 2,
      "reliability": {
        "score": 85,
        "band": "caution",
        "uptime30d": 84.85,
        "lastCheckedAt": "2026-11-14T03:35:09.901Z"
      },
      "last_verified_at": "2026-11-13T13:52:10.060Z",
      "receipt_url": "https://basescan.org/tx/0x8a3a1b940900f2a67a7c29aa5dfb9aec316b728a64bb9bb97ac992fb9d9afe85",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "weather",
        "forecast",
        "geospatial",
        "travel",
        "operations"
      ],
      "use_cases": [
        "Check weather before a delivery or event",
        "Add forecast context to a travel agent",
        "Monitor conditions for an insurance workflow"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/global-weather-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/global-weather-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=global-weather-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=global-weather-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "spotify-api",
      "slug": "spotify-api",
      "name": "Spotify API for AI Agents",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Media",
      "tagline": "Spotify API, metadata for agents: playlists, albums, artists and tracks. Complete discographies are in v2.",
      "description": "Spotify metadata API for AI agents. Playlist, album, artist, artist top-tracks and track intelligence are live. Search and complete artist discographies are in the Spotify v2 listing. No auth or API key required.",
      "agent_summary": "Spotify metadata for agents: resolve playlist, album, artist, artist top-tracks and track links or ids, with search and complete discographies in the v2 listing. Artist responses include audience stats, bio when published and top tracks. No auth or API key.",
      "scope": "The current release covers public playlists, albums, artists, artist top tracks and tracks. Search and complete artist discographies are available in the Spotify v2 listing. Spotify's public metadata does not expose playlist creation dates or per-track added dates, so those fields are omitted. No playback control, downloads or user-library access.",
      "intent_phrases": [
        "get a Spotify playlist",
        "get a Spotify album",
        "get a Spotify artist",
        "get a Spotify artist bio",
        "get a Spotify artist's monthly listeners and followers",
        "get a Spotify track",
        "get Spotify track metadata",
        "get the album and copyright lines for a Spotify track",
        "get a Spotify artist's top tracks",
        "get an artist's top five tracks with album context",
        "get the ranked top tracks for a Spotify artist",
        "extract tracks from a Spotify playlist",
        "extract tracks from a Spotify album",
        "list artists and albums in a Spotify playlist",
        "calculate the length of a Spotify playlist",
        "resolve a Spotify URL, URI or id",
        "get Spotify metadata without an API key",
        "Spotify metadata API for AI agents"
      ],
      "faqs": [
        {
          "answer": "Playlist, album, artist, artist top-tracks and track metadata are live now. Search and complete artist discographies are available in the Spotify v2 listing. Each route has its own request and response shape.",
          "question": "What Spotify endpoints are available?"
        },
        {
          "answer": "It returns the album name, type, artists, release date, one cover image, total tracks, duration, explicit count, copyright lines and the full ordered track list with disc and track numbers.",
          "question": "What does the album endpoint return?"
        },
        {
          "answer": "It returns the artist name, one image, monthly listeners, followers, bio when Spotify publishes one and the artist's top five tracks with collaborator ids, profile URLs, album context and one artwork per track.",
          "question": "What does the artist endpoint return?"
        },
        {
          "answer": "Yes, when Spotify publishes one. Monthly listeners and followers are included when Spotify publishes them. The bio is the public About text from the artist page.",
          "question": "Does the artist endpoint include a bio?"
        },
        {
          "answer": "The artist endpoint returns the artist profile plus the top five tracks. The artist top-tracks endpoint returns the same ranked tracks with a limit parameter from 1 to 5 and album context on every track. Use the top-tracks route when the agent only needs the ranked tracks.",
          "question": "What is the difference between the artist and artist top-tracks endpoints?"
        },
        {
          "answer": "It returns the track title, artists with ids and profile URLs, album id, name, URL and release date, track release date, duration, explicit flag, playable state, preview URL, one artwork image and copyright lines when Spotify publishes them.",
          "question": "What does the track endpoint return?"
        },
        {
          "answer": "They are separate rights. The © line is the copyright notice for the musical work (composition and lyrics). The ℗ line is the phonogram notice for the sound recording (the master). Spotify publishes both when the rights holders supply them. The API returns each line in the order Spotify provides it, does not merge notices and returns an empty array when Spotify publishes none.",
          "question": "Why are there two copyright lines in a track response?"
        },
        {
          "answer": "No. The agent sends a public playlist, album, artist or track URL, URI or id and pays per call with x402. There is no Spotify login, OAuth flow or API key for the buyer.",
          "question": "Does this API require a Spotify account?"
        },
        {
          "answer": "No. The API returns metadata only. It does not download audio, control playback, access a user library or bypass Spotify access controls.",
          "question": "Does it download, play or stream music?"
        },
        {
          "answer": "A playlist exposes up to 100 tracks, and the limit parameter can return fewer. An album returns its full track list. An artist returns the top five tracks shown on the public artist page. The artist top-tracks endpoint returns up to five tracks and accepts limit=1 to 5.",
          "question": "How many tracks are returned?"
        },
        {
          "answer": "No. Spotify's public playlist metadata does not expose the playlist creation date, last updated date, or per-track added timestamps. Those fields require an OAuth-based Spotify API, which this API does not use.",
          "question": "Does the playlist endpoint include creation or added dates?"
        },
        {
          "answer": "It enriches the first playlist tracks with album id, name, URL and release date, and upgrades each track artwork to the largest available album image. Album enrichment uses extra metadata lookups and is capped by album_limit to keep latency predictable.",
          "question": "What does include_albums do on the playlist route?"
        },
        {
          "answer": "Use GET /api/v1/spotify/playlist, /album, /artist, /artist/top-tracks or /track with a url or id query parameter. All five routes also accept POST JSON with a url or id field. The value can be a Spotify URL, URI or 22-character id.",
          "question": "How do I send a Spotify link?"
        },
        {
          "answer": "A playlist, album, artist, artist top-tracks or track call costs $0.02 USDC on Base. The agent reads the x402 402 challenge, pays the provider wallet directly and retries. There is no API key or subscription.",
          "question": "How much does a call cost and how do agents pay?"
        }
      ],
      "code_examples": [
        {
          "code": "import asyncio\nimport os\n\nfrom eth_account import Account\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\n\naccount = Account.from_key(os.environ[\"EVM_PRIVATE_KEY\"])\nclient = x402Client()\nregister_exact_evm_client(client, EthAccountSigner(account))\n\n\nasync def main():\n    async with x402HttpxClient(client) as http:\n        response = await http.get(\n            \"https://apistead.qd.je/api/v1/spotify/playlist\",\n            params={\n                \"url\": \"https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M\",\n                \"limit\": 20,\n                \"include_albums\": \"true\",\n                \"album_limit\": 10,\n            },\n        )\n        response.raise_for_status()\n        print(response.json())\n\n\nasyncio.run(main())",
          "label": "Python",
          "language": "python"
        },
        {
          "code": "import { x402Client } from \"@x402/core/client\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { wrapFetchWithPayment } from \"@x402/fetch\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nconst account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);\nconst client = new x402Client();\n\n// Base mainnet.\nclient.register(\"eip155:8453\", new ExactEvmScheme(account));\n\nconst paidFetch = wrapFetchWithPayment(fetch, client);\n\nconst response = await paidFetch(\n  \"https://apistead.qd.je/api/v1/spotify/playlist\",\n  {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      url: \"https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M\",\n      limit: 20,\n      include_albums: true,\n      album_limit: 10,\n    }),\n  },\n);\n\nconsole.log(await response.json());",
          "label": "JavaScript",
          "language": "javascript"
        },
        {
          "code": "curl -i \"https://apistead.qd.je/api/v1/spotify/playlist?url=https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M&limit=3\"",
          "label": "cURL: read the 402 first",
          "language": "bash"
        },
        {
          "code": "import asyncio\nimport os\n\nfrom eth_account import Account\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\n\naccount = Account.from_key(os.environ[\"EVM_PRIVATE_KEY\"])\nclient = x402Client()\nregister_exact_evm_client(client, EthAccountSigner(account))\n\n\nasync def main():\n    async with x402HttpxClient(client) as http:\n        response = await http.get(\n            \"https://apistead.qd.je/api/v1/spotify/album\",\n            params={\"url\": \"https://open.spotify.com/album/5WulAOx9ilWy1h8UGZ1gkI\"},\n        )\n        response.raise_for_status()\n        print(response.json())\n\n\nasyncio.run(main())",
          "label": "Python: album",
          "language": "python"
        },
        {
          "code": "import { x402Client } from \"@x402/core/client\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { wrapFetchWithPayment } from \"@x402/fetch\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nconst account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);\nconst client = new x402Client();\n\n// Base mainnet.\nclient.register(\"eip155:8453\", new ExactEvmScheme(account));\n\nconst paidFetch = wrapFetchWithPayment(fetch, client);\n\nconst response = await paidFetch(\n  \"https://apistead.qd.je/api/v1/spotify/album\",\n  {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      url: \"https://open.spotify.com/album/5WulAOx9ilWy1h8UGZ1gkI\",\n    }),\n  },\n);\n\nconsole.log(await response.json());",
          "label": "JavaScript: album",
          "language": "javascript"
        },
        {
          "code": "curl -i \"https://apistead.qd.je/api/v1/spotify/album?url=https://open.spotify.com/album/5WulAOx9ilWy1h8UGZ1gkI\"",
          "label": "cURL: album challenge",
          "language": "bash"
        },
        {
          "code": "import asyncio\nimport os\n\nfrom eth_account import Account\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\n\naccount = Account.from_key(os.environ[\"EVM_PRIVATE_KEY\"])\nclient = x402Client()\nregister_exact_evm_client(client, EthAccountSigner(account))\n\n\nasync def main():\n    async with x402HttpxClient(client) as http:\n        response = await http.get(\n            \"https://apistead.qd.je/api/v1/spotify/artist\",\n            params={\"url\": \"https://open.spotify.com/artist/5INjqkS1o8h1imAzPqGZBb\"},\n        )\n        response.raise_for_status()\n        print(response.json())\n\n\nasyncio.run(main())",
          "label": "Python: artist",
          "language": "python"
        },
        {
          "code": "import { x402Client } from \"@x402/core/client\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { wrapFetchWithPayment } from \"@x402/fetch\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nconst account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);\nconst client = new x402Client();\n\n// Base mainnet.\nclient.register(\"eip155:8453\", new ExactEvmScheme(account));\n\nconst paidFetch = wrapFetchWithPayment(fetch, client);\n\nconst response = await paidFetch(\n  \"https://apistead.qd.je/api/v1/spotify/artist\",\n  {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      url: \"https://open.spotify.com/artist/5INjqkS1o8h1imAzPqGZBb\",\n    }),\n  },\n);\n\nconsole.log(await response.json());",
          "label": "JavaScript: artist",
          "language": "javascript"
        },
        {
          "code": "curl -i \"https://apistead.qd.je/api/v1/spotify/artist?url=https://open.spotify.com/artist/5INjqkS1o8h1imAzPqGZBb\"",
          "label": "cURL: artist challenge",
          "language": "bash"
        },
        {
          "code": "import asyncio\nimport os\n\nfrom eth_account import Account\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\n\naccount = Account.from_key(os.environ[\"EVM_PRIVATE_KEY\"])\nclient = x402Client()\nregister_exact_evm_client(client, EthAccountSigner(account))\n\n\nasync def main():\n    async with x402HttpxClient(client) as http:\n        response = await http.get(\n            \"https://apistead.qd.je/api/v1/spotify/artist/top-tracks\",\n            params={\n                \"url\": \"https://open.spotify.com/artist/5INjqkS1o8h1imAzPqGZBb\",\n                \"limit\": 5,\n            },\n        )\n        response.raise_for_status()\n        print(response.json())\n\n\nasyncio.run(main())",
          "label": "Python: artist top tracks",
          "language": "python"
        },
        {
          "code": "import { x402Client } from \"@x402/core/client\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { wrapFetchWithPayment } from \"@x402/fetch\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nconst account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);\nconst client = new x402Client();\n\n// Base mainnet.\nclient.register(\"eip155:8453\", new ExactEvmScheme(account));\n\nconst paidFetch = wrapFetchWithPayment(fetch, client);\n\nconst response = await paidFetch(\n  \"https://apistead.qd.je/api/v1/spotify/artist/top-tracks\",\n  {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      url: \"https://open.spotify.com/artist/5INjqkS1o8h1imAzPqGZBb\",\n      limit: 5,\n    }),\n  },\n);\n\nconsole.log(await response.json());",
          "label": "JavaScript: artist top tracks",
          "language": "javascript"
        },
        {
          "code": "curl -i \"https://apistead.qd.je/api/v1/spotify/artist/top-tracks?url=https://open.spotify.com/artist/5INjqkS1o8h1imAzPqGZBb&limit=5\"",
          "label": "cURL: artist top tracks challenge",
          "language": "bash"
        },
        {
          "code": "import asyncio\nimport os\n\nfrom eth_account import Account\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\n\naccount = Account.from_key(os.environ[\"EVM_PRIVATE_KEY\"])\nclient = x402Client()\nregister_exact_evm_client(client, EthAccountSigner(account))\n\n\nasync def main():\n    async with x402HttpxClient(client) as http:\n        response = await http.get(\n            \"https://apistead.qd.je/api/v1/spotify/track\",\n            params={\"url\": \"https://open.spotify.com/track/4cOdK2wGLETKBW3PvgPWqT\"},\n        )\n        response.raise_for_status()\n        print(response.json())\n\n\nasyncio.run(main())",
          "label": "Python: track",
          "language": "python"
        },
        {
          "code": "import { x402Client } from \"@x402/core/client\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { wrapFetchWithPayment } from \"@x402/fetch\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nconst account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);\nconst client = new x402Client();\n\n// Base mainnet.\nclient.register(\"eip155:8453\", new ExactEvmScheme(account));\n\nconst paidFetch = wrapFetchWithPayment(fetch, client);\n\nconst response = await paidFetch(\n  \"https://apistead.qd.je/api/v1/spotify/track\",\n  {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      id: \"4cOdK2wGLETKBW3PvgPWqT\",\n    }),\n  },\n);\n\nconsole.log(await response.json());",
          "label": "JavaScript: track",
          "language": "javascript"
        },
        {
          "code": "curl -i \"https://apistead.qd.je/api/v1/spotify/track?id=4cOdK2wGLETKBW3PvgPWqT\"",
          "label": "cURL: track challenge",
          "language": "bash"
        }
      ],
      "price": {
        "min_usdc": 0.02,
        "max_usdc": 0.02,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.02,
        "price_max_usdc": 0.02,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 5,
        "total_routes": 5,
        "last_verified_at": "2026-11-13T13:53:03.203Z",
        "receipt_url": "https://basescan.org/tx/0xfae6bdc0cf2816bae6a4d17a1ee9b4fda79d45dc7a5abc3fd5f3b6ee639bc58c"
      },
      "verified_routes": 5,
      "total_routes": 5,
      "reliability": {
        "score": 87,
        "band": "caution",
        "uptime30d": 86.95,
        "lastCheckedAt": "2026-11-14T03:35:09.914Z"
      },
      "last_verified_at": "2026-11-13T13:53:03.203Z",
      "receipt_url": "https://basescan.org/tx/0xfae6bdc0cf2816bae6a4d17a1ee9b4fda79d45dc7a5abc3fd5f3b6ee639bc58c",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "spotify",
        "playlist",
        "album",
        "artist",
        "artist-bio",
        "top-tracks",
        "music",
        "tracks",
        "metadata"
      ],
      "use_cases": [
        "Summarize a Spotify playlist for a user",
        "Summarize a Spotify album for a user",
        "Inspect a Spotify artist's top tracks, bio and audience size",
        "Get an artist's top five tracks for a recommendation flow",
        "Build a music discovery or recommendation workflow",
        "Extract track and artist metadata for a catalogue",
        "Calculate playlist or album duration and explicit content"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/spotify-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/spotify-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=spotify-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=spotify-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "spotify-api-v2",
      "slug": "spotify-api-v2",
      "name": "Spotify API v2 for AI Agents",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Media",
      "tagline": "Spotify metadata v2: tracks, albums, artists, playlists, search, full discographies, artist playlists, related artists, discovered-on and featuring playlists, similar albums, podcasts, episodes, audiobooks, chapters, genres and users. No auth, no API key.",
      "description": "Spotify v2 metadata API for AI agents. Search tracks, albums, artists, playlists, podcasts, episodes, audiobooks, genres and users; fetch complete artist discographies, artist playlists, related artists, similar albums, podcast episodes, audiobook chapters and public user playlists. No Spotify login or API key required.",
      "agent_summary": "Spotify v2 metadata for agents: search the catalogue; fetch complete artist discographies, artist playlists, related artists, similar albums, podcast episodes, audiobook chapters and public user playlists. No Spotify login or API key.",
      "scope": "The v2 release covers public Spotify search, playlists, albums, artists, artist top tracks, related artists, artist playlists, discovered-on playlists, featuring playlists, complete artist discographies, tracks, similar albums, podcasts, podcast episodes, episodes, audiobooks, audiobook chapters, genres and public user profiles. The five v1 routes remain live. It does not access a user library, playback, downloads or account data. Playlist creation dates and per-track added dates are not exposed in public metadata.",
      "intent_phrases": [
        "Spotify search API",
        "Spotify API without login",
        "Spotify API without an API key",
        "Spotify API no OAuth",
        "Spotify catalogue search",
        "Spotify music metadata API",
        "Spotify discography API",
        "Spotify artist playlists API",
        "Spotify related artists API",
        "get Spotify related artists",
        "get Spotify artist playlists",
        "get Spotify artist discovered-on playlists",
        "get Spotify artist featuring playlists",
        "get Spotify albums similar to a track",
        "search Spotify podcasts",
        "search Spotify episodes",
        "search Spotify audiobooks",
        "search Spotify users",
        "get a Spotify podcast",
        "get Spotify podcast episodes",
        "get a Spotify episode",
        "get a Spotify audiobook",
        "get Spotify audiobook chapters",
        "get Spotify genres",
        "get a Spotify public user profile",
        "search Spotify tracks",
        "search Spotify albums",
        "search Spotify artists",
        "search Spotify playlists",
        "get Spotify metadata without a token",
        "search Spotify for a track",
        "search Spotify for an album or artist",
        "search Spotify without an API key",
        "get a Spotify artist's complete discography",
        "get a Spotify playlist with full track metadata",
        "get Spotify metadata without a Spotify account",
        "Spotify API v2 for AI agents",
        "Spotify API alternative"
      ],
      "faqs": [
        {
          "answer": "v1 keeps playlist, album, artist, artist top-tracks and track metadata. v2 adds keyword search, complete artist discographies, artist playlists, related artists, discovered-on playlists, featuring playlists, similar albums and dedicated spoken-audio and user search. v2 returns the same core shapes as v1.",
          "question": "What is the difference between Spotify v1 and v2?"
        },
        {
          "answer": "No. The provider uses public catalogue metadata. There is no Spotify login, OAuth grant, user library scope or playback scope, and the buyer does not send a Spotify token.",
          "question": "Does v2 require a Spotify account?"
        },
        {
          "answer": "No. APIStead is an independent first-party API and is not affiliated with or endorsed by Spotify. It reads public Spotify catalogue metadata without a buyer account.",
          "question": "Is APIStead affiliated with Spotify?"
        },
        {
          "answer": "No. Playlist creation dates are not exposed in public playlist metadata. Per-track added dates are not exposed in public metadata. V2 does not return or fabricate either.",
          "question": "Does v2 include playlist creation or per-track added dates?"
        },
        {
          "answer": "No. The public catalogue source exposes world_rank but does not expose Spotify genre labels or popularity scores. V2 does not fabricate them.",
          "question": "Does v2 include artist genres or popularity?"
        },
        {
          "answer": "No. It pages through the complete playlist and returns every ordered track. album_limit only controls how many tracks receive album enrichment.",
          "question": "Does the v2 playlist endpoint limit tracks?"
        },
        {
          "answer": "Search returns tracks, albums, artists, playlists, podcasts, episodes, audiobooks, genres and users with per-type counts and totals. Dedicated search routes return only podcasts, episodes, audiobooks or users. Detail routes return podcasts, podcast episodes, episodes, audiobooks, audiobook chapters, genres and public user profiles. Artist records include world_rank, and artist routes return playlists, related artists, discovered-on playlists and featuring playlists.",
          "question": "What does v2 search return?"
        },
        {
          "answer": "V2 includes artist playlists, related artists, discovered-on playlists, featuring playlists and similar albums based on a track. These return normalized JSON for agents.",
          "question": "What artist and recommendation routes does v2 include?"
        },
        {
          "answer": "No. Radio is created by the playback client and is not exposed as a stable public catalogue query. V2 returns similar albums based on a track and related artists instead.",
          "question": "Does v2 include track, album or artist radio?"
        },
        {
          "answer": "v2 returns all albums, singles and EPs and marks complete as true when the release feed was fully read. The public Appears On section exposes up to 50 items and reports appears_on_total.",
          "question": "Is the v2 discography complete?"
        },
        {
          "answer": "No. v2 returns metadata only. It does not download audio, stream audio, control playback or access a user library.",
          "question": "Does v2 download or play music?"
        },
        {
          "answer": "Every v2 route costs $0.03 USDC on Base. The agent reads the x402 402 challenge, pays the provider wallet directly and retries. There is no API key or subscription.",
          "question": "How much does a v2 call cost?"
        }
      ],
      "code_examples": [
        {
          "code": "import asyncio\nimport os\n\nfrom eth_account import Account\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\n\naccount = Account.from_key(os.environ[\"EVM_PRIVATE_KEY\"])\nclient = x402Client()\nregister_exact_evm_client(client, EthAccountSigner(account))\n\n\nasync def main():\n    async with x402HttpxClient(client) as http:\n        response = await http.get(\n            \"https://apistead.qd.je/api/v2/spotify/search\",\n            params={\"q\": \"daft punk\", \"type\": \"track\", \"limit\": 5},\n        )\n        response.raise_for_status()\n        print(response.json())\n\n\nasyncio.run(main())",
          "label": "Python: v2 search",
          "language": "python"
        },
        {
          "code": "import { x402Client } from \"@x402/core/client\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { wrapFetchWithPayment } from \"@x402/fetch\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nconst account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);\nconst client = new x402Client();\nclient.register(\"eip155:8453\", new ExactEvmScheme(account));\n\nconst paidFetch = wrapFetchWithPayment(fetch, client);\nconst response = await paidFetch(\n  \"https://apistead.qd.je/api/v2/spotify/search?q=daft%20punk&type=track&limit=5\",\n);\n\nconsole.log(await response.json());",
          "label": "JavaScript: v2 search",
          "language": "javascript"
        },
        {
          "code": "curl -i \"https://apistead.qd.je/api/v2/spotify/search?q=daft%20punk&type=track&limit=5\"",
          "label": "cURL: v2 search challenge",
          "language": "bash"
        },
        {
          "code": "import asyncio\nimport os\n\nfrom eth_account import Account\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\n\naccount = Account.from_key(os.environ[\"EVM_PRIVATE_KEY\"])\nclient = x402Client()\nregister_exact_evm_client(client, EthAccountSigner(account))\n\n\nasync def main():\n    async with x402HttpxClient(client) as http:\n        response = await http.get(\n            \"https://apistead.qd.je/api/v2/spotify/track\",\n            params={\"id\": \"4cOdK2wGLETKBW3PvgPWqT\"},\n        )\n        response.raise_for_status()\n        print(response.json())\n\n\nasyncio.run(main())",
          "label": "Python: v2 track",
          "language": "python"
        }
      ],
      "price": {
        "min_usdc": 0.03,
        "max_usdc": 0.03,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.03,
        "price_max_usdc": 0.03,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 23,
        "total_routes": 23,
        "last_verified_at": "2026-11-13T13:53:04.807Z",
        "receipt_url": "https://basescan.org/tx/0x3f369c98f7753d3fda50495d941342c1880dd2480d6e80170fa235127b97ef1b"
      },
      "verified_routes": 23,
      "total_routes": 23,
      "reliability": {
        "score": 79,
        "band": "caution",
        "uptime30d": 78.54,
        "lastCheckedAt": "2026-11-14T03:35:09.916Z"
      },
      "last_verified_at": "2026-11-13T13:53:04.807Z",
      "receipt_url": "https://basescan.org/tx/0x3f369c98f7753d3fda50495d941342c1880dd2480d6e80170fa235127b97ef1b",
      "base_url": "https://apistead.qd.je/api/v2",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "spotify",
        "spotify-v2",
        "spotify-search",
        "spotify-api",
        "search",
        "playlist",
        "album",
        "artist",
        "artist-playlists",
        "related-artists",
        "similar-albums",
        "top-tracks",
        "discography",
        "podcast",
        "episode",
        "audiobook",
        "genre",
        "user",
        "music",
        "tracks",
        "metadata",
        "no-login",
        "no-auth",
        "no-api-key",
        "catalogue",
        "music-search",
        "spotify-metadata"
      ],
      "use_cases": [
        "Search Spotify for a track, album, artist or playlist without a login",
        "Find Spotify metadata without an OAuth token or API key",
        "Fetch a complete Spotify artist discography",
        "List an artist's playlists, related artists, discovered-on playlists and featuring playlists",
        "Search the Spotify catalogue by keyword",
        "Search podcasts, episodes, audiobooks or public users directly",
        "Fetch a Spotify podcast and its episodes",
        "Fetch an audiobook and its chapters",
        "Find Spotify genres and public user profiles",
        "Find albums similar to a track",
        "Summarize a Spotify playlist or album for a user",
        "Build a music discovery or recommendation workflow"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/spotify-api-v2",
        "markdown": "https://x402.apistead.qd.je/api/apis/spotify-api-v2/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=spotify-api-v2",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=spotify-api-v2",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    },
    {
      "id": "us-building-permits-api",
      "slug": "us-building-permits-api",
      "name": "US Building Permits API",
      "provider": {
        "slug": "apistead-labs",
        "name": "APIStead Labs",
        "verified": true
      },
      "category": "Public Records",
      "tagline": "Permit history for US properties and contractors.",
      "description": "Search building permits by city, address or keyword. Returns permit type, status, dates and contractor evidence.",
      "agent_summary": "Look up sample US building permit records by city and optional search text.",
      "scope": "Sample cities only. Not a complete national permit feed, legal verification or construction approval.",
      "intent_phrases": [
        "look up building permits",
        "check permit activity for an address",
        "find construction permits in a city",
        "research a property permit history"
      ],
      "faqs": [],
      "code_examples": [],
      "price": {
        "min_usdc": 0.01,
        "max_usdc": 0.01,
        "unit": "per_call"
      },
      "payment": {
        "protocol": "x402",
        "protocol_version": 2,
        "network": "eip155:8453",
        "network_name": "Base",
        "asset": "USDC",
        "price_min_usdc": 0.01,
        "price_max_usdc": 0.01,
        "unit": "per_call",
        "pay_to": "0x2E9804240E493DD8daeBa4F341a5086b92cde235",
        "authoritative_source": "402_challenge"
      },
      "networks": [
        "base"
      ],
      "primary_network": "base",
      "verification": "verified",
      "verification_detail": {
        "state": "verified",
        "verified_routes": 1,
        "total_routes": 1,
        "last_verified_at": "2026-11-13T13:52:07.908Z",
        "receipt_url": "https://basescan.org/tx/0x87fa207fe48e9a46f86e723adfa2a145d500c6e18274ebb7ff833f22e905211e"
      },
      "verified_routes": 1,
      "total_routes": 1,
      "reliability": {
        "score": 85,
        "band": "caution",
        "uptime30d": 84.85,
        "lastCheckedAt": "2026-11-14T03:35:09.907Z"
      },
      "last_verified_at": "2026-11-13T13:52:07.908Z",
      "receipt_url": "https://basescan.org/tx/0x87fa207fe48e9a46f86e723adfa2a145d500c6e18274ebb7ff833f22e905211e",
      "base_url": "https://apistead.qd.je/api/v1",
      "mcp_endpoint": "https://apistead.qd.je/mcp",
      "docs_url": "https://apistead.qd.je/api",
      "tags": [
        "permits",
        "property",
        "construction",
        "public-records",
        "us"
      ],
      "use_cases": [
        "Check permit history before a property purchase",
        "Find roofing or solar permit activity",
        "Verify a contractor's recent permits"
      ],
      "links": {
        "docs": "https://apistead.qd.je/api",
        "json": "https://x402.apistead.qd.je/api/apis/us-building-permits-api",
        "markdown": "https://x402.apistead.qd.je/api/apis/us-building-permits-api/md",
        "routes": "https://x402.apistead.qd.je/agent/routes?id=us-building-permits-api",
        "receipts": "https://x402.apistead.qd.je/agent/receipts?id=us-building-permits-api",
        "api_reference": "https://x402.apistead.qd.je/api",
        "mcp_guide": "https://x402.apistead.qd.je/mcp-docs",
        "skill": "https://x402.apistead.qd.je/skill",
        "openapi": "https://x402.apistead.qd.je/openapi.json"
      },
      "demo": true
    }
  ],
  "discovery": {
    "free": true,
    "payment": "Pay the API's own x402 route. APIStead never charges for discovery.",
    "marketplace": {
      "accepting_listings": false,
      "first_party_only": true
    },
    "docs": "https://x402.apistead.qd.je/api",
    "mcp": "https://x402.apistead.qd.je/mcp"
  },
  "generated_at": "2026-11-14T04:11:37.597Z"
}