Trust at Agent402.
How the hosted service handles data and incidents. Each statement links to the page, the live surface or the code that shows it.
Subprocessors
These providers receive buyer data, each only for the purpose listed. The privacy policy describes each in full.
| Category | Provider | What it receives |
|---|---|---|
| Hosting and backup storage | Railway | Everything the service stores, and the nightly backups (encrypted before upload) |
| Network edge | Cloudflare | Every request to the site and its answer, with the caller's IP address and request headers, on the way to and from our server |
| Card payments | Stripe | Card details on its hosted checkout, the email entered there; when the optional Stripe ledger mirror is on, settled on-chain payments (wallet address, transaction id, amount) for bookkeeping, with no email or card data |
| Transactional email | ZeptoMail, with Resend as a fallback | The address and the message: report links, monitor reports, alerts |
| AI models | OpenAI, and model operators via OpenRouter | Prompts and inputs to the /v1 endpoints, model-backed tools and report synthesis |
| Web search and data | Brave Search API, Exa, the X API | The query, URL, handle or post id a search tool is given |
| Code sandbox | E2B | The code sent to the code-run tools |
| Tool routing | TypeSafe | The task text given to route and decide |
| Payment verification | Coinbase CDP and per-chain facilitators, Tempo's relay | The signed payment, to verify and settle it |
| Sanctions screening | Tempo's transfer data feed | A paying wallet address, to read its recent inbound transfers |
| Site analytics | Google Analytics (advertising features off), PostHog | Page visits and browser details, relayed to PostHog by our server without your IP address. PostHog also receives the server's service events: tool name, HTTP status, price, settlement chain, the paying wallet address, the first word of the caller's User-Agent, a keyed hash of one declared input field and our error message |
| Batched payments | Circle Gateway | A batched payment, verified and settled off chain |
A tool that fetches a URL or reads a public data source sends that site what the lookup needs. When route-and-execute or a decision buys from an outside seller to resell its answer, that seller receives the request it needs to answer, sent and paid for by us.
What we store, and where
| Store | What it holds | Kept |
|---|---|---|
| State database (Postgres) | The sales and refund ledgers, card-purchase records, monitor and alert subscriptions, wallet-keyed memory, async job and task results | Per record class, as the privacy policy lists |
| Redis | Shared rate-limit and free-trial counters, the cached answer to an identical retry, and a money record whose database write has not landed yet | Counters for their window (one hour, or 24 hours for the free trial's daily allowance); cached answers up to 10 minutes; a money record until its database write commits |
| Backups (separate object storage) | A nightly copy of the state database | 14 days |
| Operational logs | Request paths and status codes | The hosting platform's log retention |
No accounts and no passwords. Tool inputs are processed in memory and not stored, except where the privacy policy says otherwise.
Encryption
In transit: every answer carries Strict-Transport-Security: max-age=63072000; includeSubDomains; preload, so a browser that has seen it reaches agent402.tools over HTTPS only, for two years.
At rest: each backup object is encrypted on our server with AES-256-GCM before upload, so the storage holds ciphertext. In production the backup word on /api/gateway-status reads unencrypted if the key is missing, and that pages. A prepaid credits key is stored only as a hash. Links we email (confirmations, unsubscribes, monitor management) are HMAC-signed with dedicated secrets and verified in constant time.
Backups and restore tests
The server copies every table of the state database to separate object storage once a night, in one consistent snapshot, starting at 04:00 UTC, and deletes each copy after 14 days. The backup word reads stale when no run has succeeded in 26 hours, and failed or held when a run did not finish; both outside observers page on each word.
Every change runs the restore tests before it merges: one decrypts and restores every object shape the nightly run writes, another restores state tables into a fresh Postgres schema and checks they come back equal.
Incidents and status
/status shows only what two observers outside production saw: a scheduled heartbeat and an outside probe that runs every five minutes. A day with no observation shows as no data. Service alarms are public words on /api/gateway-status, and the observers page the operator on the ones that need a person, one issue per alarm.
A paid call that was charged but failed is recorded as a debt in the refund ledger and repaid only after the charge is proven on chain. Once a debt has waited past a short grace period, the refundsOwed word reads owed and pages until it is repaid. A card report that fails to generate is refunded to the card.
Security reports
Report a vulnerability through a private advisory on GitHub or by email to mike@agent402.tools. We acknowledge within two business days, fix through the same CI pipeline every change goes through, and note the fix in the changelog once it has shipped. Every heartbeat checks for reports waiting in triage and raises an alert past a set limit.