{"openapi":"3.1.0","info":{"title":"DeepTrawler","version":"1-a2199f429758","description":"Live, pay-per-call search over the deep conversation layer across social and messaging platforms. No API keys, no signup; pay per request via x402 or MPP.","x-guidance":"One platform per call. Endpoint paths are platform-owned rather than universal. Discover the current platforms, paths, controls, and filters at GET /v1/platforms. Search endpoints accept exactly one of q or query. Paid endpoints return 402 with payment requirements; validation failures cost nothing.","contact":{"name":"Contact us","url":"https://t.me/deeptrawler?direct"}},"paths":{"/v1/telegram/search":{"get":{"operationId":"telegramSearch","summary":"Search Telegram messages globally or within chats (paid)","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"parameters":[{"name":"q","in":"query","required":false,"description":"Phrase search query (alias: query). Provide exactly one of q / query.","schema":{"type":"string"}},{"name":"query","in":"query","required":false,"description":"Phrase search query (alias: q). Provide exactly one of query / q.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Lower time bound. ISO-8601 (2026-06-01T00:00:00Z) or relative (now-7d, now-24h).","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"Upper time bound (default now). ISO-8601 (2026-06-01T00:00:00Z) or relative (now-7d, now-24h).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"description":"Opaque continuation token from a previous response's next_cursor.","schema":{"type":"string"}},{"name":"filter","in":"query","required":false,"style":"deepObject","explode":true,"x-guidance":"Field filters use filter[field][operator]=value. Scalar operators take one value. List operators use [] (for example filter[field][in][]=a&filter[field][in][]=b). Values are opaque.","schema":{"type":"object","properties":{"chat":{"type":"string","description":"Shorthand uses eq; supported operators: eq, in."},"message_type":{"type":"string","enum":["any","photo","video","photo_video","document","url","gif","voice","music","round_video","geo","contact","poll","pinned"],"description":"Shorthand uses eq; supported operators: eq."}}}}],"responses":{"200":{"description":"Matching results.","content":{"application/json":{"schema":{"type":"object","required":["platform","query","results","next_cursor","meta"],"properties":{"platform":{"type":"string","enum":["telegram"]},"query":{"type":"string"},"results":{"type":"array","items":{"type":"object","required":["id","message_id","text","chat","url","timestamp","message_type","views","forwards"],"properties":{"id":{"type":"string","description":"\"{chat_id}:{message_id}\""},"message_id":{"type":"integer"},"text":{"type":"string"},"chat":{"type":"object","required":["id","username","title","verified"],"properties":{"id":{"type":"string"},"username":{"type":["string","null"]},"title":{"type":"string"},"verified":{"type":"boolean"}}},"url":{"type":["string","null"]},"timestamp":{"type":"string","description":"ISO-8601"},"message_type":{"type":["string","null"]},"views":{"type":["integer","null"]},"forwards":{"type":["integer","null"]}}}},"next_cursor":{"type":["string","null"],"description":"null when the platform provides no continuation."},"meta":{"type":"object","required":["order"],"properties":{"order":{"type":"string"}}}}}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Validation error (charged nothing). Carries a `docs` URL.","content":{"application/json":{"schema":{"type":"object","required":["error","docs"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"docs":{"type":"string","description":"URL to the current machine-readable contract."}}}}}},"402":{"description":"Payment Required — pay via x402 or MPP and retry.","headers":{"WWW-Authenticate":{"description":"MPP Payment challenge. Its request payload identifies the destination, currency, and amount.","schema":{"type":"string","pattern":"^Payment\\s"}}}},"429":{"description":"Rate limited upstream; see Retry-After."},"500":{"description":"Internal server error."},"502":{"description":"Upstream platform error."}}}},"/v1/telegram/search/public-posts":{"get":{"operationId":"telegramSearchPublicPosts","summary":"Search posts across public Telegram channels (paid)","description":"Accepts only q/query, limit, and cursor. Other controls and all filters return 400.","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"parameters":[{"name":"q","in":"query","required":false,"description":"Phrase search query (alias: query). Provide exactly one of q / query.","schema":{"type":"string"}},{"name":"query","in":"query","required":false,"description":"Phrase search query (alias: q). Provide exactly one of query / q.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"description":"Opaque continuation token from a previous response's next_cursor.","schema":{"type":"string"}}],"responses":{"200":{"description":"Matching results.","content":{"application/json":{"schema":{"type":"object","required":["platform","query","results","next_cursor","meta"],"properties":{"platform":{"type":"string","enum":["telegram"]},"query":{"type":"string"},"results":{"type":"array","items":{"type":"object","required":["id","message_id","text","chat","url","timestamp","message_type","views","forwards"],"properties":{"id":{"type":"string","description":"\"{chat_id}:{message_id}\""},"message_id":{"type":"integer"},"text":{"type":"string"},"chat":{"type":"object","required":["id","username","title","verified"],"properties":{"id":{"type":"string"},"username":{"type":["string","null"]},"title":{"type":"string"},"verified":{"type":"boolean"}}},"url":{"type":["string","null"]},"timestamp":{"type":"string","description":"ISO-8601"},"message_type":{"type":["string","null"]},"views":{"type":["integer","null"]},"forwards":{"type":["integer","null"]}}}},"next_cursor":{"type":["string","null"],"description":"null when the platform provides no continuation."},"meta":{"type":"object","required":["order"],"properties":{"order":{"type":"string"}}}}}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Validation error (charged nothing). Carries a `docs` URL.","content":{"application/json":{"schema":{"type":"object","required":["error","docs"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"docs":{"type":"string","description":"URL to the current machine-readable contract."}}}}}},"402":{"description":"Payment Required — pay via x402 or MPP and retry.","headers":{"WWW-Authenticate":{"description":"MPP Payment challenge. Its request payload identifies the destination, currency, and amount.","schema":{"type":"string","pattern":"^Payment\\s"}}}},"429":{"description":"Rate limited upstream; see Retry-After."},"500":{"description":"Internal server error."},"502":{"description":"Upstream platform error."}}}},"/v1/footprint/age":{"get":{"operationId":"footprintAge","summary":"When a subject first appeared online and whether the presence is continuous (paid)","description":"Returns the presence block alone — the independent dated anchors, continuous-since month, web capture density, gap years and disagreement warnings. Free sources only; the subject travels in q/query.","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"parameters":[{"name":"q","in":"query","required":false,"description":"Phrase search query (alias: query). Provide exactly one of q / query.","schema":{"type":"string"}},{"name":"query","in":"query","required":false,"description":"Phrase search query (alias: q). Provide exactly one of query / q.","schema":{"type":"string"}},{"name":"filter","in":"query","required":false,"style":"deepObject","explode":true,"x-guidance":"Field filters use filter[field][operator]=value. Scalar operators take one value. List operators use [] (for example filter[field][in][]=a&filter[field][in][]=b). Values are opaque.","schema":{"type":"object","properties":{"type":{"type":"string","enum":["brand","person"],"description":"Shorthand uses eq; supported operators: eq."},"lang":{"type":"string","description":"Shorthand uses eq; supported operators: eq."}}}}],"responses":{"200":{"description":"The composed report; every key present, absent values explicit null.","content":{"application/json":{"schema":{"type":"object","required":["subject","presence","sources","cost"],"properties":{"subject":{"type":"object","required":["input","kind","resolved","warnings"],"properties":{"input":{"type":"string","description":"The q value exactly as received."},"kind":{"type":"string","enum":["brand","person"]},"resolved":{"type":"object","required":["name","domain","handles","learned","confidence"],"properties":{"name":{"type":["string","null"]},"domain":{"type":["string","null"]},"handles":{"type":"object","required":["x","github","telegram"],"properties":{"x":{"type":["string","null"]},"github":{"type":["string","null"]},"telegram":{"type":["string","null"]}}},"learned":{"type":"array","description":"Identifiers a third party published rather than the caller supplying them. They never raise confidence on their own.","items":{"type":"string","enum":["domain","x","github","telegram"]}},"confidence":{"type":"string","enum":["high","medium","low"],"description":"Agreement between the identity anchors, not a model opinion."}}},"warnings":{"type":"array","description":"What this run could not support. no_owned_anchor means a bare name: nothing was searchable, so no source was consulted.","items":{"type":"string","enum":["no_owned_anchor"]}}}},"presence":{"type":"object","required":["continuous_since","anchors","web_capture_density","gap_years","warnings"],"properties":{"continuous_since":{"type":["string","null"],"description":"YYYY-MM of continuous presence under the current identity; null when the anchors disagree."},"anchors":{"type":"array","description":"The independent dated anchors the figure was derived from.","items":{"type":"object","required":["source","date","note"],"properties":{"source":{"type":"string","enum":["x_account","x_first_mention","wayback","rdap","domain_age","github","telegram"]},"date":{"type":"string","description":"YYYY-MM-DD, or YYYY-MM when the day is unknown."},"note":{"type":["string","null"]}}}},"web_capture_density":{"type":"array","description":"Wayback captures per calendar year, ascending.","items":{"type":"object","required":["year","captures"],"properties":{"year":{"type":"integer"},"captures":{"type":"integer"}}}},"gap_years":{"type":"array","items":{"type":"integer"},"description":"Years inside the capture range with no captures."},"warnings":{"type":"array","items":{"type":"string","enum":["domain_predates_identity","identity_predates_domain","anchors_disagree","capture_gap_detected","insufficient_anchors","undated"]}}}},"sources":{"type":"array","description":"One line per source consulted, degraded ones included.","items":{"type":"object","required":["id","status","calls","degraded_calls","cost_usd","latency_ms","note"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["ok","empty","inconsistent","unavailable"],"description":"inconsistent marks a source that contradicts an independent count; it is never rendered as a finding."},"calls":{"type":"integer"},"degraded_calls":{"type":"integer","description":"Calls to this source that failed or contradicted themselves. A line with degraded_calls > 0 is partial evidence, whatever its status says."},"cost_usd":{"type":"number","description":"The real charge, not the rounded advertised price string."},"latency_ms":{"type":"integer"},"note":{"type":["string","null"]}}}},"cost":{"type":"object","required":["usd","reconciled","note"],"properties":{"usd":{"type":"number","description":"What this report committed: settled charges plus money held by a paid call still in flight when it was assembled."},"reconciled":{"type":"boolean","description":"true only when every per-source figure is a real settled charge and the report stayed inside its budget cap."},"note":{"type":["string","null"],"description":"Why the figures are not reconciled; null when they are."}}}}},"example":{"subject":{"input":"polymarket.com","kind":"brand","resolved":{"name":"Polymarket","domain":"polymarket.com","handles":{"x":"Polymarket","github":"Polymarket","telegram":null},"learned":[],"confidence":"high"},"warnings":[]},"presence":{"continuous_since":"2020-05","anchors":[{"source":"x_account","date":"2020-05-15","note":"account created"},{"source":"rdap","date":"2003-08-27","note":"domain registered"}],"web_capture_density":[{"year":2020,"captures":5},{"year":2021,"captures":12}],"gap_years":[2002,2006,2007],"warnings":["domain_predates_identity"]},"sources":[{"id":"x","status":"ok","calls":11,"degraded_calls":0,"cost_usd":0,"latency_ms":27400,"note":null},{"id":"wayback","status":"ok","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":18200,"note":null},{"id":"rdap","status":"ok","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":210,"note":null}],"cost":{"usd":0,"reconciled":true,"note":null}}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Validation error (charged nothing). Carries a `docs` URL.","content":{"application/json":{"schema":{"type":"object","required":["error","docs"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"docs":{"type":"string","description":"URL to the current machine-readable contract."}}}}}},"402":{"description":"Payment Required — pay via x402 or MPP and retry.","headers":{"WWW-Authenticate":{"description":"MPP Payment challenge. Its request payload identifies the destination, currency, and amount.","schema":{"type":"string","pattern":"^Payment\\s"}}}},"429":{"description":"Rate limited upstream; see Retry-After."},"500":{"description":"Internal server error."},"502":{"description":"Upstream platform error."}}}},"/v1/footprint/mentions":{"get":{"operationId":"footprintMentions","summary":"On which surfaces a subject appears at all, with a link and a first-seen date per surface (paid)","description":"A shallow sweep, not a deep trawl: each surface is checked once and reported present or absent with its link, its age and everything that cross-references it. An empty sweep establishes only that the listed surfaces carried nothing — it is not a verdict on the subject, and a surface no source could answer for is omitted rather than reported absent. The subject travels in q/query.","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"parameters":[{"name":"q","in":"query","required":false,"description":"Phrase search query (alias: query). Provide exactly one of q / query.","schema":{"type":"string"}},{"name":"query","in":"query","required":false,"description":"Phrase search query (alias: q). Provide exactly one of query / q.","schema":{"type":"string"}},{"name":"filter","in":"query","required":false,"style":"deepObject","explode":true,"x-guidance":"Field filters use filter[field][operator]=value. Scalar operators take one value. List operators use [] (for example filter[field][in][]=a&filter[field][in][]=b). Values are opaque.","schema":{"type":"object","properties":{"type":{"type":"string","enum":["brand","person"],"description":"Shorthand uses eq; supported operators: eq."},"lang":{"type":"string","description":"Shorthand uses eq; supported operators: eq."}}}}],"responses":{"200":{"description":"The composed report; every key present, absent values explicit null.","content":{"application/json":{"schema":{"type":"object","required":["subject","breadth","sources","cost"],"properties":{"subject":{"type":"object","required":["input","kind","resolved","warnings"],"properties":{"input":{"type":"string","description":"The q value exactly as received."},"kind":{"type":"string","enum":["brand","person"]},"resolved":{"type":"object","required":["name","domain","handles","learned","confidence"],"properties":{"name":{"type":["string","null"]},"domain":{"type":["string","null"]},"handles":{"type":"object","required":["x","github","telegram"],"properties":{"x":{"type":["string","null"]},"github":{"type":["string","null"]},"telegram":{"type":["string","null"]}}},"learned":{"type":"array","description":"Identifiers a third party published rather than the caller supplying them. They never raise confidence on their own.","items":{"type":"string","enum":["domain","x","github","telegram"]}},"confidence":{"type":"string","enum":["high","medium","low"],"description":"Agreement between the identity anchors, not a model opinion."}}},"warnings":{"type":"array","description":"What this run could not support. no_owned_anchor means a bare name: nothing was searchable, so no source was consulted.","items":{"type":"string","enum":["no_owned_anchor"]}}}},"breadth":{"type":"object","required":["surfaces","links","surfaces_checked","surfaces_present","surfaces_attested","mutual_pairs","median_surface_age_days","code","assessment","reasons"],"properties":{"surfaces":{"type":"array","description":"One entry per surface actually checked. present:false means the surface was consulted and did not carry the subject; a surface nobody consulted is absent from the list entirely.","items":{"type":"object","required":["id","present","url","first_seen","age_days","attested_by"],"properties":{"id":{"type":"string","enum":["web","x","github","telegram","linkedin","crunchbase","news","directory"]},"present":{"type":"boolean"},"url":{"type":["string","null"]},"first_seen":{"type":["string","null"],"description":"YYYY-MM-DD the surface is first known to have existed."},"age_days":{"type":["integer","null"]},"attested_by":{"type":"array","description":"Surfaces publishing an identifier that resolves to this one. Empty means unattested, which is not corroboration.","items":{"type":"string","enum":["web","x","github","telegram","linkedin","crunchbase","news","directory"]}}}}},"links":{"type":"array","description":"The resolved cross-references, so every attestation can be checked by hand.","items":{"type":"object","required":["from","to","via"],"properties":{"from":{"type":"string","enum":["web","x","github","telegram","linkedin","crunchbase","news","directory"]},"to":{"type":"string","enum":["web","x","github","telegram","linkedin","crunchbase","news","directory"]},"via":{"type":"string","description":"The normalized identifier that resolved."}}}},"surfaces_checked":{"type":"integer"},"surfaces_present":{"type":"integer"},"surfaces_attested":{"type":"integer"},"mutual_pairs":{"type":"integer","description":"Unordered pairs pointing at each other — the expensive kind of cross-reference."},"median_surface_age_days":{"type":["integer","null"]},"code":{"type":["object","null"],"description":"null when no repository was consulted. Contributor count is farmed as routinely as stars, so the figure that carries signal is the top contributor's share.","required":["repo","unique_contributors","commits_sampled","top_contributor","top_contributor_share","truncated","concentration"],"properties":{"repo":{"type":"string","description":"owner/name, as GitHub spells it."},"unique_contributors":{"type":"integer"},"commits_sampled":{"type":"integer"},"top_contributor":{"type":["string","null"]},"top_contributor_share":{"type":["number","null"]},"truncated":{"type":"boolean","description":"true when the contributor page came back full, so the share is measured over the top page only."},"concentration":{"type":"string","enum":["distributed","concentrated","insufficient_data"]}}},"assessment":{"type":"string","enum":["corroborated","partial","unattested","insufficient_data"]},"reasons":{"type":"array","items":{"type":"string"},"description":"The arithmetic behind the assessment, in plain sentences."}}},"sources":{"type":"array","description":"One line per source consulted, degraded ones included.","items":{"type":"object","required":["id","status","calls","degraded_calls","cost_usd","latency_ms","note"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["ok","empty","inconsistent","unavailable"],"description":"inconsistent marks a source that contradicts an independent count; it is never rendered as a finding."},"calls":{"type":"integer"},"degraded_calls":{"type":"integer","description":"Calls to this source that failed or contradicted themselves. A line with degraded_calls > 0 is partial evidence, whatever its status says."},"cost_usd":{"type":"number","description":"The real charge, not the rounded advertised price string."},"latency_ms":{"type":"integer"},"note":{"type":["string","null"]}}}},"cost":{"type":"object","required":["usd","reconciled","note"],"properties":{"usd":{"type":"number","description":"What this report committed: settled charges plus money held by a paid call still in flight when it was assembled."},"reconciled":{"type":"boolean","description":"true only when every per-source figure is a real settled charge and the report stayed inside its budget cap."},"note":{"type":["string","null"],"description":"Why the figures are not reconciled; null when they are."}}}}},"example":{"subject":{"input":"polymarket.com","kind":"brand","resolved":{"name":"Polymarket","domain":"polymarket.com","handles":{"x":"Polymarket","github":"Polymarket","telegram":null},"learned":[],"confidence":"high"},"warnings":[]},"breadth":{"surfaces":[{"id":"web","present":true,"url":"polymarket.com","first_seen":"2001-11-30","age_days":8998,"attested_by":["x","github"]},{"id":"x","present":true,"url":"x.com/polymarket","first_seen":"2020-05-15","age_days":2267,"attested_by":["github"]},{"id":"github","present":true,"url":"github.com/polymarket","first_seen":"2017-09-05","age_days":3250,"attested_by":[]},{"id":"telegram","present":false,"url":null,"first_seen":null,"age_days":null,"attested_by":[]}],"links":[{"from":"github","to":"x","via":"x.com/polymarket"},{"from":"github","to":"web","via":"polymarket.com"},{"from":"x","to":"web","via":"polymarket.com"}],"surfaces_checked":4,"surfaces_present":3,"surfaces_attested":2,"mutual_pairs":0,"median_surface_age_days":3250,"code":null,"assessment":"partial","reasons":["no pair of surfaces names the other back, so every cross-reference rests on one side alone"]},"sources":[{"id":"x","status":"ok","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":640,"note":null},{"id":"wayback","status":"ok","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":18200,"note":null},{"id":"github","status":"ok","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":410,"note":null},{"id":"telegram","status":"empty","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":820,"note":"no Telegram message mentions polymarket.com"}],"cost":{"usd":0,"reconciled":true,"note":null}}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Validation error (charged nothing). Carries a `docs` URL.","content":{"application/json":{"schema":{"type":"object","required":["error","docs"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"docs":{"type":"string","description":"URL to the current machine-readable contract."}}}}}},"402":{"description":"Payment Required — pay via x402 or MPP and retry.","headers":{"WWW-Authenticate":{"description":"MPP Payment challenge. Its request payload identifies the destination, currency, and amount.","schema":{"type":"string","pattern":"^Payment\\s"}}}},"429":{"description":"Rate limited upstream; see Retry-After."},"500":{"description":"Internal server error."},"502":{"description":"Upstream platform error."}}}},"/v1/footprint/audience":{"get":{"operationId":"footprintAudience","summary":"Whether a subject's visible reputation is organic or manufactured (paid)","description":"Returns the audience block alone — author concentration and author account age, the two orthogonal axes, per platform. The subject travels in q/query; the sample is the full page the upstream returns, and no parameter narrows it.","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"parameters":[{"name":"q","in":"query","required":false,"description":"Phrase search query (alias: query). Provide exactly one of q / query.","schema":{"type":"string"}},{"name":"query","in":"query","required":false,"description":"Phrase search query (alias: q). Provide exactly one of query / q.","schema":{"type":"string"}},{"name":"filter","in":"query","required":false,"style":"deepObject","explode":true,"x-guidance":"Field filters use filter[field][operator]=value. Scalar operators take one value. List operators use [] (for example filter[field][in][]=a&filter[field][in][]=b). Values are opaque.","schema":{"type":"object","properties":{"type":{"type":"string","enum":["brand","person"],"description":"Shorthand uses eq; supported operators: eq."},"lang":{"type":"string","description":"Shorthand uses eq; supported operators: eq."}}}}],"responses":{"200":{"description":"The composed report; every key present, absent values explicit null.","content":{"application/json":{"schema":{"type":"object","required":["subject","audience","sources","cost"],"properties":{"subject":{"type":"object","required":["input","kind","resolved","warnings"],"properties":{"input":{"type":"string","description":"The q value exactly as received."},"kind":{"type":"string","enum":["brand","person"]},"resolved":{"type":"object","required":["name","domain","handles","learned","confidence"],"properties":{"name":{"type":["string","null"]},"domain":{"type":["string","null"]},"handles":{"type":"object","required":["x","github","telegram"],"properties":{"x":{"type":["string","null"]},"github":{"type":["string","null"]},"telegram":{"type":["string","null"]}}},"learned":{"type":"array","description":"Identifiers a third party published rather than the caller supplying them. They never raise confidence on their own.","items":{"type":"string","enum":["domain","x","github","telegram"]}},"confidence":{"type":"string","enum":["high","medium","low"],"description":"Agreement between the identity anchors, not a model opinion."}}},"warnings":{"type":"array","description":"What this run could not support. no_owned_anchor means a bare name: nothing was searchable, so no source was consulted.","items":{"type":"string","enum":["no_owned_anchor"]}}}},"audience":{"type":"object","required":["x","telegram","assessment","reasons"],"properties":{"x":{"type":["object","null"],"description":"null when X produced no usable sample.","required":["followers","listed","posts","listed_per_10k_followers","mentions_sampled","unique_authors","author_concentration","median_author_age_days","authors_younger_than_90d","median_author_followers","languages"],"properties":{"followers":{"type":["integer","null"]},"listed":{"type":["integer","null"]},"posts":{"type":["integer","null"]},"listed_per_10k_followers":{"type":["number","null"]},"mentions_sampled":{"type":"integer"},"unique_authors":{"type":"integer"},"author_concentration":{"type":["number","null"],"description":"unique_authors / mentions_sampled."},"median_author_age_days":{"type":["integer","null"]},"authors_younger_than_90d":{"type":["integer","null"]},"median_author_followers":{"type":["integer","null"]},"languages":{"type":"array","items":{"type":"string"}}}},"telegram":{"type":["object","null"],"description":"Telegram search yields chats, not authors, so concentration is measured over distinct chats.","required":["mentions_sampled","unique_chats","chat_concentration","verified_chats","median_chat_views","languages"],"properties":{"mentions_sampled":{"type":"integer"},"unique_chats":{"type":"integer"},"chat_concentration":{"type":["number","null"]},"verified_chats":{"type":["integer","null"]},"median_chat_views":{"type":["integer","null"]},"languages":{"type":"array","items":{"type":"string"}}}},"assessment":{"type":"string","enum":["organic","mixed","concentrated","insufficient_data"]},"reasons":{"type":"array","items":{"type":"string"},"description":"The arithmetic behind the assessment, in plain sentences."}}},"sources":{"type":"array","description":"One line per source consulted, degraded ones included.","items":{"type":"object","required":["id","status","calls","degraded_calls","cost_usd","latency_ms","note"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["ok","empty","inconsistent","unavailable"],"description":"inconsistent marks a source that contradicts an independent count; it is never rendered as a finding."},"calls":{"type":"integer"},"degraded_calls":{"type":"integer","description":"Calls to this source that failed or contradicted themselves. A line with degraded_calls > 0 is partial evidence, whatever its status says."},"cost_usd":{"type":"number","description":"The real charge, not the rounded advertised price string."},"latency_ms":{"type":"integer"},"note":{"type":["string","null"]}}}},"cost":{"type":"object","required":["usd","reconciled","note"],"properties":{"usd":{"type":"number","description":"What this report committed: settled charges plus money held by a paid call still in flight when it was assembled."},"reconciled":{"type":"boolean","description":"true only when every per-source figure is a real settled charge and the report stayed inside its budget cap."},"note":{"type":["string","null"],"description":"Why the figures are not reconciled; null when they are."}}}}},"example":{"subject":{"input":"polymarket.com","kind":"brand","resolved":{"name":"Polymarket","domain":"polymarket.com","handles":{"x":"Polymarket","github":"Polymarket","telegram":null},"learned":[],"confidence":"high"},"warnings":[]},"audience":{"x":{"followers":1813392,"listed":6799,"posts":34821,"listed_per_10k_followers":37.5,"mentions_sampled":100,"unique_authors":88,"author_concentration":0.88,"median_author_age_days":1574,"authors_younger_than_90d":4,"median_author_followers":1136,"languages":["en","es","ja"]},"telegram":null,"assessment":"organic","reasons":["88 of 100 mentions came from distinct authors"]},"sources":[{"id":"x","status":"ok","calls":2,"degraded_calls":0,"cost_usd":0,"latency_ms":4100,"note":null}],"cost":{"usd":0,"reconciled":true,"note":null}}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Validation error (charged nothing). Carries a `docs` URL.","content":{"application/json":{"schema":{"type":"object","required":["error","docs"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"docs":{"type":"string","description":"URL to the current machine-readable contract."}}}}}},"402":{"description":"Payment Required — pay via x402 or MPP and retry.","headers":{"WWW-Authenticate":{"description":"MPP Payment challenge. Its request payload identifies the destination, currency, and amount.","schema":{"type":"string","pattern":"^Payment\\s"}}}},"429":{"description":"Rate limited upstream; see Retry-After."},"500":{"description":"Internal server error."},"502":{"description":"Upstream platform error."}}}},"/v1/footprint/report":{"get":{"operationId":"footprintReport","summary":"Full source-linked digital footprint report for a brand or public figure (paid)","description":"Presence age, surface breadth, audience authenticity, provenance and claims versus delivery, every claim carrying its sources. The subject travels in q/query; the audience sample is the full page the upstream returns, and no parameter narrows it.","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"parameters":[{"name":"q","in":"query","required":false,"description":"Phrase search query (alias: query). Provide exactly one of q / query.","schema":{"type":"string"}},{"name":"query","in":"query","required":false,"description":"Phrase search query (alias: q). Provide exactly one of query / q.","schema":{"type":"string"}},{"name":"filter","in":"query","required":false,"style":"deepObject","explode":true,"x-guidance":"Field filters use filter[field][operator]=value. Scalar operators take one value. List operators use [] (for example filter[field][in][]=a&filter[field][in][]=b). Values are opaque.","schema":{"type":"object","properties":{"type":{"type":"string","enum":["brand","person"],"description":"Shorthand uses eq; supported operators: eq."},"lang":{"type":"string","description":"Shorthand uses eq; supported operators: eq."}}}}],"responses":{"200":{"description":"The composed report; every key present, absent values explicit null.","content":{"application/json":{"schema":{"type":"object","required":["subject","presence","breadth","audience","provenance","claims_vs_delivery","verdict","sources","cost"],"properties":{"subject":{"type":"object","required":["input","kind","resolved","warnings"],"properties":{"input":{"type":"string","description":"The q value exactly as received."},"kind":{"type":"string","enum":["brand","person"]},"resolved":{"type":"object","required":["name","domain","handles","learned","confidence"],"properties":{"name":{"type":["string","null"]},"domain":{"type":["string","null"]},"handles":{"type":"object","required":["x","github","telegram"],"properties":{"x":{"type":["string","null"]},"github":{"type":["string","null"]},"telegram":{"type":["string","null"]}}},"learned":{"type":"array","description":"Identifiers a third party published rather than the caller supplying them. They never raise confidence on their own.","items":{"type":"string","enum":["domain","x","github","telegram"]}},"confidence":{"type":"string","enum":["high","medium","low"],"description":"Agreement between the identity anchors, not a model opinion."}}},"warnings":{"type":"array","description":"What this run could not support. no_owned_anchor means a bare name: nothing was searchable, so no source was consulted.","items":{"type":"string","enum":["no_owned_anchor"]}}}},"presence":{"type":"object","required":["continuous_since","anchors","web_capture_density","gap_years","warnings"],"properties":{"continuous_since":{"type":["string","null"],"description":"YYYY-MM of continuous presence under the current identity; null when the anchors disagree."},"anchors":{"type":"array","description":"The independent dated anchors the figure was derived from.","items":{"type":"object","required":["source","date","note"],"properties":{"source":{"type":"string","enum":["x_account","x_first_mention","wayback","rdap","domain_age","github","telegram"]},"date":{"type":"string","description":"YYYY-MM-DD, or YYYY-MM when the day is unknown."},"note":{"type":["string","null"]}}}},"web_capture_density":{"type":"array","description":"Wayback captures per calendar year, ascending.","items":{"type":"object","required":["year","captures"],"properties":{"year":{"type":"integer"},"captures":{"type":"integer"}}}},"gap_years":{"type":"array","items":{"type":"integer"},"description":"Years inside the capture range with no captures."},"warnings":{"type":"array","items":{"type":"string","enum":["domain_predates_identity","identity_predates_domain","anchors_disagree","capture_gap_detected","insufficient_anchors","undated"]}}}},"breadth":{"type":"object","required":["surfaces","links","surfaces_checked","surfaces_present","surfaces_attested","mutual_pairs","median_surface_age_days","code","assessment","reasons"],"properties":{"surfaces":{"type":"array","description":"One entry per surface actually checked. present:false means the surface was consulted and did not carry the subject; a surface nobody consulted is absent from the list entirely.","items":{"type":"object","required":["id","present","url","first_seen","age_days","attested_by"],"properties":{"id":{"type":"string","enum":["web","x","github","telegram","linkedin","crunchbase","news","directory"]},"present":{"type":"boolean"},"url":{"type":["string","null"]},"first_seen":{"type":["string","null"],"description":"YYYY-MM-DD the surface is first known to have existed."},"age_days":{"type":["integer","null"]},"attested_by":{"type":"array","description":"Surfaces publishing an identifier that resolves to this one. Empty means unattested, which is not corroboration.","items":{"type":"string","enum":["web","x","github","telegram","linkedin","crunchbase","news","directory"]}}}}},"links":{"type":"array","description":"The resolved cross-references, so every attestation can be checked by hand.","items":{"type":"object","required":["from","to","via"],"properties":{"from":{"type":"string","enum":["web","x","github","telegram","linkedin","crunchbase","news","directory"]},"to":{"type":"string","enum":["web","x","github","telegram","linkedin","crunchbase","news","directory"]},"via":{"type":"string","description":"The normalized identifier that resolved."}}}},"surfaces_checked":{"type":"integer"},"surfaces_present":{"type":"integer"},"surfaces_attested":{"type":"integer"},"mutual_pairs":{"type":"integer","description":"Unordered pairs pointing at each other — the expensive kind of cross-reference."},"median_surface_age_days":{"type":["integer","null"]},"code":{"type":["object","null"],"description":"null when no repository was consulted. Contributor count is farmed as routinely as stars, so the figure that carries signal is the top contributor's share.","required":["repo","unique_contributors","commits_sampled","top_contributor","top_contributor_share","truncated","concentration"],"properties":{"repo":{"type":"string","description":"owner/name, as GitHub spells it."},"unique_contributors":{"type":"integer"},"commits_sampled":{"type":"integer"},"top_contributor":{"type":["string","null"]},"top_contributor_share":{"type":["number","null"]},"truncated":{"type":"boolean","description":"true when the contributor page came back full, so the share is measured over the top page only."},"concentration":{"type":"string","enum":["distributed","concentrated","insufficient_data"]}}},"assessment":{"type":"string","enum":["corroborated","partial","unattested","insufficient_data"]},"reasons":{"type":"array","items":{"type":"string"},"description":"The arithmetic behind the assessment, in plain sentences."}}},"audience":{"type":"object","required":["x","telegram","assessment","reasons"],"properties":{"x":{"type":["object","null"],"description":"null when X produced no usable sample.","required":["followers","listed","posts","listed_per_10k_followers","mentions_sampled","unique_authors","author_concentration","median_author_age_days","authors_younger_than_90d","median_author_followers","languages"],"properties":{"followers":{"type":["integer","null"]},"listed":{"type":["integer","null"]},"posts":{"type":["integer","null"]},"listed_per_10k_followers":{"type":["number","null"]},"mentions_sampled":{"type":"integer"},"unique_authors":{"type":"integer"},"author_concentration":{"type":["number","null"],"description":"unique_authors / mentions_sampled."},"median_author_age_days":{"type":["integer","null"]},"authors_younger_than_90d":{"type":["integer","null"]},"median_author_followers":{"type":["integer","null"]},"languages":{"type":"array","items":{"type":"string"}}}},"telegram":{"type":["object","null"],"description":"Telegram search yields chats, not authors, so concentration is measured over distinct chats.","required":["mentions_sampled","unique_chats","chat_concentration","verified_chats","median_chat_views","languages"],"properties":{"mentions_sampled":{"type":"integer"},"unique_chats":{"type":"integer"},"chat_concentration":{"type":["number","null"]},"verified_chats":{"type":["integer","null"]},"median_chat_views":{"type":["integer","null"]},"languages":{"type":"array","items":{"type":"string"}}}},"assessment":{"type":"string","enum":["organic","mixed","concentrated","insufficient_data"]},"reasons":{"type":"array","items":{"type":"string"},"description":"The arithmetic behind the assessment, in plain sentences."}}},"provenance":{"type":"object","required":["legal_name","founded_year","employees","funding","github","accountability"],"properties":{"legal_name":{"type":["string","null"]},"founded_year":{"type":["integer","null"]},"employees":{"type":["integer","null"]},"funding":{"type":["object","null"],"required":["total_usd","investors","as_of"],"properties":{"total_usd":{"type":["number","null"]},"investors":{"type":"array","items":{"type":"string"}},"as_of":{"type":["string","null"]}}},"github":{"type":["object","null"],"required":["account","created","public_repos","account_id"],"properties":{"account":{"type":"string"},"created":{"type":["string","null"]},"public_repos":{"type":["integer","null"]},"account_id":{"type":["integer","null"],"description":"A five-digit id is near-unforgeable early-adopter proof."}}},"accountability":{"type":"string","enum":["identified","partial","anonymous","unknown"],"description":"anonymous is established by absence across independent sources, never by a source declaring something fake."}}},"claims_vs_delivery":{"type":"object","required":["stated_positioning","observed","mismatches","adverse_media"],"properties":{"stated_positioning":{"type":["string","null"]},"observed":{"type":["string","null"]},"mismatches":{"type":"array","items":{"type":"object","required":["claim","observation","sources"],"properties":{"claim":{"type":"string"},"observation":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}}}}},"adverse_media":{"type":"array","items":{"type":"object","required":["title","source","date","url"],"properties":{"title":{"type":"string"},"source":{"type":["string","null"]},"date":{"type":["string","null"]},"url":{"type":["string","null"]}}}}}},"verdict":{"type":"object","required":["footprint","risk_flags","summary"],"properties":{"footprint":{"type":"string","enum":["established","emerging","thin","absent","insufficient_data"]},"risk_flags":{"type":"array","items":{"type":"string","enum":["adverse_media_present","anonymous_ownership","concentrated_audience","recycled_domain","recent_identity","claims_mismatch","sources_degraded"]}},"summary":{"type":"string","description":"One source-grounded paragraph."}}},"sources":{"type":"array","description":"One line per source consulted, degraded ones included.","items":{"type":"object","required":["id","status","calls","degraded_calls","cost_usd","latency_ms","note"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["ok","empty","inconsistent","unavailable"],"description":"inconsistent marks a source that contradicts an independent count; it is never rendered as a finding."},"calls":{"type":"integer"},"degraded_calls":{"type":"integer","description":"Calls to this source that failed or contradicted themselves. A line with degraded_calls > 0 is partial evidence, whatever its status says."},"cost_usd":{"type":"number","description":"The real charge, not the rounded advertised price string."},"latency_ms":{"type":"integer"},"note":{"type":["string","null"]}}}},"cost":{"type":"object","required":["usd","reconciled","note"],"properties":{"usd":{"type":"number","description":"What this report committed: settled charges plus money held by a paid call still in flight when it was assembled."},"reconciled":{"type":"boolean","description":"true only when every per-source figure is a real settled charge and the report stayed inside its budget cap."},"note":{"type":["string","null"],"description":"Why the figures are not reconciled; null when they are."}}}}},"example":{"subject":{"input":"polymarket.com","kind":"brand","resolved":{"name":"Polymarket","domain":"polymarket.com","handles":{"x":"Polymarket","github":"Polymarket","telegram":null},"learned":[],"confidence":"high"},"warnings":[]},"presence":{"continuous_since":"2020-05","anchors":[{"source":"x_account","date":"2020-05-15","note":"account created"},{"source":"rdap","date":"2003-08-27","note":"domain registered"}],"web_capture_density":[{"year":2020,"captures":5},{"year":2021,"captures":12}],"gap_years":[2002,2006,2007],"warnings":["domain_predates_identity"]},"breadth":{"surfaces":[{"id":"web","present":true,"url":"polymarket.com","first_seen":"2001-11-30","age_days":8998,"attested_by":["x","github"]},{"id":"x","present":true,"url":"x.com/polymarket","first_seen":"2020-05-15","age_days":2267,"attested_by":["github"]},{"id":"github","present":true,"url":"github.com/polymarket","first_seen":"2017-09-05","age_days":3250,"attested_by":[]},{"id":"telegram","present":false,"url":null,"first_seen":null,"age_days":null,"attested_by":[]}],"links":[{"from":"github","to":"x","via":"x.com/polymarket"},{"from":"github","to":"web","via":"polymarket.com"},{"from":"x","to":"web","via":"polymarket.com"}],"surfaces_checked":4,"surfaces_present":3,"surfaces_attested":2,"mutual_pairs":0,"median_surface_age_days":3250,"code":null,"assessment":"partial","reasons":["no pair of surfaces names the other back, so every cross-reference rests on one side alone"]},"audience":{"x":{"followers":1813392,"listed":6799,"posts":34821,"listed_per_10k_followers":37.5,"mentions_sampled":100,"unique_authors":88,"author_concentration":0.88,"median_author_age_days":1574,"authors_younger_than_90d":4,"median_author_followers":1136,"languages":["en","es","ja"]},"telegram":null,"assessment":"organic","reasons":["88 of 100 mentions came from distinct authors"]},"provenance":{"legal_name":"Adventure One QSS Inc","founded_year":2020,"employees":450,"funding":{"total_usd":49000000,"investors":["Founders Fund"],"as_of":null},"github":{"account":"Polymarket","created":"2017-09-05","public_repos":102,"account_id":31659527},"accountability":"identified"},"claims_vs_delivery":{"stated_positioning":"The worlds largest prediction market.","observed":"Order books and resolved markets are public; volume matches the on-chain contracts.","mismatches":[],"adverse_media":[{"title":"Prediction market operator settles with regulator","source":"Bloomberg","date":"2024-10-03","url":"https://www.bloomberg.com/news/example"}]},"verdict":{"footprint":"established","risk_flags":["adverse_media_present"],"summary":"Continuous presence under the current identity since 2020-05; the domain predates it by seventeen years, so the registration date is not the age of the entity. Audience organic, ownership identified."},"sources":[{"id":"x","status":"ok","calls":11,"degraded_calls":0,"cost_usd":0,"latency_ms":27400,"note":null},{"id":"wayback","status":"ok","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":18200,"note":null},{"id":"rdap","status":"ok","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":210,"note":null},{"id":"enrich","status":"ok","calls":4,"degraded_calls":0,"cost_usd":0.121,"latency_ms":19900,"note":null},{"id":"github","status":"ok","calls":1,"degraded_calls":0,"cost_usd":0,"latency_ms":640,"note":null}],"cost":{"usd":0.121,"reconciled":false,"note":"4 of 4 charges are advertised prices the rail never confirmed"}}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Validation error (charged nothing). Carries a `docs` URL.","content":{"application/json":{"schema":{"type":"object","required":["error","docs"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"docs":{"type":"string","description":"URL to the current machine-readable contract."}}}}}},"402":{"description":"Payment Required — pay via x402 or MPP and retry.","headers":{"WWW-Authenticate":{"description":"MPP Payment challenge. Its request payload identifies the destination, currency, and amount.","schema":{"type":"string","pattern":"^Payment\\s"}}}},"429":{"description":"Rate limited upstream; see Retry-After."},"500":{"description":"Internal server error."},"502":{"description":"Upstream platform error."}}}},"/v1/platforms":{"get":{"operationId":"listPlatforms","summary":"List supported platforms, endpoint paths, and filters (free)","security":[],"responses":{"200":{"description":"Supported platforms and their platform-owned endpoints.","content":{"application/json":{"schema":{"type":"object","required":["platforms"],"properties":{"platforms":{"type":"array","items":{"type":"object","required":["slug","name","aliases","status","endpoints","filters"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["active","deprecated","beta"]},"endpoints":{"type":"object","additionalProperties":{"type":"object","required":["kind","path","control_params","limit","filters"],"properties":{"kind":{"type":"string","enum":["search","report"],"description":"search returns matches from one source; report returns an answer composed across several."},"path":{"type":"string"},"control_params":{"type":"array","items":{"type":"string"}},"limit":{"type":"object","required":["default","max"],"properties":{"default":{"type":"integer"},"max":{"type":"integer"}}},"filters":{"type":"object"}}}},"filters":{"type":"object","description":"Compatibility view of filters on the conventional search endpoint."}}}}}}}}}}}},"/openapi.json":{"get":{"operationId":"openapi","summary":"This document (free, unversioned)","security":[],"responses":{"200":{"description":"OpenAPI document."}}}},"/skill":{"get":{"operationId":"getSkill","summary":"Agent skill, Markdown (free, unversioned)","security":[],"responses":{"200":{"description":"Markdown skill file.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"operationId":"health","summary":"Liveness check (free, unversioned)","security":[],"responses":{"200":{"description":"Service is up."}}}}}}