{
  "title": "Trooth public interface catalog",
  "description": "Every public interface Trooth supports, with its host, method, side effects, authentication, limits, support status and version policy. The API Terms incorporate this list. An interface not listed here is part of the application, not a supported public interface. Only interfaces whose side effects are none are reads; the others store state or make Trooth send requests later.",
  "catalogVersion": "2026-09-28",
  "terms": "https://trooth.co/api-terms",
  "interfaces": [
    {
      "id": "directory-search",
      "name": "Search the directory",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/mobile/directory/search",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/openapi.json",
      "docs": "/developers"
    },
    {
      "id": "directory-featured",
      "name": "Featured companies",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/mobile/directory/featured",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/openapi.json",
      "docs": "/developers"
    },
    {
      "id": "directory-vendor",
      "name": "One directory entry",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/mobile/directory/vendor/{slug}",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/openapi.json",
      "docs": "/developers"
    },
    {
      "id": "public-mesh",
      "name": "A company's public rollup",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/public-mesh/{handle}",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/openapi.json",
      "docs": "/developers"
    },
    {
      "id": "network-profile",
      "name": "A company's Trust Profile (the canonical lookup)",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/network/profile",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/schemas/network-profile.v2.schema.json",
      "docs": "/docs/quickstart"
    },
    {
      "id": "compare",
      "name": "Compare companies",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/compare",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "20 a minute and 200 an hour per IP address; over it, 429",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/openapi.json",
      "docs": "/developers"
    },
    {
      "id": "suggest",
      "name": "Name suggestions",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/network/suggest",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/openapi.json",
      "docs": "/developers"
    },
    {
      "id": "legal",
      "name": "A legal document",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/legal/{slug}",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/openapi.json",
      "docs": "/legal"
    },
    {
      "id": "version",
      "name": "The deployed version",
      "kind": "rest",
      "host": "trooth.co",
      "method": "GET",
      "path": "/api/version",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "Contract version pinned by ?contract= or the Trooth-Contract header; a removal, rename or change of meaning moves the version, with the notice in /api-versioning.",
      "contract": "/openapi.json",
      "docs": "/developers"
    },
    {
      "id": "worker-trust",
      "name": "A Trust Profile by workspace slug (older worker route)",
      "kind": "rest",
      "host": "api.trooth.co",
      "method": "GET",
      "path": "/public/trust/{slug}",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "None",
      "support": "supported, legacy",
      "versionPolicy": "Kept for existing integrations. A published company answers with a migration response naming /api/network/profile; new code should use that lookup. Withdrawn only with the notice in /api-versioning.",
      "contract": "/openapi.yaml",
      "docs": "/docs/trust-profile-api"
    },
    {
      "id": "worker-keys",
      "name": "Public signing keys",
      "kind": "rest",
      "host": "api.trooth.co",
      "method": "GET",
      "path": "/public/keys",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "None",
      "support": "supported",
      "versionPolicy": "Keys are added and retired, never edited in place; the lifecycle is in the key policy the response carries.",
      "contract": "/openapi.yaml",
      "docs": "/docs/verifiable-evidence"
    },
    {
      "id": "worker-badge",
      "name": "A company's badge image",
      "kind": "embed",
      "host": "api.trooth.co",
      "method": "GET",
      "path": "/public/trust/{slug}/badge.svg",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "None",
      "support": "supported",
      "versionPolicy": "The pinned badge release is served beside the moving one; see the badge docs.",
      "contract": "/openapi.yaml",
      "docs": "/docs/trust-badge"
    },
    {
      "id": "badge-js",
      "name": "The embeddable badge script",
      "kind": "embed",
      "host": "trooth.co",
      "method": "GET",
      "path": "/badge.js",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "supported",
      "versionPolicy": "A pinned release is served beside the moving one.",
      "contract": "/docs/trust-badge",
      "docs": "/docs/trust-badge"
    },
    {
      "id": "worker-view",
      "name": "Record a profile view",
      "kind": "rest",
      "host": "api.trooth.co",
      "method": "POST",
      "path": "/public/trust/{slug}/view",
      "sideEffects": "records a view",
      "authentication": "None",
      "limits": "Repeat views from one address within ten minutes count once",
      "support": "documented, not versioned",
      "versionPolicy": "Not part of a versioned contract; may change with a changelog entry.",
      "contract": "/docs/trust-badge",
      "docs": "/docs/trust-badge"
    },
    {
      "id": "worker-agent-subscribe",
      "name": "Subscribe an endpoint to a company's changes",
      "kind": "rest",
      "host": "api.trooth.co",
      "method": "POST",
      "path": "/public/trust/{slug}/agent-subscribe",
      "sideEffects": "stores a subscription and sends requests later",
      "authentication": "None; the endpoint must answer a challenge before it is enrolled",
      "limits": "20 an hour per IP address",
      "support": "supported",
      "versionPolicy": "The delivery envelope and signatures follow the webhook channel table; changes follow /api-versioning.",
      "contract": "/docs/webhooks",
      "docs": "/docs/agents"
    },
    {
      "id": "worker-subscribe",
      "name": "Subscribe an address to a company's changes",
      "kind": "rest",
      "host": "api.trooth.co",
      "method": "POST",
      "path": "/public/trust/{slug}/subscribe",
      "sideEffects": "stores a subscription and sends requests later",
      "authentication": "None. Today the address is subscribed at once and sent a notice, with no confirmation step, and a webhook address given here is not challenged; both are being changed (fresh audit V04 and V06)",
      "limits": "10 an hour per IP address",
      "support": "documented, not versioned",
      "versionPolicy": "Not part of a versioned contract; may change with a changelog entry.",
      "contract": "/docs/webhooks",
      "docs": "/docs/webhooks"
    },
    {
      "id": "worker-request-access",
      "name": "Ask a company for a document",
      "kind": "rest",
      "host": "api.trooth.co",
      "method": "POST",
      "path": "/public/trust/{slug}/request-access",
      "sideEffects": "stores a request",
      "authentication": "None",
      "limits": "10 an hour per IP address",
      "support": "documented, not versioned",
      "versionPolicy": "Not part of a versioned contract; may change with a changelog entry.",
      "contract": "/docs/api",
      "docs": "/docs/api"
    },
    {
      "id": "mcp",
      "name": "The public MCP server",
      "kind": "mcp",
      "host": "api.trooth.co",
      "method": "POST",
      "path": "/public/mcp",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "120 tools/call requests a minute per IP address, counted per server instance; over it, 429 with Retry-After: 60",
      "support": "supported",
      "versionPolicy": "Negotiated MCP protocol revisions; tool results carry structuredContent against published schemas.",
      "contract": "/.well-known/mcp/server-card.json",
      "docs": "/docs/agents"
    },
    {
      "id": "cli",
      "name": "The trooth command line",
      "kind": "cli",
      "host": "npm",
      "method": "npx trooth",
      "path": "check, lint",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "check makes one request per run; lint opens no socket",
      "support": "supported",
      "versionPolicy": "Semantic versions on npm; exit codes are stable and listed in the CLI README.",
      "contract": "/docs/cli",
      "docs": "/docs/cli"
    },
    {
      "id": "markdown",
      "name": "Any public page as Markdown",
      "kind": "markdown",
      "host": "trooth.co",
      "method": "GET",
      "path": "/{page}.md, or Accept: text/markdown",
      "sideEffects": "none",
      "authentication": "None",
      "limits": "No per-route limit; served from an edge cache.",
      "support": "documented, not versioned",
      "versionPolicy": "A rendering of the page; the page is the source.",
      "contract": "/llms.txt",
      "docs": "/llms.txt"
    }
  ]
}
