{"openapi":"3.1.0","info":{"title":"StableFace","description":"Pay-per-request reverse face search powered by FaceCheck.id. Find every page on the web that contains a given face.","version":"1.0.0","x-guidance":"# StableFace API Reference\n\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://stableface.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://stableface.dev\")`.\n2. For selected POST endpoints, call `mcp__agentcash__check_endpoint_schema` before first fetch.\n3. Execute with `mcp__agentcash__fetch`.\n\n---\n\n# FaceCheck API (Reverse Face Search)\n\nPowered by [FaceCheck.id](https://facecheck.id). Upload a photo, get back pages across the web that contain the same face, ranked by similarity.\n\n## POST /api/facecheck/search\n\nReverse face search. Provide an image (public http(s) URL or a data URL with inline base64 bytes); the server hands it off to FaceCheck, polls until the search completes, and returns the top matches.\n\nPrice: $0.20 per request\n\nBody:\n- `url` (string, required) — image containing a face. Either a public http(s) URL or a data URL (`data:image/png;base64,...`) when you want to send bytes directly without hosting the image first.\n- `limit` (number, optional, default 20, max 200) — maximum matches to return.\n- `minScore` (number, optional, default 0) — drop matches below this score. 85+ is typically a strong match.\n- `includeThumbnails` (boolean, optional, default false) — include base64 thumbnail crops. Off by default; thumbnails dominate response size and are rarely useful to agents. Turn on only when you need to display the matched face.\n- `testingMode` (boolean, optional, default false) — run in FaceCheck testing mode. Only scans ~100k faces and does not consume credits, but results are not meaningful. Use for integration tests.\n\nExamples:\n```json\n{\n  \"url\": \"https://example.com/photo.jpg\",\n  \"limit\": 10,\n  \"minScore\": 85\n}\n```\n\n```json\n{\n  \"url\": \"data:image/png;base64,iVBORw0KGgoAAA...\",\n  \"limit\": 10,\n  \"minScore\": 85\n}\n```\n\nResponse:\n```json\n{\n  \"id_search\": \"abc123...\",\n  \"items\": [\n    { \"score\": 92, \"url\": \"https://example.com/page-with-this-face\" }\n  ]\n}\n```\n\nEach `item.score` is 0–100; higher means closer match. `item.url` is the page where the face was found — scrape it (e.g. via `/api/firecrawl/scrape` on stableenrich.dev) to extract the person's name from the page title or OG tags.\n\n### Agent workflow for picture → name\n\n1. Call `/api/facecheck/search` with `limit: 5, minScore: 85`.\n2. For each returned URL, scrape to extract the person's name (LinkedIn titles, article bylines, etc.).\n3. Cross-check names across the top results; consensus among 2+ high-score hits is strong signal.\n\n---\n\n# Pricing Summary\n\n| Endpoint | Price |\n|----------|-------|\n| FaceCheck Search | $0.20 |\n","guidance":"# StableFace API Reference\n\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://stableface.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://stableface.dev\")`.\n2. For selected POST endpoints, call `mcp__agentcash__check_endpoint_schema` before first fetch.\n3. Execute with `mcp__agentcash__fetch`.\n\n---\n\n# FaceCheck API (Reverse Face Search)\n\nPowered by [FaceCheck.id](https://facecheck.id). Upload a photo, get back pages across the web that contain the same face, ranked by similarity.\n\n## POST /api/facecheck/search\n\nReverse face search. Provide an image (public http(s) URL or a data URL with inline base64 bytes); the server hands it off to FaceCheck, polls until the search completes, and returns the top matches.\n\nPrice: $0.20 per request\n\nBody:\n- `url` (string, required) — image containing a face. Either a public http(s) URL or a data URL (`data:image/png;base64,...`) when you want to send bytes directly without hosting the image first.\n- `limit` (number, optional, default 20, max 200) — maximum matches to return.\n- `minScore` (number, optional, default 0) — drop matches below this score. 85+ is typically a strong match.\n- `includeThumbnails` (boolean, optional, default false) — include base64 thumbnail crops. Off by default; thumbnails dominate response size and are rarely useful to agents. Turn on only when you need to display the matched face.\n- `testingMode` (boolean, optional, default false) — run in FaceCheck testing mode. Only scans ~100k faces and does not consume credits, but results are not meaningful. Use for integration tests.\n\nExamples:\n```json\n{\n  \"url\": \"https://example.com/photo.jpg\",\n  \"limit\": 10,\n  \"minScore\": 85\n}\n```\n\n```json\n{\n  \"url\": \"data:image/png;base64,iVBORw0KGgoAAA...\",\n  \"limit\": 10,\n  \"minScore\": 85\n}\n```\n\nResponse:\n```json\n{\n  \"id_search\": \"abc123...\",\n  \"items\": [\n    { \"score\": 92, \"url\": \"https://example.com/page-with-this-face\" }\n  ]\n}\n```\n\nEach `item.score` is 0–100; higher means closer match. `item.url` is the page where the face was found — scrape it (e.g. via `/api/firecrawl/scrape` on stableenrich.dev) to extract the person's name from the page title or OG tags.\n\n### Agent workflow for picture → name\n\n1. Call `/api/facecheck/search` with `limit: 5, minScore: 85`.\n2. For each returned URL, scrape to extract the person's name (LinkedIn titles, article bylines, etc.).\n3. Cross-check names across the top results; consensus among 2+ high-score hits is strong signal.\n\n---\n\n# Pricing Summary\n\n| Endpoint | Price |\n|----------|-------|\n| FaceCheck Search | $0.20 |\n","contact":{"name":"Merit Systems","url":"https://stableface.dev"}},"servers":[{"url":"https://stableface.dev"}],"tags":[{"name":"Facecheck"}],"paths":{"/api/facecheck/search":{"post":{"operationId":"facecheck_search","summary":"FaceCheck.id reverse face search — upload image URL, get pages across the web containing that face","tags":["Facecheck"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.200000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Image containing a face. Accepts a public http(s) URL or a data URL (data:image/...;base64,...) when you want to send bytes directly without hosting."},"limit":{"default":20,"description":"Maximum number of matches to return, ranked by score descending","type":"integer","minimum":1,"maximum":200},"minScore":{"default":0,"description":"Drop matches with score below this threshold. 85+ is typically a strong match.","type":"number","minimum":0,"maximum":100},"includeThumbnails":{"default":false,"description":"Include a base64 data-URI thumbnail of each matched face. Off by default since thumbnails dominate response size and are rarely useful to agents.","type":"boolean"},"testingMode":{"default":false,"description":"Run in FaceCheck testing mode. Only scans ~100k faces, no credits consumed, but results are not meaningful. Use for integration tests only.","type":"boolean"}},"required":["url"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id_search":{"type":"string","description":"FaceCheck search ID"},"items":{"type":"array","items":{"type":"object","properties":{"score":{"type":"number","description":"Match confidence, 0-100"},"url":{"type":"string","description":"Page URL where the face was found"},"base64":{"description":"Data-URI thumbnail of the matching face crop. Present only when includeThumbnails=true.","type":"string"}},"required":["score","url"],"additionalProperties":{}},"description":"Matching pages ranked by score descending"}},"required":["id_search","items"],"additionalProperties":false}}}},"402":{"description":"Payment Required"}}}}}}