{"version":1,"resources":["https://stableenrich.dev/api/minerva/enrich","https://stableenrich.dev/api/hunter/email-verifier","https://stableenrich.dev/api/google-maps/place-details/partial","https://stableenrich.dev/api/apollo/people-search","https://stableenrich.dev/api/apollo/people-enrich","https://stableenrich.dev/api/apollo/org-search","https://stableenrich.dev/api/apollo/org-enrich","https://stableenrich.dev/api/clado/contacts-enrich","https://stableenrich.dev/api/exa/search","https://stableenrich.dev/api/exa/find-similar","https://stableenrich.dev/api/exa/contents","https://stableenrich.dev/api/exa/answer","https://stableenrich.dev/api/firecrawl/scrape","https://stableenrich.dev/api/firecrawl/search","https://stableenrich.dev/api/google-maps/text-search/partial","https://stableenrich.dev/api/google-maps/text-search/full","https://stableenrich.dev/api/google-maps/nearby-search/partial","https://stableenrich.dev/api/google-maps/nearby-search/full","https://stableenrich.dev/api/google-maps/place-details/full","https://stableenrich.dev/api/google-maps/solar/building-insights","https://stableenrich.dev/api/google-maps/solar/data-layers","https://stableenrich.dev/api/google-maps/solar/rgb-image","https://stableenrich.dev/api/google-maps/aerial-view/lookup-video","https://stableenrich.dev/api/google-maps/aerial-view/render-video","https://stableenrich.dev/api/serper/news","https://stableenrich.dev/api/serper/shopping","https://stableenrich.dev/api/serper/images","https://stableenrich.dev/api/serper/people-image-search","https://stableenrich.dev/api/serper/lens","https://stableenrich.dev/api/whitepages/person-search","https://stableenrich.dev/api/whitepages/property-search","https://stableenrich.dev/api/reddit/search","https://stableenrich.dev/api/reddit/post-comments","https://stableenrich.dev/api/influencer/enrich-by-email","https://stableenrich.dev/api/influencer/enrich-by-social","https://stableenrich.dev/api/minerva/resolve","https://stableenrich.dev/api/minerva/validate-emails","https://stableenrich.dev/api/cloudflare/crawl","https://stableenrich.dev/api/cloudflare/jobs"],"mppResources":["https://stableenrich.dev/api/minerva/enrich","https://stableenrich.dev/api/hunter/email-verifier","https://stableenrich.dev/api/google-maps/place-details/partial","https://stableenrich.dev/api/apollo/people-search","https://stableenrich.dev/api/apollo/people-enrich","https://stableenrich.dev/api/apollo/org-search","https://stableenrich.dev/api/apollo/org-enrich","https://stableenrich.dev/api/clado/contacts-enrich","https://stableenrich.dev/api/exa/search","https://stableenrich.dev/api/exa/find-similar","https://stableenrich.dev/api/exa/contents","https://stableenrich.dev/api/exa/answer","https://stableenrich.dev/api/firecrawl/scrape","https://stableenrich.dev/api/firecrawl/search","https://stableenrich.dev/api/google-maps/text-search/partial","https://stableenrich.dev/api/google-maps/text-search/full","https://stableenrich.dev/api/google-maps/nearby-search/partial","https://stableenrich.dev/api/google-maps/nearby-search/full","https://stableenrich.dev/api/google-maps/place-details/full","https://stableenrich.dev/api/google-maps/solar/building-insights","https://stableenrich.dev/api/google-maps/solar/data-layers","https://stableenrich.dev/api/google-maps/solar/rgb-image","https://stableenrich.dev/api/google-maps/aerial-view/lookup-video","https://stableenrich.dev/api/google-maps/aerial-view/render-video","https://stableenrich.dev/api/serper/news","https://stableenrich.dev/api/serper/shopping","https://stableenrich.dev/api/serper/images","https://stableenrich.dev/api/serper/people-image-search","https://stableenrich.dev/api/serper/lens","https://stableenrich.dev/api/whitepages/person-search","https://stableenrich.dev/api/whitepages/property-search","https://stableenrich.dev/api/reddit/search","https://stableenrich.dev/api/reddit/post-comments","https://stableenrich.dev/api/influencer/enrich-by-email","https://stableenrich.dev/api/influencer/enrich-by-social","https://stableenrich.dev/api/minerva/resolve","https://stableenrich.dev/api/minerva/validate-emails","https://stableenrich.dev/api/cloudflare/crawl"],"description":"Pay-per-request access to Apollo, Clado, Exa, Firecrawl, Google Maps, Serper, and Whitepages APIs. No auth, no subscriptions.","ownershipProofs":["0x0000000000000000000000008e6af8ed94e87b4402d0272c5d6b0d47f0483e7c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000124406f52fd0000000000000000000000002b4e26e1f32c7fbf076563ad49a86b69ae0182160000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000311d29fa0000000000000000000000000000000000000000000000000000000000000002bd71e7ae4046dbcd345631a04e70b360434e724d558d4dbce1a1235e0c5dbe8b7e673ff35925f52d6b485ac8fdd324d9e0ee0163e09e8c3f2b7ea44fc4f72745be445780eeddc4321ff957c7fb8ac80866d1f281f2bdac807ac00d38dc33e8403e21ca5d0d341cc94b8dcc9c79b36f691ce99d74cbf28511a1f3a3e14885eefd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000001efc2614a03c63dd8f71e1d894e51b2bfe0e92bda90057cabac999faf7326518d37bb3db54c216f721045344f47892422bcb223d32b58878bc3589a80508fcd0d000000000000000000000000000000000000000000000000000000000000002506817f31b6ccc1234a424df1fff4840b8ed06f3671ea34bfbfabcb0b04a176ac1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000897b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a225148756e486d654632376730765150624a594f71436a726857543943585a655f3366506f7767674a642d77222c226f726967696e223a2268747470733a2f2f7465616d732e73706c6974732e6f7267222c2263726f73734f726967696e223a66616c73657d00000000000000000000000000000000000000000000006492649264926492649264926492649264926492649264926492649264926492"],"instructions":"# StableEnrich API Reference\n## Authentication\n\nAll endpoints require micropayment. Include payment headers as per the HTTP 402 specification. Payments are processed on Base mainnet (eip155:8453), Solana, or Tempo.\n\n## Base URL\n\nhttps://stableenrich.dev\n\nAll endpoints are relative to this base URL.\n\n## Agent Workflow (Progressive)\n\n1. Discover candidate endpoints with `mcp__agentcash__discover_api_endpoints(\"https://stableenrich.dev\")`.\n2. If discovery reports `guidanceAvailable=true` but guidance is omitted, only re-run with `include_guidance=true` when domain-level methodology is needed.\n3. For selected POST/PUT/PATCH endpoints, call `mcp__agentcash__check_endpoint_schema` before first fetch.\n4. Execute with `mcp__agentcash__fetch`.\n\nIf no endpoint matches the user task, stop this origin flow and switch to another origin.\n\n## Schema Discovery\n\nAll endpoints support schema discovery via the `check_endpoint_schema` tool. Use it on the selected endpoint to confirm request schema and pricing before execution.\n\n## Web Scraping\n\nFor web scraping tasks, always start with **Firecrawl `/api/firecrawl/scrape`** ($0.0126/request). It provides comprehensive page content with clean markdown formatting.\n\nIf you need to scrape many URLs and cost is a concern, consider **Exa `/api/exa/contents`** ($0.002/request) as a cheaper alternative for bulk processing.\n\n---\n\n# Research Methodology (Fan-out / Population Tasks)\n\nUse this playbook for ambiguous, broad, or \"find many candidates\" requests (e.g., \"junior hedge fund carry-trade people who might start a company\"):\n\n1. **Detect fan-out**: If the request implies a population or list-building task, avoid single-search answers. Plan for *many* queries and a large candidate pool.\n2. **Clarify constraints**: Restate the target, must-haves, nice-to-haves, geography, seniority, timeframe, and desired output size. If unclear, make explicit assumptions and proceed.\n3. **Broad-to-narrow pipeline**:\n   - **Seed**: Use multiple discovery sources to build an initial pool (Exa `/api/exa/search` with `category: \"people\"` for people discovery, Firecrawl for web lists, Google Maps for local orgs, Apollo org-search for company IDs).\n   - **Expand**: Generate query variants (synonyms, titles, strategies, regions) and paginate until you reach a healthy pool (aim 50–100 candidates).\n   - **Enrich**: Use Apollo people-search + people-enrich (and Minerva enrich for LinkedIn/demographic data, or Clado contacts-enrich for email/phone) to fill details; dedupe by name + company + profile URL.\n   - **Filter**: Apply the must-haves; keep 30–50 high-confidence matches.\n4. **Tool choreography**: Use **mcp__agentcash__fetch** for all paid endpoints. Verify Apollo org IDs with /api/apollo/org-search before large people searches to avoid wasted calls.\n5. **Evidence and transparency**: Track sources per candidate; note uncertainty; surface how the list was constructed and where gaps remain.\n\n---\n\n# Google Maps API\n\n## POST /api/google-maps/text-search/full\nSearch for places using a text query with full field details (includes ratings, reviews, contact info, and atmosphere data).\nPrice: $0.08 per request\n\nExample:\n```json\n{\n  \"textQuery\": \"coffee shops in San Francisco\",\n  \"maxResultCount\": 5\n}\n```\n\n---\n\n## POST /api/google-maps/text-search/partial\nSearch for places using a text query with partial field details (basic info only, lower cost).\nPrice: $0.02 per request. Same request body as /text-search/full.\n\n---\n\n## POST /api/google-maps/nearby-search/full\nSearch for places near a geographic location with full details.\nPrice: $0.08 per request\n\nExample:\n```json\n{\n  \"locationRestriction\": {\n    \"circle\": {\n      \"center\": { \"latitude\": 37.7749, \"longitude\": -122.4194 },\n      \"radius\": 1000\n    }\n  },\n  \"maxResultCount\": 5\n}\n```\n\n---\n\n## POST /api/google-maps/nearby-search/partial\nSearch for places near a geographic location with partial details.\nPrice: $0.02 per request. Same request body as /nearby-search/full.\n\n---\n\n## GET /api/google-maps/place-details/full\nGet full details for a specific place by ID.\nPrice: $0.05 per request\n\nExample: GET /api/google-maps/place-details/full?placeId=ChIJN1t_tDeuEmsRUsoyG83frY4\n\n---\n\n## GET /api/google-maps/place-details/partial\nGet partial details for a specific place by ID.\nPrice: $0.02 per request. Same query parameters as /place-details/full.\n\n---\n\n## GET /api/google-maps/solar/building-insights\nGoogle Solar API — closest building insights for a lat/lng. Use this as a cheap probe to confirm Solar coverage for an address and to read the imagery capture date (`imageryDate`) before fetching the full data layers.\nPrice: $0.02 per request\n\nQuery parameters:\n- `latitude` (required) — building latitude\n- `longitude` (required) — building longitude\n- `requiredQuality` (optional, default `HIGH`) — `LOW` | `MEDIUM` | `HIGH`\n\nExample:\nGET /api/google-maps/solar/building-insights?latitude=37.4220&longitude=-122.0841&requiredQuality=LOW\n\nReturns roof segments, sunshine hours, panel capacity estimates, plus `imageryDate` and `imageryProcessedDate`.\n\n---\n\n## GET /api/google-maps/solar/data-layers\nGoogle Solar API — aerial GeoTIFF data layers for a building. Returns signed URLs for the actual aerial RGB photograph (`rgbUrl`), digital surface model (`dsmUrl`), shade/flux maps, and a building mask, along with `imageryDate` (the capture date of the photo).\nPrice: $0.08 per request\n\nQuery parameters:\n- `latitude` (required)\n- `longitude` (required)\n- `radiusMeters` (optional, default `50`, max `175`) — radius around the lat/lng to include\n- `view` (optional, default `FULL_LAYERS`) — `DSM_LAYER` | `IMAGERY_LAYERS` | `IMAGERY_AND_ANNUAL_FLUX_LAYERS` | `IMAGERY_AND_ALL_FLUX_LAYERS` | `FULL_LAYERS`\n- `requiredQuality` (optional, default `HIGH`) — `LOW` | `MEDIUM` | `HIGH`\n- `pixelSizeMeters` (optional, default `0.25`) — must be one of `0.1`, `0.25`, `0.5`, `1.0`\n- `exactQualityRequired` (optional, default `false`)\n\nExample:\nGET /api/google-maps/solar/data-layers?latitude=37.4220&longitude=-122.0841&radiusMeters=50&view=IMAGERY_LAYERS\n\nThe returned URLs are signed and expire — fetch the GeoTIFFs promptly. To convert a GeoTIFF to PNG/JPEG use `gdal_translate` or any image library that reads TIFF.\n\n---\n\n## GET /api/google-maps/aerial-view/lookup-video\nGoogle Aerial View API — look up a previously rendered 3D flyover video for an address (or by `videoId`). Returns video URIs (landscape, portrait, thumbnail) and metadata. Returns `state: PROCESSING` if a video has been requested but not finished rendering.\nPrice: $0.01 per request\n\nQuery parameters (provide one):\n- `address` — street address to look up\n- `videoId` — existing video ID\n\nExample:\nGET /api/google-maps/aerial-view/lookup-video?address=1600+Amphitheatre+Parkway+Mountain+View+CA\n\n---\n\n## POST /api/google-maps/aerial-view/render-video\nGoogle Aerial View API — request rendering of a new flyover video for an address. The render is asynchronous; poll `/api/google-maps/aerial-view/lookup-video` until `state: ACTIVE` to retrieve the finished URIs.\nPrice: $0.01 per request\n\nExample:\n```json\n{\n  \"address\": \"1600 Amphitheatre Parkway, Mountain View, CA\"\n}\n```\n\n---\n\n# Apollo API\n\nIMPORTANT: Organization Lookup Workflow\nWhen performing people searches filtered by organization (using organization_ids or q_organization_domains), you MUST first verify the exact organization identifier using /api/apollo/org-search. Apollo performs exact matching on organization IDs and domains - if the identifier is incorrect or misspelled, the search will return zero results or the wrong company's employees. This verification step is critical to avoid wasted requests and incorrect data.\n\nRecommended workflow:\n1. Call /api/apollo/org-search with the company name or domain\n2. Confirm the returned organization_id and domain match your intended target\n3. Use the verified identifier in your /api/apollo/people-search calls\n\n\nEXTREMELY IMPORTANT:\n\nWhen Apollo People Search returns names, it will return them in an obfuscated manner. It is absolutely critical that you then immediately use the /api/apollo/people-enrich endpoint to get their full information.\nYou should pass the person's ID directly into enrich to ensure you get correct data for the person.\n\nIf Apollo does not return the needed data, always fall back to Minerva or Clado. Use Minerva `/api/minerva/resolve` + `/api/minerva/enrich` for LinkedIn data, demographics, and personal contact info. Use Clado `/api/clado/contacts-enrich` for email/phone enrichment from a LinkedIn URL.\n\n## POST /api/apollo/people-search\nSearch for people/contacts matching criteria.\nPrice: $0.02 per request\n\nExample:\n```json\n{\n  \"q_keywords\": \"software engineer\",\n  \"person_locations\": [\"San Francisco\"],\n  \"per_page\": 5\n}\n```\n\n---\n\n## POST /api/apollo/org-search\nSearch for organizations/companies matching criteria.\nPrice: $0.02 per request\n\nExample:\n```json\n{\n  \"q_keywords\": \"saas\",\n  \"organization_locations\": [\"United States\"],\n  \"per_page\": 5\n}\n```\n\n---\n\n## POST /api/apollo/people-enrich\nEnrich a person's profile with additional data.\nPrice: $0.0495 per request\n\nExample:\n```json\n{\n  \"email\": \"tim@apple.com\"\n}\n```\n\n---\n\n## POST /api/apollo/org-enrich\nEnrich an organization's profile by domain.\nPrice: $0.0495 per request\n\nExample:\n```json\n{\n  \"domain\": \"apollo.io\"\n}\n```\n\n---\n\n# Exa API (Web Search & Research)\n\n## POST /api/exa/search\nSemantic web search for finding relevant pages.\nPrice: $0.01 per request\n\nSupports an optional `category` parameter to filter results by content type: `\"company\"`, `\"people\"`, `\"research paper\"`, `\"news\"`, `\"pdf\"`, `\"github\"`, `\"personal site\"`, `\"linkedin profile\"`, `\"financial report\"`.\n\n**People/Profile Search Tip**: Prefer `category: \"people\"` for high-level people or profile searches. This is a fast, cheap way to find people before enriching with Apollo or Clado.\n\n**X/Twitter Tip**: Exa no longer supports `category: \"tweet\"`. Do not use Exa for complete timelines or reliable tweet retrieval; use a dedicated X/Twitter API for that. If Exa is used for broad web discovery, post-filter returned URLs to `x.com` or `twitter.com`.\n\nExample:\n```json\n{\n  \"query\": \"best practices for building AI agents\",\n  \"numResults\": 5\n}\n```\n\nLinkedIn profile search example:\n```json\n{\n  \"query\": \"hedge fund portfolio manager New York\",\n  \"category\": \"people\",\n  \"numResults\": 10\n}\n```\n\n---\n\n## POST /api/exa/find-similar\nFind pages similar to a given URL.\nPrice: $0.01 per request\n\nExample:\n```json\n{\n  \"url\": \"https://openai.com\",\n  \"numResults\": 5\n}\n```\n\n---\n\n## POST /api/exa/contents\nExtract content from specific URLs.\nPrice: $0.002 per request\n\nExample:\n```json\n{\n  \"urls\": [\"https://example.com\"]\n}\n```\n\n---\n\n## POST /api/exa/answer\nGet an AI-generated answer to a question based on web search.\nPrice: $0.01 per request\n\nExample:\n```json\n{\n  \"query\": \"What is the capital of France?\"\n}\n```\n\n---\n\n# Firecrawl API (Web Scraping)\n\n## POST /api/firecrawl/scrape\nScrape and extract content from a URL.\nPrice: $0.0126 per request\n\nExample:\n```json\n{\n  \"url\": \"https://example.com\"\n}\n```\n\n---\n\n## POST /api/firecrawl/search\nSearch the web and get scraped results.\nPrice: $0.0252 per request\n\nExample:\n```json\n{\n  \"query\": \"best coffee shops\",\n  \"limit\": 5\n}\n```\n\n---\n\n# Clado API (Contact Enrichment)\n\nNote: Clado is useful as a fallback when Apollo doesn't return personal emails or phone numbers. For LinkedIn profile data (experience, education, skills), use Minerva `/api/minerva/enrich` instead.\n\n## POST /api/clado/contacts-enrich\nEnrich contact information from LinkedIn URL, email, or phone number. Must provide exactly one of: linkedin_url, email, or phone.\nPrice: $0.20 per request\n\nExample:\n```json\n{\n  \"linkedin_url\": \"https://www.linkedin.com/in/satyanadella\"\n}\n```\n\n---\n\n# Serper API (Google Search)\n\n## POST /api/serper/news\nGoogle News search via Serper.dev.\nPrice: $0.04 per request\n\nExample:\n```json\n{\n  \"q\": \"OpenAI funding\",\n  \"num\": 10,\n  \"gl\": \"us\",\n  \"hl\": \"en\"\n}\n```\n\n---\n\n## POST /api/serper/shopping\nGoogle Shopping search via Serper.dev.\nPrice: $0.04 per request\n\nExample:\n```json\n{\n  \"q\": \"wireless earbuds\",\n  \"num\": 10,\n  \"gl\": \"us\",\n  \"hl\": \"en\"\n}\n```\n\n---\n\n## POST /api/serper/images\nGoogle Images search via Serper.dev. Generic public image discovery — products, places, screenshots, anything visual. For headshots/profile photos prefer `/api/serper/people-image-search`, which is tuned for that use case.\nPrice: $0.04 per request\n\nExample:\n```json\n{\n  \"q\": \"eiffel tower at night\",\n  \"num\": 10,\n  \"gl\": \"us\",\n  \"hl\": \"en\"\n}\n```\n\n---\n\n## POST /api/serper/people-image-search\nGoogle Images search tuned for finding a specific person — headshot/profile-photo candidates when LinkedIn/profile-photo APIs return null or a default avatar. Same backend as `/api/serper/images` but with calling guidance below.\nPrice: $0.04 per request\n\nHeadshot search guidance:\n- Resolve identity before ranking images when the person is ambiguous. Use Apollo, Exa LinkedIn profile search, or Minerva to confirm the profile slug, company, and title; do not rely on name alone.\n- LinkedIn profile photos may be limited to connections, a broader network, or LinkedIn members only. Only public photos are reliably indexable by Google. If a scraper returns `default_avatar: true` or a placeholder, use public non-LinkedIn sources tied to the confirmed identity.\n- If the first image search fails, research the confirmed profile for other disambiguating terms, such as school, city, past employers, projects, or personal sites, then retry Google Images with those terms.\n- Query syntax matters. Start with exact-name and company terms, for example: `\"Ryan Sproule\" \"Merit Systems\" LinkedIn headshot` or `\"Mason Hall\" \"Merit Systems\" profile photo`.\n- Use `num: 5-10`, `gl: \"us\"`, and `hl: \"en\"` for US business profiles unless the user gives another locale.\n- Prefer candidates whose result title/source page matches the person and company, from credible sources such as LinkedIn, the person's own website, company/team pages, RootData, Crunchbase, or news profiles.\n- Prefer square-ish, high-resolution human headshots. Reject obvious logos, default avatars, LinkedIn `videocover`, `feedshare`, cover/banner/background images, and images where the result title points to another person.\n- If no single result is clearly correct, return the top candidates with source URLs and explain the uncertainty.\n\nExample:\n```json\n{\n  \"q\": \"\\\"Ryan Sproule\\\" \\\"Merit Systems\\\" LinkedIn headshot\",\n  \"num\": 10,\n  \"gl\": \"us\",\n  \"hl\": \"en\"\n}\n```\n\n---\n\n## POST /api/serper/lens\nGoogle Lens reverse image search via Serper.dev. Pass a public image URL and get visually similar pages, products, and sources.\nPrice: $0.20 per request\n\nExample:\n```json\n{\n  \"url\": \"https://example.com/photo.jpg\",\n  \"gl\": \"us\",\n  \"hl\": \"en\"\n}\n```\n\n---\n\n# Whitepages API (People & Property Search)\n\n## POST /api/whitepages/person-search\nSearch for people by name, phone number, or address.\nPrice: $0.44 per request\n\nExample:\n```json\n{\n  \"first_name\": \"John\",\n  \"last_name\": \"Smith\",\n  \"state_code\": \"CA\"\n}\n```\n\n---\n\n## POST /api/whitepages/property-search\nGet property ownership, resident, and property details by address.\nPrice: $0.44 per request\n\nIMPORTANT: The state parameter is named `state_code`, NOT `state`. You must use the field name `state_code` with a two-letter state abbreviation (e.g., \"CA\", \"NY\", \"TX\"). Using `state` instead of `state_code` will result in the field being ignored.\n\nExample:\n```json\n{\n  \"street\": \"123 Main St\",\n  \"city\": \"San Francisco\",\n  \"state_code\": \"CA\"\n}\n```\n\nWRONG (will not work):\n```json\n{\n  \"street\": \"123 Main St\",\n  \"city\": \"San Francisco\",\n  \"state\": \"CA\"\n}\n```\n\n---\n\n# Reddit API\n\nIMPORTANT - Two-step pattern for Reddit research:\n1. Use /api/reddit/search to find relevant posts. Responses are lightweight — selftext is truncated to 500 chars.\n   Posts with `selftextTruncated: true` have more content available.\n2. For any post where you need the full text or comments, call /api/reddit/post-comments with the post's permalink.\n   This returns the complete untruncated selftext plus all comments.\n\nThis pattern keeps search results small (< 2KB for 10 posts) while letting you drill into specific posts when needed.\n\n## POST /api/reddit/search\nSearch Reddit posts by query. Returns truncated previews for efficient browsing.\nPrice: $0.02 per request\n\nExample:\n```json\n{\n  \"query\": \"AI agents\",\n  \"sort\": \"top\",\n  \"timeframe\": \"week\",\n  \"maxResults\": 10\n}\n```\n\n---\n\n## POST /api/reddit/post-comments\nGet a Reddit post's full details and comments. Use this to get untruncated selftext and discussion for posts found via search.\nPrice: $0.02 per request\n\nExample:\n```json\n{\n  \"url\": \"https://www.reddit.com/r/AskReddit/comments/abc123/example_post\"\n}\n```\n\n---\n\n# Hunter API (Email Verification)\n\n## POST /api/hunter/email-verifier\nVerify email deliverability via Hunter.io.\nPrice: $0.03 per request\n\nExample:\n```json\n{\n  \"email\": \"test@stripe.com\"\n}\n```\n\n---\n\n# Influencer API (Social Media Influencer Enrichment)\n\nThe Influencer API helps you enrich social media influencer profiles across multiple platforms (Instagram, TikTok, YouTube, Facebook). Use this for influencer marketing research and social media contact enrichment.\n\n## POST /api/influencer/enrich-by-email\nFind social media profiles associated with an email address.\nPrice: $0.40 per request\n\nExample:\n```json\n{\n  \"email\": \"creator@example.com\",\n  \"platform\": \"instagram\",\n  \"enrichment_mode\": \"enhanced\"\n}\n```\n\n---\n\n## POST /api/influencer/enrich-by-social\nEnrich a social media profile with additional data including contact info.\nPrice: $0.40 per request\n\nExample:\n```json\n{\n  \"platform\": \"instagram\",\n  \"username\": \"example_creator\",\n  \"enrichment_mode\": \"enhanced\",\n  \"email_required\": \"must_have\"\n}\n```\n\n# Cloudflare Browser Rendering API (Website Crawling)\n\nIMPORTANT - Two-step async pattern for Cloudflare crawl:\nThe crawl endpoint is long-running (up to ~2 minutes). It uses an async pattern:\n1. POST /api/cloudflare/crawl — pays and starts the crawl, returns a signed JWT token (202 response)\n2. GET /api/cloudflare/jobs?token=<jwt> — SIWX-authenticated (free), poll until job is complete\n\nPoll every 3–5 seconds. The job typically completes in 30–120 seconds depending on site size and render mode.\n\n## POST /api/cloudflare/crawl\nStart a website crawl. Returns a JWT token to poll for results.\nPrice: $0.10 per crawl job\n\nParameters:\n- `url` (string, required) — starting URL to crawl\n- `limit` (number, default 10, max 25) — maximum pages to crawl\n- `depth` (number, default 1, max 3) — maximum link depth from starting URL\n- `formats` (array, default [\"markdown\"]) — response formats: \"html\", \"markdown\", \"json\"\n- `render` (boolean, default false) — execute JavaScript when crawling (slower, costs more)\n- `source` (string, optional) — URL discovery: \"all\", \"sitemaps\", or \"links\"\n- `options` (object, optional) — crawl scope:\n  - `includeExternalLinks` (boolean) — follow links to external domains\n  - `includeSubdomains` (boolean) — follow links to subdomains\n  - `includePatterns` (string[]) — wildcard patterns for URLs to include\n  - `excludePatterns` (string[]) — wildcard patterns for URLs to exclude (higher priority)\n\nExample:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"limit\": 5,\n  \"depth\": 1,\n  \"formats\": [\"markdown\"]\n}\n```\n\nResponse (202):\n```json\n{ \"token\": \"<signed-jwt>\" }\n```\n\n---\n\n## GET /api/cloudflare/jobs?token=<jwt>\nPoll crawl job status. Requires SIWX wallet authentication (same wallet that paid). Free — no x402/MPP payment.\n\nUse `mcp__agentcash__fetch_with_auth` (not `fetch`) for this endpoint.\n\nResponse shape (Cloudflare's result returned directly):\n```json\n{\n  \"id\": \"<jobId>\",\n  \"status\": \"<cf-status-string>\",\n  \"records\": [\n    {\n      \"url\": \"https://example.com/page\",\n      \"status\": \"completed\",\n      \"markdown\": \"...\",\n      \"metadata\": { \"status\": 200, \"url\": \"...\", \"title\": \"...\" }\n    }\n  ],\n  \"total\": 10,\n  \"finished\": 8,\n  \"skipped\": 2,\n  \"browserSecondsUsed\": 45.2,\n  \"cursor\": \"...\"\n}\n```\n\nPage `status` values: `queued` | `completed` | `errored` | `disallowed` | `skipped` | `cancelled`\n\nTo determine completion, check `result.finished + result.skipped >= result.total` or poll until no pages remain `queued`.\n\nFull polling workflow:\n```\n1. token = fetch POST /api/cloudflare/crawl  →  response.token\n2. loop:\n     result = fetch_with_auth GET /api/cloudflare/jobs?token={token}\n     if result.finished + result.skipped >= result.total → done, use result.records\n     else → wait 3-5s, repeat\n```\n\n---\n\n# Minerva API (Person Identity & Enrichment)\n\nMinerva is a consumer identity graph. Use it to resolve person identities to unique Minerva PIDs, enrich profiles with demographics/work/contact data, validate emails, and infer country from contact signals.\n\n**Recommended workflow:**\n1. Use `/api/minerva/resolve` to match a person and get their Minerva PID + LinkedIn URL\n2. Use `/api/minerva/enrich` with the returned PID for instant, comprehensive enrichment\n3. Use `/api/minerva/validate-emails` to pre-screen emails before resolve/enrich\n\n**Minerva vs Apollo:** Minerva excels at consumer profiles (demographics, income/wealth estimates, address history, life events). Apollo excels at B2B/professional data. Use Minerva when you need personal contact info, financial signals, or household data.\n\n## POST /api/minerva/resolve\nResolve person identity to a Minerva PID and LinkedIn URL. Supports fuzzy matching (name + contact info) and reverse lookup (email or phone only, no name required).\nPrice: $0.02 per request\n\nStandard fuzzy match example:\n```json\n{\n  \"records\": [\n    {\n      \"record_id\": \"user_001\",\n      \"first_name\": \"John\",\n      \"last_name\": \"Smith\",\n      \"emails\": [\"[email protected]\"]\n    }\n  ]\n}\n```\n\nReverse lookup (email only, no name needed):\n```json\n{\n  \"records\": [{ \"record_id\": \"user_002\", \"emails\": [\"[email protected]\"] }]\n}\n```\n\nUse `match_condition_fields: [\"linkedin_url\"]` to only return matches that have a LinkedIn profile.\n\n---\n\n## POST /api/minerva/enrich\nEnrich person records with demographics, work history, education, contact info (emails + phones), address history, financial signals (income/wealth range), relatives, and social profiles.\nPrice: $0.05 per request\n\nThree lookup modes — by Minerva PID (fastest), by LinkedIn URL, or by name/email/phone:\n```json\n{\n  \"records\": [\n    { \"record_id\": \"user_001\", \"minerva_pid\": \"p-a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6\" },\n    { \"record_id\": \"user_002\", \"linkedin_url\": \"https://www.linkedin.com/in/janedoe\" },\n    { \"record_id\": \"user_003\", \"first_name\": \"John\", \"last_name\": \"Smith\", \"emails\": [\"[email protected]\"] }\n  ],\n  \"return_fields\": [\"full_name\", \"personal_emails\", \"phones\", \"work_experience\"]\n}\n```\n\nUse `return_fields` to limit response size. Use `match_condition_fields` (e.g., `[\"email\", \"phone\"]`) to only return matches that have specific data.\n\n---\n\n## POST /api/minerva/validate-emails\nCheck if email addresses exist in the Minerva database. Returns validation status and last-seen timestamp. Use before resolve/enrich to pre-screen lists.\nPrice: $0.01 per request\n\n```json\n{\n  \"records\": [\"[email protected]\", \"[email protected]\"]\n}\n```\n\n---\n\n# Common Features\n\n## Field Filtering\nMost endpoints support an `excludeFields` parameter to reduce response size by omitting specific fields. Pass an array of dot-notation field paths to exclude. Google Maps endpoints default to excluding \"photos\" - pass an empty array to include them.\n\n## Pagination\n- Apollo search endpoints support pagination via `page` and `per_page` parameters.\n- Google Maps search endpoints support pagination via `pageToken` (returned as `nextPageToken` in responses).\n- Exa search supports `numResults` up to 100.\n\n## Error Handling\nAll endpoints return standard HTTP status codes. Payment-required responses (402) include x402/MPP payment instructions in headers. On server errors (5xx), payments are not settled.\n\n---\n\n# Pricing Summary\n\n| Endpoint | Price |\n|----------|-------|\n| Google Maps Text Search (Full) | $0.08 |\n| Google Maps Text Search (Partial) | $0.02 |\n| Google Maps Nearby Search (Full) | $0.08 |\n| Google Maps Nearby Search (Partial) | $0.02 |\n| Google Maps Place Details (Full) | $0.05 |\n| Google Maps Place Details (Partial) | $0.02 |\n| Google Solar Building Insights | $0.02 |\n| Google Solar Data Layers | $0.08 |\n| Google Aerial View Lookup Video | $0.01 |\n| Google Aerial View Render Video | $0.01 |\n| Apollo People Search | $0.02 |\n| Apollo Org Search | $0.02 |\n| Apollo People Enrich | $0.0495 |\n| Apollo Org Enrich | $0.0495 |\n| Exa Search | $0.01 |\n| Exa Find Similar | $0.01 |\n| Exa Contents | $0.002 |\n| Exa Answer | $0.01 |\n| Firecrawl Scrape | $0.0126 |\n| Firecrawl Search | $0.0252 |\n| Clado Contacts Enrich | $0.20 |\n| Serper News | $0.04 |\n| Serper Shopping | $0.04 |\n| Serper Images | $0.04 |\n| Reddit Search | $0.02 |\n| Reddit Post Comments | $0.02 |\n| Whitepages Person Search | $0.44 |\n| Whitepages Property Search | $0.44 |\n| Hunter Email Verifier | $0.03 |\n| Influencer Enrich by Email | $0.40 |\n| Influencer Enrich by Social | $0.40 |\n| Minerva Resolve | $0.02 |\n| Minerva Enrich | $0.05 |\n| Minerva Validate Emails | $0.01 |\n| Cloudflare Crawl (start) | $0.10 |\n| Cloudflare Jobs (poll) | Free (SIWX) |\n"}