Authentication and keys
The Trooth application programming interface (API) is public and versioned. Its reads need no key or account; the public calls that change state, such as subscribing to a company's changes, are marked with their side effects in the public interface catalog.
Quickstart
Keyless: the Trust Profile read, the API reference operations and the Model Context Protocol (MCP) server. No credentialed API exists for integrators; workspace endpoints are undocumented.
A workspace API key has one use: sending evidence events into your own workspace (Connect, API and webhook).
- Keys are workspace-scoped, shown once and revocable.
- No other endpoint is documented for keys.
- Webhooks fire on the events listed in the developer docs; delivery is attempted, not guaranteed.
Example request
# Reads a company's published Trust Profile by its domain. No key, no account.curl -s "https://trooth.co/api/network/profile?q=your-co.com&contract=2"const res = await fetch("https://trooth.co/api/network/profile?q=your-co.com&contract=2");const record = await res.json();if (record.found) console.log(record.name, record.domain);Authentication and rate limits
No authentication. Limits, where they apply, are per IP address, not per tenant:
- This site: per-minute and per-hour windows (
lib/rate-limit.ts). - Trooth API: no rate limit on the /public/trust read.
- MCP server: 120 tool calls a minute per IP, per instance, so approximate; listing and handshake uncounted. Over it: 429, Retry-After: 60.
- No plans: Trooth is free, so allowances are equal.
- Webhooks are HMAC-signed.
MCP server for AI agents
AI agents can query Trooth over the Model Context Protocol. The public tools are read-only and keyless: Trust Profiles, AI and data-use declarations, outside-in reads, token checks, the knowledge base and provenance labels. One more tool reads your own workspace after sign-in. It needs an OAuth access token for the MCP server from the authorization server its protected-resource metadata names, with no scope, and it reads only the workspace linked to you when you signed in to trooth.co with Continue with enterprise SSO. The A2A agent keeps a task for a token holder for 24 hours. The agents guide describes the sign-in flow.
- Connect: point an MCP client that connects to remote servers at the endpoint below (streamable HTTP, one JSON response per POST, protocol 2026-07-28, server trooth-mcp 1.4.1).
- Older revisions: 2025-06-18, 2025-03-26 or 2024-11-05 still work unchanged.
- Clients: the block below is a project .mcp.json entry (Claude Code, VS Code). Claude.ai and Desktop: Customize, Connectors, Add custom connector; ChatGPT lists Trooth Network as an app.
- Limits and removal: per client, on the agents page.
{ "mcpServers": { "trooth": { "type": "http", "url": "https://api.trooth.co/public/mcp" } }}Tools take one required string and return structuredContent (status, provenance, subject, summary) with the text:
trooth_public_trust_profile(company): one company's complete Trust Profile on the Trooth Network, every section with its state and who said it, after a short summary that links the full recordtrooth_outside_in_read(domain): a live, neutral read of a domain's public surface right now: HTTPS reachability, five common response headers and security.txttrooth_verify(token): re-check the two signatures on a Trust Ledger Tokentrooth_ask(question): a question about Trooth itself, answered from its fixed knowledge basetrooth_ai_data_use_disclosures(company): what one company has declared about AI and customer data, each row labeled as the company's own declarationtrooth_search_companies(query): search the companies published on the Trooth Network by name, domain, tagline or categorytrooth_compare_companies(companies): two to four companies' Trust Profiles side by side, section by section, each cell the company's own record
Also: 4 markdown resources (trooth://methodology, trooth://provenance-labels, trooth://verify-a-vendor, trooth://what-a-call-sends) and 3 prompts (vendor_trust_check, verify_trust_token, before_you_trust). Rate limited per IP; no tenant data; full contract on Agents and MCP.
Every interface, in one table
A summary of the supported interfaces. The controlling list, with each one's access, side effects, limits and availability on this deployment, is /interfaces.json. Anything not listed there is internal, unsupported and may change without notice.
| Interface | Host | Access | Effect | Support | Documented at |
|---|---|---|---|---|---|
| Canonical profile, GET /api/network/profile | trooth.co | Public, no credential | Read | Supported, contract 2 | /openapi.json |
| The other eight public reads in /openapi.json | trooth.co | Public, no credential | Read | Supported | /docs/api |
| GET /public/trust/:slug and the directory feed | api.trooth.co | Public, no credential | Read | Supported; older than the canonical profile, which is preferred | Trust Profile API |
| MCP server, seven public tools | api.trooth.co/public/mcp | Public, no credential | Read | Supported | Agents and MCP |
| Profile subscriptions (agent-subscribe) | api.trooth.co | Public; the destination must answer a challenge | Creates a subscription and sends deliveries | Supported | Agents and MCP |
| Command-line interface (CLI), trooth check, verify and lint | api.trooth.co (check only) | Public, no credential | Read | Supported | CLI |
| Workspace evidence events | api.trooth.co | Workspace API key | Writes to your own workspace | Supported, one use | Connect, API and webhook, in the workspace |
| Webhooks and alert destinations | Outbound from Trooth | Configured in a signed-in workspace | Deliveries to your endpoint | Supported | Webhooks |
| WebMCP profile tools | In the signed-in editor, in your browser | Your own session | Drafts, saves and publishes declared fields, as the workspace allows | Experimental | Build with AI |
| Session routes behind the website and workspaces | trooth.co | Signed-in session | Varies | Internal, not supported | Not documented |
| MCP tool trooth_my_company_record | api.trooth.co/public/mcp | OAuth access token for this server, no scope | Reads your own workspace | Documented, not yet versioned | Agents and MCP |
| A2A agent: /a2a/v1 and the Agent Card | api.trooth.co | Public, no credential; a task is kept only for a caller with an OAuth access token, with no scope | Read | Supported | Agents and MCP |
| Record versions: GET /api/network/profile/history | trooth.co | Public, no credential | Read | Documented, not yet versioned | /interfaces.json |
Pagination and completeness
Directory search: pass next_cursor back as cursor until null. A cursor is a position in a live list, not a snapshot, so a walk is best-effort discovery and not a consistent full export.
Walks are not atomic: mid-walk changes may appear later or be passed over. No tombstones; removed companies are absent.
To hold a complete copy:
- Walk to the end twice and compare
slugsets. - In both walks: current. Only in the second: new.
- Only in the first: removed or unpublished;
GET /api/network/profile?q=<slug>confirms withfound: false. - Repeat until two walks agree.
An unreadable cursor gets 400, never an empty page.
The API is free.
Every endpoint, joining, listing and witnessing are free. Nothing is for sale, including any position on any Trooth page.
Use of the Trooth API is subject to the Terms of Service.
REST API: reference
- Quick start
- Read one published profile with the request under Example request. See this section.
- Prerequisites
- An HTTP client. No key and no account for the public endpoints.
- Examples
- The curl samples are copyable, and tests check them against the OpenAPI contract. See this section.
- Access and data boundaries
- Public reads return only published or publicly observed data, with no key. Subscribing an endpoint or an address to a company's changes is a public call that stores state and makes Trooth send requests later. Private workspace reads over MCP and A2A need an OAuth access token with no scope, and browser publication happens only in the signed-in editor. Workspace endpoints are not documented for integration. See this section.
- Uncertainty in answers
- Each fact carries its origin. A shared name lists every slug instead of guessing. See this section.
- Versions
- Pass contract=2 for the current public contract. An unsupported contract value is refused with unsupported_contract_version and the version the server speaks.
- Errors
- No published profile: found: false. Unreadable record: 503 with a reason and Retry-After, never an empty profile. Unsupported contract: 400. See this section.
- Checking the result
- The profile's witness statement is signed; check it against /verify/keys before relying on it.
- Revocation and removal
- Not applicable. Public reads take no credential. Revoke a workspace API key under Connect, API and webhook.
- How the examples are held
- Executed by tests against public/openapi.json.
Troubleshooting
- A company you expected answers found: false. Search by website domain, not name; a shared name returns slugs, not a profile.
- The response is 503 with record_unavailable or witnessed_record_unavailable. Trooth could not read its own record. Retry after the stated seconds; it does not mean no profile.
- Fields you used are missing. Check the contract version you asked for. contract=2 is current; older shapes are documented in the reference table.
Markup-free twin (llms.txt): reference
- Quick start
- Fetch /network/company/<slug>/llms.txt for any published company.
- Prerequisites
- An HTTP client that accepts text/markdown. No key.
- Examples
- Built by the editor's machine-preview function; two renders of one record are byte-identical.
- Access and data boundaries
- Only the published record: never the draft or documents under NDA.
- Uncertainty in answers
- An unsupplied fact reads as not supplied; an unreadable witnessed record says so under Record on the Trooth Network.
- Versions
- The file states when the published record last changed.
- Errors
- An unpublished or unknown company answers 404.
- Checking the result
- The twin points to the signed JSON record; verify that, not the text.
- Revocation and removal
- Not applicable. No credential. Unpublishing the profile removes the twin.
- How the examples are held
- Executed by tests against lib/network/llms-twin.ts buildCompanyLlmsText, the function the public route serves.
Troubleshooting
- The twin is older than the page you edited. The twin follows the published record, never the draft. Publish your edits.