Fidren Become a design partner
Security model

Influence over a decision, without control of the transaction.

Fidren can change what your system does about a payment. It does nothing to the payment itself. That separation is the security model, and the rest of this page is either a consequence of it or a control that protects it.

Fidren holds no funds, no private keys and no signing authority. That bounds custody risk specifically: a compromise could still affect decision integrity, availability, confidentiality or the records, but it would not expose Fidren-held funds or signing keys, because there are none to expose.

Non-custodial boundary

Architectural, not a stage. No configuration turns it off and no release changes it.

Fidren cannot:

  • hold funds
  • hold private keys
  • have signing authority
  • execute payments
  • settle transactions
  • replace your wallet or payment infrastructure
  • present as a wallet, a payment processor or an x402 facilitator

Stated as capability rather than as policy, because a security reader is asking what is possible, not what is intended. ALLOW_WITH_ESCROW means use an escrow, never use ours: Fidren recommends the condition, and an escrow you choose and control enforces it.

A test sweeps the routes the server serves and the paths the API contract declares, and fails if a custody, transfer or signing operation appears. That is a regression guard against future drift, not a proof that no such capability could ever be added.

Trust boundaries

Three layers, each answering for a different thing.

Who operates what, on the path to a payment.

Fidren controls its origin application. Cloudflare operates the managed edge in front of the public site and the API hostname. Your infrastructure owns execution — and only that layer moves value.

  • Fidren-controlled

    Origin

    • Answers a decision request from the record it holds
    • Authenticates and authorises every protected call
    • Records what each side reports afterwards
  • Cloudflare-managed

    Edge

    • Terminates TLS in front of the public site and the API hostname
    • Observes request metadata, including the caller address
    • Runs bot and security checks, and injects a script to do so
  • Customer-controlled

    Execution

    • Holds the keys and the funds
    • Decides what to do with a decision
    • Executes, or declines to execute, the payment

The edge is a provider Fidren selected and remains accountable for selecting. It is not an authorization boundary, though: a Decision API call is authorised by the credential the origin checks, never by having arrived through the edge.

API and request security

Integration mechanics are on Developers. These are the properties worth knowing first.

Authentication, validation and limits.

Authentication is explicit, per route
Each protected route attaches its own guard rather than relying on a global hook with an exemption list, so the requirement is visible where the route is declared. Every route is also classified as public or protected, and the build reconciles that classification against the server's own routing table and then calls each route without a credential to confirm the answer matches its class. A new route nobody classified, or a protected one that lost its guard, fails the build. This is a build-time gate rather than a runtime property, which is why the page does not use a stronger word for it.
Some surfaces are public by design
Reading an address profile, health and readiness, the API document, and the dispute channel. The last is the deliberate one — a party contesting a record is usually not a customer and holds no key, so requiring one would turn a right of reply into something sold to the people being assessed. Those routes are written for a hostile caller.
Keys are stored as a digest, never in the clear
The plaintext is generated server-side, shown once, and not written down; a leaked database yields no usable credential. Absent, malformed and unknown keys all return the same refusal, so error text cannot be used to enumerate valid ones. A revoked key stops working on the next request. Keys are never written to a log — not the key, not a prefix of it.
Input is validated before anything acts on it
Bodies and parameters are parsed against a schema at the route boundary; oversized bodies are refused before parsing. Responses are assembled field by field rather than serialised from engine objects, which is what keeps the internal scoring breakdown out of a reply.
Rate limits key on a credential Fidren issued
Not on the one in the request. A key the service does not recognise is not a credential and buys nothing; that caller falls back to a bucket keyed on their network address. Without that, inventing a fresh key per request would produce an empty budget at the higher allowance. The counter is per process, so a second replica would hold its own.

Not implemented

Named because a reader will look for them, and discovering their absence during integration is worse:

  • key rotation as a workflow — revoke and create
  • key expiry
  • scopes or per-key permissions
  • IP restrictions
  • separate test and live keys
  • self-service key creation
  • a third-party audit, a certification or a compliance attestation
  • a formal vulnerability disclosure programme
Records and integrity

Three levels, and collapsing them is how a hash chain gets over-read.

What a chain of reports proves.

Each side of an operation keeps its own chain. Every report commits to the digest of its predecessor and the server computes the links, so a reporter cannot reorder or edit its own account after the fact.

