each.FR ENSign in

Paymentssigned, capped.

Module Paiements · v0 · draft contract, test mode only.

Module stateTEST

Not configured yet

The Payments module is ready to connect. The Each team adds the provider key as a server secret: it is never entered in a browser, including here.

Try a simulated paymentTEST

Try a simulated payment

No provider, no real money: the core checks the caps, you confirm with your passkey and Each issues a signed test proof.

Sign in first to simulate a payment. Sign in

Contract · payments@v0Markdown · JSON

The Payments module lets a person pay a brand on Each: one-time payment, brand subscription or usage fee. Every transaction produces a signed proof anyone can verify. Each: test mode only, no real payments.

Status: draft · updated 2026-10-30 · JSON: /en/surface/payments/v0.json

What it does

The core (non-modifiable)

The Each core cannot be modified by a module. A module may extend it, never bypass it. The core owns: passkeys (who confirms), consent (nothing is paid without passkey confirmation), dollar caps and proof signing.

CapValue
CurrencyCAD
Per transaction$500
Per person per day$1,000
Per brand per day$5,000
Minimum$0.50
Test mode onlyyes

Each caps, enforced by the core before any provider call. A module may ask for lower caps, never higher ones.

Scopes

Flow

  1. The person picks a payment (kind, brand, amount).
  2. The core checks the session, currency and caps.
  3. The person confirms with their passkey (consent).
  4. The module creates the payment with the provider (or simulates it in Each).
  5. The provider confirms through a signed webhook; Each checks the signature and ignores duplicates.
  6. Each issues a signed proof of the transaction.

Webhooks

Signed proof for every transaction

Every transaction produces a signed proof (ES256, same public key as gesture proofs: /.well-known/each-keys), append-only. Verifiable at /verifier/{id}.

Type: each.payment · fields: v, type, id, issuer, environment, issued_at, test, person, brand, payment.kind, payment.amount_cents, payment.currency, payment.interval, payment.provider_mode, statement, confirmation (passkey), core.version, module.version

API

Configuration

The provider key is a server secret added by the Each team. It is never entered in a browser. Without a key: "module not configured" state. Live keys are refused in Each.

Versions

Semantic contract version: v0 = draft. Any breaking change creates v1 at a new address; v0 stays readable. To propose a change: copy src/modules/payments/, edit contract.json, open a review.

Taxes: coming soon

Open questions