{"openapi":"3.0.3","info":{"title":"Trust Onion Public Content API","version":"1.0.0","description":"Keyless, read-only, crawler-friendly JSON for Trust Onion's published AI voice clone scam reporting and the Voice Clone Scam Pulse incident database.\n\nResponses are generated from currently published database rows and cache for no more than 60 seconds.\n\nEvery response (including errors) carries a `meta` block with `as_of`, `generated_at`, `revision`, the CC BY 4.0 license, the canonical `source_url`, and a suggested `citation` sentence. Please keep the attribution and link back when reusing the data.\n\nRate limit: 120 requests per 60 seconds per client IP. Start at https://trustonion.io/public-api/v1 for a JSON index of every endpoint.\n\nFor agents: https://trustonion.io/llms.txt, https://trustonion.io/mcp (Streamable HTTP MCP), setup guide at https://trustonion.io/for-ai-agents.","contact":{"name":"Trust Onion","url":"https://trustonion.io/for-ai-agents","email":"hello@trustonion.io"},"license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"termsOfService":"https://trustonion.io/terms"},"externalDocs":{"description":"For AI Agents — MCP setup and machine surfaces","url":"https://trustonion.io/for-ai-agents"},"servers":[{"url":"https://trustonion.io/public-api/v1","description":"Production"}],"tags":[{"name":"Index","description":"Discovery"},{"name":"Content","description":"Published blog posts and case studies"},{"name":"Pulse","description":"Voice Clone Scam Pulse incident database"},{"name":"Status","description":"Freshness of machine-readable surfaces"}],"paths":{"/":{"get":{"tags":["Index"],"operationId":"getIndex","summary":"API index","description":"Lists every endpoint plus links to this spec, freshness, llms.txt and the MCP endpoint.","parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"API index","headers":{"ETag":{"description":"Strong validator for conditional requests (If-None-Match). Ignores meta.generated_at.","schema":{"type":"string"}},"Cache-Control":{"description":"public, max-age=60, s-maxage=60","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexResponse"},"example":{"data":{"name":"Trust Onion Public Content API","version":"1.0.0","description":"Keyless, read-only JSON for Trust Onion's published reporting and the Voice Clone Scam Pulse.","base_url":"https://trustonion.io/public-api/v1","authentication":"none","rate_limit":{"limit":120,"window_seconds":60,"scope":"per client IP"},"caching":{"max_age_seconds":60,"etag":true,"conditional_header":"If-None-Match"},"endpoints":[{"method":"GET","path":"/recent","description":"Recent published blog posts and case studies, newest first.","url":"https://trustonion.io/public-api/v1/recent"}],"links":{"api_index":"https://trustonion.io/public-api/v1","openapi":"https://trustonion.io/.well-known/openapi.json","freshness":"https://trustonion.io/public-api/v1/freshness","llms_txt":"https://trustonion.io/llms.txt","llms_full_txt":"https://trustonion.io/llms-full.txt","mcp":"https://trustonion.io/mcp","for_ai_agents":"https://trustonion.io/for-ai-agents","pulse_page":"https://trustonion.io/voice-clone-scam-pulse","pulse_csv":"https://trustonion.io/voice-clone-scam-pulse.csv","pulse_methodology":"https://trustonion.io/voice-clone-scam-pulse/methodology"}},"meta":{"as_of":null,"generated_at":"2026-10-10T18:00:00.000Z","revision":"1.0.0","license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/for-ai-agents","api_url":"https://trustonion.io/public-api/v1","citation":"Trust Onion, \"Trust Onion Public Content API,\" https://trustonion.io/public-api/v1. Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/recent":{"get":{"tags":["Content"],"operationId":"getRecent","summary":"Recent published content","parameters":[{"name":"limit","in":"query","required":false,"description":"Number of items (1-100).","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Recent blog posts and case studies, newest update first","headers":{"ETag":{"description":"Strong validator for conditional requests (If-None-Match). Ignores meta.generated_at.","schema":{"type":"string"}},"Cache-Control":{"description":"public, max-age=60, s-maxage=60","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecentResponse"},"example":{"data":[{"type":"blog","id":"3f1c0b8e-0000-4000-8000-000000000001","slug":"example-voice-clone-scam","title":"How a cloned voice nearly fooled a family","url":"https://trustonion.io/blog/example-voice-clone-scam","markdown_url":"https://trustonion.io/blog/example-voice-clone-scam.md","body":"A caller used a cloned voice to ask for bail money...","published_at":"2026-10-07T12:00:00.000Z","updated_at":"2026-10-08T14:30:00.000Z","revision":"2026-10-08T14:30:00.000Z"},{"type":"case_study","id":"3f1c0b8e-0000-4000-8000-000000000002","slug":"example-grandparent-scam","title":"Grandparent scam using a cloned grandson's voice","url":"https://trustonion.io/case-studies/example-grandparent-scam","markdown_url":"https://trustonion.io/case-studies/example-grandparent-scam.md","body":"An 82-year-old received a call from someone who sounded like her grandson...","published_at":"2026-10-01T09:00:00.000Z","updated_at":"2026-10-02T10:00:00.000Z","revision":"2026-10-02T10:00:00.000Z","victim_type":"elderly","attack_type":"voice_cloning","outcome":"prevented","financial_impact":null}],"revision":"2026-10-08T14:30:00.000Z","generated_at":"2026-10-10T18:00:00.000Z","meta":{"as_of":"2026-10-08T14:30:00.000Z","generated_at":"2026-10-10T18:00:00.000Z","revision":"2026-10-08T14:30:00.000Z","license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/feed.xml","api_url":"https://trustonion.io/public-api/v1/recent","citation":"Trust Onion, \"Trust Onion published library,\" https://trustonion.io (updated 2026-10-08). Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/content/{type}/{slug}":{"get":{"tags":["Content"],"operationId":"getContent","summary":"Published item by slug","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string","enum":["blog","case-studies"]}},{"name":"slug","in":"path","required":true,"description":"URL slug of the published item.","schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Published item","headers":{"ETag":{"description":"Strong validator for conditional requests (If-None-Match). Ignores meta.generated_at.","schema":{"type":"string"}},"Cache-Control":{"description":"public, max-age=60, s-maxage=60","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentResponse"},"example":{"data":{"type":"case_study","id":"3f1c0b8e-0000-4000-8000-000000000002","slug":"example-grandparent-scam","title":"Grandparent scam using a cloned grandson's voice","url":"https://trustonion.io/case-studies/example-grandparent-scam","markdown_url":"https://trustonion.io/case-studies/example-grandparent-scam.md","body":"An 82-year-old received a call from someone who sounded like her grandson...","published_at":"2026-10-01T09:00:00.000Z","updated_at":"2026-10-02T10:00:00.000Z","revision":"2026-10-02T10:00:00.000Z","victim_type":"elderly","attack_type":"voice_cloning","outcome":"prevented","financial_impact":null},"meta":{"as_of":"2026-10-02T10:00:00.000Z","generated_at":"2026-10-10T18:00:00.000Z","revision":"2026-10-02T10:00:00.000Z","license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/case-studies/example-grandparent-scam","api_url":"https://trustonion.io/public-api/v1/content/case-studies/example-grandparent-scam","citation":"Grandparent scam using a cloned grandson's voice — Trust Onion, October 1, 2026. https://trustonion.io/case-studies/example-grandparent-scam Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/blogs/{slug}":{"get":{"tags":["Content"],"operationId":"getBlog","summary":"Published blog post by slug (alias of /content/blog/{slug})","parameters":[{"name":"slug","in":"path","required":true,"description":"URL slug of the published item.","schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Published blog post","headers":{"ETag":{"description":"Strong validator for conditional requests (If-None-Match). Ignores meta.generated_at.","schema":{"type":"string"}},"Cache-Control":{"description":"public, max-age=60, s-maxage=60","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentResponse"},"example":{"data":{"type":"blog","id":"3f1c0b8e-0000-4000-8000-000000000001","slug":"example-voice-clone-scam","title":"How a cloned voice nearly fooled a family","url":"https://trustonion.io/blog/example-voice-clone-scam","markdown_url":"https://trustonion.io/blog/example-voice-clone-scam.md","body":"A caller used a cloned voice to ask for bail money...","published_at":"2026-10-07T12:00:00.000Z","updated_at":"2026-10-08T14:30:00.000Z","revision":"2026-10-08T14:30:00.000Z"},"meta":{"as_of":"2026-10-08T14:30:00.000Z","generated_at":"2026-10-10T18:00:00.000Z","revision":"2026-10-08T14:30:00.000Z","license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/blog/example-voice-clone-scam","api_url":"https://trustonion.io/public-api/v1/content/blog/example-voice-clone-scam","citation":"How a cloned voice nearly fooled a family — Trust Onion, October 7, 2026. https://trustonion.io/blog/example-voice-clone-scam Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/case-studies/{slug}":{"get":{"tags":["Content"],"operationId":"getCaseStudy","summary":"Published case study by slug (alias of /content/case-studies/{slug})","parameters":[{"name":"slug","in":"path","required":true,"description":"URL slug of the published item.","schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Published case study","headers":{"ETag":{"description":"Strong validator for conditional requests (If-None-Match). Ignores meta.generated_at.","schema":{"type":"string"}},"Cache-Control":{"description":"public, max-age=60, s-maxage=60","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentResponse"},"example":{"data":{"type":"case_study","id":"3f1c0b8e-0000-4000-8000-000000000002","slug":"example-grandparent-scam","title":"Grandparent scam using a cloned grandson's voice","url":"https://trustonion.io/case-studies/example-grandparent-scam","markdown_url":"https://trustonion.io/case-studies/example-grandparent-scam.md","body":"An 82-year-old received a call from someone who sounded like her grandson...","published_at":"2026-10-01T09:00:00.000Z","updated_at":"2026-10-02T10:00:00.000Z","revision":"2026-10-02T10:00:00.000Z","victim_type":"elderly","attack_type":"voice_cloning","outcome":"prevented","financial_impact":null},"meta":{"as_of":"2026-10-02T10:00:00.000Z","generated_at":"2026-10-10T18:00:00.000Z","revision":"2026-10-02T10:00:00.000Z","license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/case-studies/example-grandparent-scam","api_url":"https://trustonion.io/public-api/v1/content/case-studies/example-grandparent-scam","citation":"Grandparent scam using a cloned grandson's voice — Trust Onion, October 1, 2026. https://trustonion.io/case-studies/example-grandparent-scam Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/pulse/summary":{"get":{"tags":["Pulse"],"operationId":"getPulseSummary","summary":"Voice Clone Scam Pulse aggregate statistics","description":"Loss totals sum only explicitly USD-denominated figures; other currencies are counted, never converted.","parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Pulse statistics","headers":{"ETag":{"description":"Strong validator for conditional requests (If-None-Match). Ignores meta.generated_at.","schema":{"type":"string"}},"Cache-Control":{"description":"public, max-age=60, s-maxage=60","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PulseSummaryResponse"},"example":{"data":{"totalIncidents":128,"usdLossCount":61,"usdLossTotal":4820000,"otherCurrencyLossCount":9,"ambiguousLossCount":3,"unquantifiedLossCount":7,"undisclosedLossCount":30,"nonFinancialCount":18,"preventedCount":22,"countryCount":14,"lastUpdated":"2026-10-08T14:30:00.000Z"},"revision":"2026-10-08T14:30:00.000Z","meta":{"as_of":"2026-10-08T14:30:00.000Z","generated_at":"2026-10-10T18:00:00.000Z","revision":"2026-10-08T14:30:00.000Z","license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/voice-clone-scam-pulse","api_url":"https://trustonion.io/public-api/v1/pulse/summary","citation":"Trust Onion, \"Voice Clone Scam Pulse: AI Scam Incident Database,\" https://trustonion.io/voice-clone-scam-pulse (updated 2026-10-08). Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/pulse/incidents":{"get":{"tags":["Pulse"],"operationId":"getPulseIncidents","summary":"Voice Clone Scam Pulse incident records","description":"Mirrors the public CSV. profileUrl is the absolute URL of the incident's case study page.","parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Incident list","headers":{"ETag":{"description":"Strong validator for conditional requests (If-None-Match). Ignores meta.generated_at.","schema":{"type":"string"}},"Cache-Control":{"description":"public, max-age=60, s-maxage=60","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PulseIncidentsResponse"},"example":{"data":[{"caseId":"VCS-2026-0042","slug":"example-grandparent-scam","headline":"Grandparent scam using a cloned grandson's voice","incidentDate":"2026-09-28","incidentYear":2026,"location":"Phoenix, Arizona, United States","country":"United States","victimType":"elderly","attackType":"voice_cloning","outcome":"prevented","financialImpact":null,"lossUsd":null,"lossCategory":"non_financial","summary":"A caller cloned a grandson's voice to demand bail money; the family verified and hung up.","sourceName":"Example News","sourceUrl":"https://news.example.com/story","profileUrl":"https://trustonion.io/case-studies/example-grandparent-scam","publishedAt":"2026-10-01T09:00:00.000Z","updatedAt":"2026-10-02T10:00:00.000Z"}],"revision":"2026-10-02T10:00:00.000Z","meta":{"as_of":"2026-10-08T14:30:00.000Z","generated_at":"2026-10-10T18:00:00.000Z","revision":"2026-10-08T14:30:00.000Z","license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/voice-clone-scam-pulse","api_url":"https://trustonion.io/public-api/v1/pulse/incidents","citation":"Trust Onion, \"Voice Clone Scam Pulse: AI Scam Incident Database,\" https://trustonion.io/voice-clone-scam-pulse (updated 2026-10-08). Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/freshness":{"get":{"tags":["Status"],"operationId":"getFreshness","summary":"Agent-surface freshness status","parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Newest content and request-time surface status","headers":{"ETag":{"description":"Strong validator for conditional requests (If-None-Match). Ignores meta.generated_at.","schema":{"type":"string"}},"Cache-Control":{"description":"public, max-age=60, s-maxage=60","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessResponse"},"example":{"newestPublishedContent":"2026-10-08T14:30:00.000Z","generatedAt":"2026-10-10T18:00:00.000Z","surfaces":["markdown","llms.txt","llms-full.txt","feeds","sitemap","public-api","pulse","mcp"],"requestTimeSource":"published database rows","maxDocumentedRetrySeconds":60,"publication":{"latestChange":null,"pendingCount":0,"failedCount":0,"retryWindowSeconds":60},"meta":{"as_of":"2026-10-08T14:30:00.000Z","generated_at":"2026-10-10T18:00:00.000Z","revision":"2026-10-08T14:30:00.000Z","license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/for-ai-agents","api_url":"https://trustonion.io/public-api/v1/freshness","citation":"Trust Onion, \"Trust Onion published library,\" https://trustonion.io (updated 2026-10-08). Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"parameters":{"IfNoneMatch":{"name":"If-None-Match","in":"header","required":false,"description":"ETag from a previous response; returns 304 when unchanged.","schema":{"type":"string"}}},"responses":{"NotModified":{"description":"Not modified since the supplied ETag."},"NotFound":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found","meta":{"as_of":null,"generated_at":"2026-10-10T18:00:00.000Z","revision":null,"license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/for-ai-agents","api_url":"https://trustonion.io/public-api/v1","citation":"Trust Onion, \"Trust Onion Public Content API,\" https://trustonion.io/public-api/v1. Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json","api_index":"https://trustonion.io/public-api/v1"}}}}},"RateLimited":{"description":"Rate limited","headers":{"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer","example":120}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) when the window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","message":"Too many requests. Try again later.","meta":{"as_of":null,"generated_at":"2026-10-10T18:00:00.000Z","revision":null,"license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/for-ai-agents","api_url":"https://trustonion.io/public-api/v1","citation":"Trust Onion, \"Trust Onion Public Content API,\" https://trustonion.io/public-api/v1. Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json","api_index":"https://trustonion.io/public-api/v1"}}}}},"InternalError":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"internal_error","meta":{"as_of":null,"generated_at":"2026-10-10T18:00:00.000Z","revision":null,"license":{"name":"CC BY 4.0","spdx":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"attribution":"Trust Onion Voice Clone Scam Pulse","source_url":"https://trustonion.io/for-ai-agents","api_url":"https://trustonion.io/public-api/v1","citation":"Trust Onion, \"Trust Onion Public Content API,\" https://trustonion.io/public-api/v1. Licensed CC BY 4.0.","documentation":"https://trustonion.io/.well-known/openapi.json","api_index":"https://trustonion.io/public-api/v1"}}}}}},"schemas":{"License":{"type":"object","required":["name","spdx","url"],"properties":{"name":{"type":"string","example":"CC BY 4.0"},"spdx":{"type":"string","example":"CC-BY-4.0"},"url":{"type":"string","format":"uri","example":"https://creativecommons.org/licenses/by/4.0/"}}},"Meta":{"type":"object","description":"Citation and licensing block present on every response, including errors.","required":["as_of","generated_at","revision","license","attribution","source_url","api_url","citation","documentation"],"properties":{"as_of":{"type":"string","format":"date-time","nullable":true,"description":"Newest data timestamp this response reflects."},"generated_at":{"type":"string","format":"date-time","description":"When this response was generated (request time)."},"revision":{"type":"string","nullable":true,"description":"Revision identifier for the data (usually the newest update timestamp)."},"license":{"$ref":"#/components/schemas/License"},"attribution":{"type":"string","example":"Trust Onion Voice Clone Scam Pulse"},"source_url":{"type":"string","format":"uri","description":"Canonical human-readable page for this data."},"api_url":{"type":"string","format":"uri","description":"Canonical API URL for this response."},"citation":{"type":"string","description":"Suggested citation sentence."},"documentation":{"type":"string","format":"uri"}}},"Error":{"type":"object","required":["error","meta"],"properties":{"error":{"type":"string","enum":["not_found","rate_limited","internal_error"]},"message":{"type":"string"},"meta":{"description":"The same citation/licensing block as successful responses, plus a link back to the API index.","allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["api_index"],"properties":{"api_index":{"type":"string","format":"uri"}}}]}}},"BlogItem":{"type":"object","required":["type","id","slug","title","url","markdown_url","body","published_at","updated_at","revision"],"properties":{"type":{"type":"string","enum":["blog"]},"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","format":"uri"},"markdown_url":{"type":"string","format":"uri"},"body":{"type":"string","description":"Markdown body."},"published_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"revision":{"type":"string"}}},"CaseStudyItem":{"type":"object","required":["type","id","slug","title","url","markdown_url","body","published_at","updated_at","revision"],"properties":{"type":{"type":"string","enum":["case_study"]},"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","format":"uri"},"markdown_url":{"type":"string","format":"uri"},"body":{"type":"string","description":"Markdown body."},"published_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"revision":{"type":"string"},"victim_type":{"type":"string","nullable":true},"attack_type":{"type":"string","nullable":true},"outcome":{"type":"string","nullable":true},"financial_impact":{"type":"string","nullable":true}}},"ContentItem":{"oneOf":[{"$ref":"#/components/schemas/BlogItem"},{"$ref":"#/components/schemas/CaseStudyItem"}],"discriminator":{"propertyName":"type","mapping":{"blog":"#/components/schemas/BlogItem","case_study":"#/components/schemas/CaseStudyItem"}}},"IndexEndpoint":{"type":"object","required":["method","path","description","url"],"properties":{"method":{"type":"string","enum":["GET"]},"path":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"}}},"IndexResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["name","version","base_url","endpoints","links"],"properties":{"name":{"type":"string"},"version":{"type":"string"},"description":{"type":"string"},"base_url":{"type":"string","format":"uri"},"authentication":{"type":"string","enum":["none"]},"rate_limit":{"type":"object","properties":{"limit":{"type":"integer"},"window_seconds":{"type":"integer"},"scope":{"type":"string"}}},"caching":{"type":"object","properties":{"max_age_seconds":{"type":"integer"},"etag":{"type":"boolean"},"conditional_header":{"type":"string"}}},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/IndexEndpoint"}},"links":{"type":"object","required":["api_index","openapi","freshness","llms_txt","mcp"],"additionalProperties":{"type":"string","format":"uri"},"properties":{"api_index":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"freshness":{"type":"string","format":"uri"},"llms_txt":{"type":"string","format":"uri"},"llms_full_txt":{"type":"string","format":"uri"},"mcp":{"type":"string","format":"uri"},"for_ai_agents":{"type":"string","format":"uri"},"pulse_page":{"type":"string","format":"uri"},"pulse_csv":{"type":"string","format":"uri"},"pulse_methodology":{"type":"string","format":"uri"}}}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"RecentResponse":{"type":"object","required":["data","revision","generated_at","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ContentItem"}},"revision":{"type":"string","nullable":true},"generated_at":{"type":"string","format":"date-time"},"meta":{"$ref":"#/components/schemas/Meta"}}},"ContentResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/ContentItem"},"meta":{"$ref":"#/components/schemas/Meta"}}},"PulseStats":{"type":"object","required":["totalIncidents","usdLossCount","usdLossTotal","lastUpdated"],"properties":{"totalIncidents":{"type":"integer"},"usdLossCount":{"type":"integer","description":"Records with an explicitly USD loss figure."},"usdLossTotal":{"type":"number","description":"Sum of explicit USD losses (never converted from other currencies)."},"otherCurrencyLossCount":{"type":"integer"},"ambiguousLossCount":{"type":"integer"},"unquantifiedLossCount":{"type":"integer"},"undisclosedLossCount":{"type":"integer"},"nonFinancialCount":{"type":"integer"},"preventedCount":{"type":"integer"},"countryCount":{"type":"integer"},"lastUpdated":{"type":"string","format":"date-time","nullable":true}}},"PulseSummaryResponse":{"type":"object","required":["data","revision","meta"],"properties":{"data":{"$ref":"#/components/schemas/PulseStats"},"revision":{"type":"string","format":"date-time","nullable":true},"meta":{"$ref":"#/components/schemas/Meta"}}},"PulseIncident":{"type":"object","required":["caseId","slug","headline","lossCategory","summary","profileUrl"],"properties":{"caseId":{"type":"string"},"slug":{"type":"string"},"headline":{"type":"string"},"incidentDate":{"type":"string","nullable":true},"incidentYear":{"type":"integer","nullable":true},"location":{"type":"string","nullable":true},"country":{"type":"string","nullable":true},"victimType":{"type":"string","nullable":true},"attackType":{"type":"string","nullable":true},"outcome":{"type":"string","nullable":true},"financialImpact":{"type":"string","nullable":true,"description":"Loss as reported, verbatim."},"lossUsd":{"type":"number","nullable":true,"description":"Only when the source disclosed an explicitly USD figure."},"lossCategory":{"type":"string","enum":["usd","ambiguous","other_currency","unquantified","undisclosed","non_financial"]},"summary":{"type":"string"},"sourceName":{"type":"string","nullable":true},"sourceUrl":{"type":"string","nullable":true,"format":"uri"},"profileUrl":{"type":"string","format":"uri","description":"Absolute URL of the incident's case study page."},"publishedAt":{"type":"string","format":"date-time","nullable":true},"updatedAt":{"type":"string","format":"date-time","nullable":true}}},"PulseIncidentsResponse":{"type":"object","required":["data","revision","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PulseIncident"}},"revision":{"type":"string","format":"date-time","nullable":true},"meta":{"$ref":"#/components/schemas/Meta"}}},"PublicationStatus":{"type":"object","properties":{"latestChange":{"type":"object","nullable":true,"additionalProperties":true},"pendingCount":{"type":"integer"},"failedCount":{"type":"integer"},"retryWindowSeconds":{"type":"integer"}}},"FreshnessResponse":{"type":"object","required":["newestPublishedContent","generatedAt","surfaces","publication","meta"],"properties":{"newestPublishedContent":{"type":"string","format":"date-time","nullable":true},"generatedAt":{"type":"string","format":"date-time"},"surfaces":{"type":"array","items":{"type":"string"}},"requestTimeSource":{"type":"string"},"maxDocumentedRetrySeconds":{"type":"integer"},"publication":{"$ref":"#/components/schemas/PublicationStatus"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}