Recorded
An authenticated caller submits a report naming a side and an address. It is recorded and attributed to the API key. Two narrow guards apply: a side already reported by one address cannot be taken over by another, and one address cannot hold both sides of the same operation.
Signed
A report may carry a signature from the reporting address. Signing is optional; a signature is verified and stored only if it verifies, so a stored signature is a verified one and an invalid one is dropped rather than kept. Only a signature shows the reporter controls the address it names — an unsigned report rests on the API key alone.
Corroborated
Both sides reported, their accounts agree, and each signed its own. Only that combination counts as coverage. Separately signed reports may still come from parties under common control, so corroboration is not independent verification.
Integrity is not truth

The chain establishes the integrity and ordering of a reported history against the reporter, not that the history is accurate: a reporter who lies consistently produces a valid chain of lies. Nothing is anchored to an external notary, so wholesale rewriting by whoever operates the database is not something the chain alone would reveal.

The endpoints and request shape behind each level are on Developers.

Web and data handling

A policy that lives in the repository rather than in a control panel.

The public site, and what is written down.

Every page renders on the server. Fidren's public application ships no application JavaScript of its own, which reduces the application-side client scripting attack surface, and output is escaped on the server on every interpolated value — including anything a visitor typed into a form and got back on an error page. A browser may still execute the security script the edge injects, so what the origin emits is not what a visitor runs.

The content security policy denies everything by default and names only what Fidren actually serves, with no 'unsafe-inline' in either the script or style directive — the views carry no inline styles precisely so the allowance can stay off. A per-response nonce is present not because Fidren renders inline script, but so the edge's injected security script can be stamped with it under a strict policy. The two are designed to compose under a real browser and the edge that fronts it; confirming that in practice belongs to this site's browser release checks. Framing is denied, transport security is sent over HTTPS, and features an institutional site has no business requesting are turned off.

Indexing is decided per route: the institutional pages are indexable, and the address lookup is not — it carries the directive in both the document and the response header, and no listing makes addresses discoverable in bulk. It is deliberately not blocked in robots.txt, because a crawler that is blocked never fetches the page and so never reads the directive.

Credentials are redacted by the logger rather than remembered at each call site: the Decision API replaces authorization and API-key headers and cookies before a line is written, and this site, which issues no key and sets no cookie of its own, redacts the same credential headers a visitor could still send it. Contact and design-partner message bodies are not logged; a delivery failure records operational metadata and none of what the visitor wrote.

What this is not

A description of redaction paths is not a claim that no secret can ever appear anywhere — that would have to hold across the edge, the host and every operator, and Fidren cannot defend it end to end. Retention periods and privacy commitments are likewise not stated here; they need a decision this project has not taken.

The two public forms share one submission path. Fields are validated on the server whatever the browser did, values that return on an error page are escaped, there are anti-spam measures, submissions are rate limited per sender and in aggregate, and a submission token is single-use so an accidental double click is refused while a deliberate retry is not. Delivery fails closed: a failed send is reported as failed and never as received, queued or saved, and with no real transport configured — or before the privacy review and the named data controller are settled — the form does not accept submissions at all rather than accepting them into nothing.

What Fidren does not claim

Controls are not outcomes, and reading them as outcomes is the mistake this section exists to prevent.

None of the above amounts to:

Safety
A decision is an assessment of a record, not a guarantee about an outcome. ALLOW means the record supports paying on these terms, and records are incomplete.
Fraud prevention
Fidren does not detect fraud, prevent it, or claim a rate at which it would. Nothing here has been measured against a fraud baseline.
Counterparty truth
Part of the record comes from what interested parties report. Fidren records that a party said something, never that it is true.
Custody protection
Fidren cannot lose customer funds through a custody compromise, because it never holds them. A wrong decision can still contribute to financial loss if the caller acts on it.
Payment finality
Fidren plays no part in making a payment final, and sees only what is observable on chain and what a party reports.
Certification
No third-party audit, no certification, no compliance attestation. The only review to date is internal.
Responsibility

Enforcement stays with the caller, and that is the design.

A Fidren decision is one input to your transaction policy. You keep the wallet controls, the spending limits and the approval paths you already have: a recommended ceiling is a recommendation your infrastructure applies, and a BLOCK is an answer your infrastructure honours. Fidren enforces neither. A system that treats a Fidren answer as its only control has moved a decision to a service that cannot carry it.

Access to past decisions through a customer interface is not available yet. Today the decision is what comes back on the call. What the decision means, and how the five actions differ, is on Product.

Calling Fidren alongside your existing flow and comparing the answers, without gating a payment on them, needs nothing switched on at this end — there is no mode to enable, because Fidren never had the ability to act. Shadow Mode describes the posture.

Access

Fidren is early and is looking for design partners. Commercial pricing is not published yet.

Evaluate it against your own boundary.

The security conversation is a better one when it starts from a real integration. If you have a system that is about to pay someone, we would like to hear how this boundary fits it.