Security

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.

Stored data protections

Peekop includes application cryptography for security-sensitive flows and relies on provider-managed storage protections for the underlying database and file infrastructure.

AlgorithmAES-256-GCM
Key length256-bit
IV96-bit (12 bytes), random per record
Auth tag128-bit (16 bytes), GCM-native
Key storageServer-side environment variable, never written to client
Sourcepackages/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.

Encryption in transit

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.

  • Browser ↔ hosted application endpoints over HTTPS in production
  • Server ↔ database and provider connections through managed infrastructure
  • Outbound webhooks validated for safe public HTTPS targets in production
  • Webhook payloads signed with HMAC-SHA256

Document integrity

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 algorithmSHA-256
ComparisonConstant-time (timing-attack resistant)
Verified atSigning completion when the client submits a document hash
Sourcepackages/core/src/hash.ts

Signing tokens & link expiration

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.

  • Default token TTL: 30 days, configurable per request (1-365 days)
  • Tokens can be revoked instantly via the dashboard's "Void" action — token check fails on the next access
  • Protected signing actions only begin after exact recipient email verification moves the request into Verified Access
  • Each recipient on a multi-signer request gets a distinct token; one signer's token cannot be used to view or sign on another's behalf
  • After completion, the signing link no longer opens another signing session
  • Source: packages/core/src/tokens.ts

Audit trail

Peekop records the request journey and related evidence for signing activity, recipient verification, and completion.

Recorded events include:

  • Request created, sent, viewed, signed, declined, revoked, expired
  • Verified Access recorded before protected signing activity begins
  • Recipient-level state transitions (per-signer)
  • Email opens, link clicks, reminder sends
  • Document hash verification at signing time
  • Each event captures: timestamp, IP address, user-agent, and the user or recipient ID responsible

That evidence contributes to the request journey, certificate of completion, and Completion Record associated with a signed request.

Electronic signature workflow evidence

Peekop includes several controls commonly expected in U.S. electronic-signature workflows:

  • Consent flow: the signer experience presents an electronic-consent step before the signing screen
  • Intent: protected signing actions occur inside the signing session after verification and user interaction
  • Attribution: a recipient-specific link does not, by itself, grant signing authority. Exact recipient email verification is required before Verified Access and protected signing activity
  • Evidence: the request journey can preserve timestamps, recipient activity, IP address, user-agent, and completion artifacts
  • Integrity checks: document hash verification helps detect mismatches at signing completion

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.

Multi-tenant isolation

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.

Authentication & session management

Sender authentication is handled by Supabase Auth. Supported methods at present:

  • Magic link (one-tap email link, expires in 60 minutes)
  • Email + password (Supabase-hashed with bcrypt, never logged or transmitted to Peekop's servers in plaintext)
  • Google OAuth and GitHub OAuth (planned, in active configuration as of May 9, 2026)

Sessions are stored as opaque refresh tokens inlocalStorage with rotating access tokens (default 1-hour TTL). Logging out revokes the refresh token server-side.

Data retention & deletion

Retention and deletion behavior should be treated as an operational policy area rather than a product guarantee unless covered by your agreement with Peekop.

  • Signed requests: completion evidence and artifacts remain associated with the request while the account and related records remain active
  • Voided / declined / expired requests: request-state evidence can remain visible for operational history
  • Deletion requests: contact security@peekop.com for current handling and contractual terms
  • Backups and provider retention: managed infrastructure may retain backup copies outside the primary application surface

Subprocessors

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.

ProviderPurposeRegion
SupabasePostgres database, auth, file storageSee provider documentation
VercelSender dashboard hosting (apps/web)See provider documentation
RailwayAPI + signing-page hostingSee provider documentation
ResendOutbound transactional emailSee provider documentation
StripeSubscription billing (sender side only)See provider documentation
AnthropicAI field detection on uploaded PDFsSee 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.

Incident response

In the event of a security incident affecting customer data, we commit to:

  • Investigate immediately, with the goal of containment within 24 hours of detection
  • Notify affected customers within 72 hours of confirming the incident, including: what was accessed, what was not, what we did about it, and what they should do
  • Publish a post-incident report within 30 days describing root cause and remediation
  • Cooperate fully with any required regulatory disclosures (state breach-notification laws, etc.)

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.

Certifications & frameworks

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 INot yet — planned 2026 H2 once we cross 25 paying customers
SOC 2 Type IINot yet — follows Type I by ~6 months
HIPAA BAANot signed — Peekop is not a HIPAA-covered service today
ISO 27001Not certified — no current roadmap commitment
GDPRWe honor data-subject access and erasure requests; we are not currently DPO-appointed and do not market into the EU
CCPAWe honor California-resident access and deletion requests via security@peekop.com
ESIGN Act / UETAPeekop 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.

Contact security

For security questions, vendor evaluation, or to report a vulnerability:

Last updated May 9, 2026. We update this page whenever a material control changes. If you spotted an inconsistency between this page and the privacy policy or terms, the privacy policy and terms govern. Email us and we'll fix the inconsistency here.