Last updated: May 9, 2026
Peekop carries documents that decide who gets a policy, who closes a sale, and what gets countersigned. This page is the technical counterpart to our trust overview — what we encrypt, how we authenticate, where data lives, and which certifications we have today versus on our roadmap.
No account required does not mean anonymous signing. Peekop uses recipient-specific links and exact recipient email verification before protected signing actions are allowed.
For the public-language explanation of recipient-bound verification, see How Peekop Verifies Signers Without Accounts. For the direct signing-authority question, see Can Anyone With a Peekop Link Sign?.
A note on honesty
Every claim on this page is backed by code in our repo or a contractual commitment from a named provider. We are an early-stage company. Where we don't yet have a certification (SOC 2, HIPAA, ISO 27001), we say so plainly rather than implying it. If you're evaluating Peekop for vendor approval, email security@peekop.com and we'll respond with whatever supporting documentation your team needs.
Peekop includes application cryptography for security-sensitive flows and relies on provider-managed storage protections for the underlying database and file infrastructure.
| Algorithm | AES-256-GCM |
|---|---|
| Key length | 256-bit |
| IV | 96-bit (12 bytes), random per record |
| Auth tag | 128-bit (16 bytes), GCM-native |
| Key storage | Server-side environment variable, never written to client |
| Source | packages/core/src/encryption.ts |
The repository proves the encryption helper and the token-signing model. It does not, by itself, prove universal application-layer encryption for every stored document, artifact, or database row, so we describe those storage protections conservatively.
Peekop is intended to run behind HTTPS in production. Transport security for the dashboard, signing page, API, and edge routing is primarily enforced by the hosting and proxy infrastructure rather than by application code in this repository.
Every uploaded PDF is hashed with SHA-256 at upload time. The hash is stored alongside the document record. When the recipient submits the signing completion request, the document hash can be compared against the stored value using a timing-safe comparison (crypto.timingSafeEqual), so mismatches between the uploaded document and the submitted signing payload are detected.
| Hash algorithm | SHA-256 |
|---|---|
| Comparison | Constant-time (timing-attack resistant) |
| Verified at | Signing completion when the client submits a document hash |
| Source | packages/core/src/hash.ts |
Signing links are not opaque UUIDs and are not JWTs. Each link embeds an HMAC-SHA256 signed token whose payload includes the request ID, recipient ID, issuer ID, an expiration timestamp, and a random nonce. Tokens are verified server-side with a timing-safe comparison; tampered or expired tokens are rejected before any database lookup occurs.
packages/core/src/tokens.tsPeekop records the request journey and related evidence for signing activity, recipient verification, and completion.
Recorded events include:
That evidence contributes to the request journey, certificate of completion, and Completion Record associated with a signed request.
Peekop includes several controls commonly expected in U.S. electronic-signature workflows:
Whether a specific signature is enforceable depends on the document type, jurisdiction, and how the workflow is used. Peekop is NOT, and does not claim to be, a notary or a Remote Online Notarization (RON) service. For notarial acts you need a commissioned notary; we are not a substitute.
Peekop is multi-tenant: every database row is owned by an organization_id foreign key, and every authenticated query is filtered by the organization resolved from the requesting user's session. There is no admin path that returns documents across organizations.
Public signing endpoints (the recipient-facing pages, which do not require account creation) are scoped to an individual signing request via the HMAC-signed token, not to an organization. Delivery is separate from verification: the token identifies the request, while recipient verification is what moves the request into Verified Access and a protected signing session.
Sender authentication is handled by Supabase Auth. Supported methods at present:
Sessions are stored as opaque refresh tokens inlocalStorage with rotating access tokens (default 1-hour TTL). Logging out revokes the refresh token server-side.
Retention and deletion behavior should be treated as an operational policy area rather than a product guarantee unless covered by your agreement with Peekop.
Peekop relies on a small set of named providers to deliver the service. Each is bound by their own DPA (where applicable) and their own security certifications.
| Provider | Purpose | Region |
|---|---|---|
| Supabase | Postgres database, auth, file storage | See provider documentation |
| Vercel | Sender dashboard hosting (apps/web) | See provider documentation |
| Railway | API + signing-page hosting | See provider documentation |
| Resend | Outbound transactional email | See provider documentation |
| Stripe | Subscription billing (sender side only) | See provider documentation |
| Anthropic | AI field detection on uploaded PDFs | See provider documentation |
Anthropic processes the rendered images of uploaded PDFs to detect field positions; per their commercial terms they do not train on customer-submitted content.
We will notify customers (via email + a banner in the dashboard) at least 30 days before adding a new subprocessor that handles document content.
In the event of a security incident affecting customer data, we commit to:
To report a suspected vulnerability, email security@peekop.com. We do not run a paid bug-bounty program at this stage but will acknowledge in good faith any report we act on.
This is the part of every security page where companies are tempted to imply more than they have. We will be specific.
| SOC 2 Type I | Not yet — planned 2026 H2 once we cross 25 paying customers |
|---|---|
| SOC 2 Type II | Not yet — follows Type I by ~6 months |
| HIPAA BAA | Not signed — Peekop is not a HIPAA-covered service today |
| ISO 27001 | Not certified — no current roadmap commitment |
| GDPR | We honor data-subject access and erasure requests; we are not currently DPO-appointed and do not market into the EU |
| CCPA | We honor California-resident access and deletion requests via security@peekop.com |
| ESIGN Act / UETA | Peekop includes consent flow, recipient verification, and completion evidence designed to support U.S. electronic-signature workflows |
For carriers and broker-dealers conducting vendor risk assessments, we are happy to complete a SIG Lite or CAIQ questionnaire on request. Email security@peekop.com.
For security questions, vendor evaluation, or to report a vulnerability: