Compliance you can verify.
The answers a security review asks for, each with the code that makes it true. What is not true yet is written next to it rather than left out. 6 of 7 framework statuses name the modules that implement them; none of them is an audit result.
Uptime commitment: 99.9% on the Team plan, per the Terms of Service.
Certifications & frameworks
SOC 2 Type II
AICPA TSC 2017
Automated evidence collection across the five Trust Services Criteria.
Pact runs an automated SOC 2 evidence engine that turns the live state of tenant isolation, RBAC, encryption, audit logging, sub-processor management and data deletion into dated, hash-stamped artifacts. Collection is operator-triggered today — a scheduled nightly run is defined but not yet enabled. Monthly bundles and an auditor package are generated on demand.
Backing code presentISO/IEC 27001:2022
ISO/IEC 27001:2022
Annex A control matrix, risk register and Statement of Applicability.
All 93 Annex A:2022 controls are modelled in code. Controls Pact discharges technically — encryption, access control, logging, deletion — are pre-populated as implemented in the Statement of Applicability with the implementing subsystem cited.
Backing code presentHIPAA
Self-serve Business Associate Agreement and PHI-grade safeguards.
A standard HIPAA Business Associate Agreement (45 CFR §§164.502(e), 164.504(e), 164.314(a)) is generated on demand, hash-stamped for verification, and ready for counter-signature. ePHI is encrypted in transit and at rest; on the Team plan, contact emails, phone numbers and names can also be field-encrypted under a key the workspace holds in its own cloud KMS.
Backing code presentPCI DSS
PCI DSS v4.0 — SAQ A
Pact never stores, processes or transmits cardholder data.
Payment card data is handled entirely by Stripe, a PCI DSS Level 1 service provider. Pact's systems never touch primary account numbers, so the platform is eligible for the SAQ A self-assessment with the smallest possible card-data scope.
SOC 3
Public-facing general-use report derived from SOC 2 evidence.
A SOC 3 report is the freely-distributable summary of the SOC 2 examination. Pact generates the public-safe subset of its SOC 2 evidence as a SOC 3 summary.
Backing code presentGDPR
Consent-native by design; DSR workflow with a 30-day statutory clock.
Consent, lawful basis and suppression are first-class. Data Subject Requests (access, portability, deletion, rectification) run through a tracked workflow with auto-collection, and each erasure records what it removed, table by table. Standard Contractual Clauses are generated for EU transfers.
Backing code presentCCPA / CPRA
Consumer rights honored through the same DSR workflow as GDPR.
Access, deletion and opt-out rights under the CCPA/CPRA and the newer state privacy laws (VCDPA, CPA, CTDPA) are served by the unified Data Subject Request workflow and the consent ledger.
Backing code presentSecurity capabilities
Encryption in transit and at rest
TLS 1.2 or 1.3 on every public endpoint, with HSTS. The database, its backups and object storage are encrypted at rest by the providers. Pact encrypts call recordings, integration tokens and authenticator secrets itself before storing them, and can field-encrypt contact emails, phone numbers and names (AES-256-GCM) under a key your workspace holds in Azure Key Vault, AWS KMS or Google Cloud KMS.
Tenant isolation
A signed-in session or a workspace API key is bound to one workspace, and a request for another is refused. Every tenant table also carries a database row-level policy; that layer is in a staged rollout. CI checks every change for scoping gaps, and the known-gap count only goes down.
Access control
Seven roles from viewer to owner. SAML 2.0 and OIDC single sign-on with an SSO-required switch, SCIM 2.0 provisioning, and a passkey-required switch. Authenticator-app codes confirm sensitive actions.
Append-only audit log
Security-relevant events go to a log the database refuses to edit. It is kept 7 years by default (you can choose 12 to 240 months) and exports as CSV, JSONL or XLSX.
Data subject requests
Access, portability, deletion and rectification requests carry a 30-day clock with escalation. An erasure records what it removed, table by table.
Consent and suppression
Consent and lawful basis are recorded per contact with their history, and a bounce, complaint or unsubscribe suppresses the address before any email goes out.
Included, not sold as add-ons
The controls a security review asks for come with the plan. There is no separate security package, and none of these is priced per event or as a share of spend.
Single sign-on
Pro and TeamSAML 2.0 and OIDC, with a switch that makes SSO the only way in.
SCIM provisioning
Pro and TeamSCIM 2.0 user and group provisioning from your identity provider.
Audit log
Pro and TeamAppend-only, kept 7 years by default, exportable as CSV, JSONL or XLSX.
Full data export
Every plan, including Free and the 30 days after you cancelOne archive with a file per table, a manifest and your audit history.
Data subject request tooling
Every planAccess, portability, deletion and rectification, each on a 30-day clock.
Bring-your-own key
TeamYour key in your cloud KMS for contact fields.
Where each of these is set in the code (14)
- api/routes/auth_saml.py:71
- api/routes/auth.py:489
- web/src/lib/marketing/pricing.ts:82
- api/routes/scim.py:80
- alembic/versions/0576_audit_context_and_immutability.py:113
- api/routes/audit_log.py:589
- web/src/lib/marketing/pricing.ts:83
- core/data_portability.py:31
- core/data_portability.py:104
- web/src/lib/marketing/pricing.ts:63
- core/dsar.py:71
- core/dsar_reach.py:1
- core/encryption/kek_provider.py:5
- web/src/lib/marketing/pricing.ts:103
Paths in Pact’s source code, for a reviewer who wants to walk through one with us at security@pact.place.
Encryption
What is encrypted, by whom, and with what. Where the control belongs to a provider, it says so.
In transit
- Public endpoints
- TLS 1.2 or 1.3 only; TLS 1.0 and 1.1 are refused. HTTPS is enforced, with HSTS for two years.
- Application to database
- Every connection requires TLS with SCRAM channel binding.
At rest
- Database, backups and object storage
- Encrypted at rest by the providers (Neon for Postgres and its point-in-time recovery, Fly Tigris for files). This is the providers' control; Pact relies on their attestation.
- Call recordings
- Encrypted by Pact before upload (Fernet: AES-128-CBC with an HMAC-SHA256 integrity check), on top of the storage provider's encryption.
- Integration tokens and authenticator secrets
- Encrypted by Pact with the same scheme before they are stored.
- Contact emails, phone numbers and names
- Can be field-encrypted with AES-256-GCM under a key your workspace holds in Azure Key Vault, AWS KMS or Google Cloud KMS. You turn it on per workspace, and the key-encryption key stays in your KMS.
Not yet: If your key service cannot be reached, the write is stored without field encryption rather than refused.
- Passwords and API keys
- Passwords are hashed with bcrypt. API keys are stored only as a hash.
Where each of these is set in the code (14)
- api/security_headers.py:59
- fly.toml:213
- web/fly.toml:136
- docs/ops/transport-edge-audit-2026-09-16.md:125
- docs/soc2/policies/encryption.md:84
- core/voice_recordings.py:774
- core/security/fernet.py:11
- core/security/fernet.py:5
- core/iam/totp.py:25
- core/encryption/envelope.py:16
- core/encryption/kek_provider.py:5
- core/encryption/contact_ops.py:24
- core/passwords.py:34
- models/api_key.py:70
Paths in Pact’s source code, for a reviewer who wants to walk through one with us at security@pact.place.
Retention defaults
How long Pact keeps each kind of record when nobody changes anything, and what a workspace admin can change.
| Record | Kept by default | You can change |
|---|---|---|
| Audit log | 7 years | 12 to 240 months |
| Call recordings | Off until you turn recording on; then 90 days (7 years for HIPAA workspaces) Not yet: The job that deletes a recording when its window ends is not switched on yet, so recordings are kept until you delete them or close the workspace. | Per workspace |
| Signed-in sessions | 7 days idle, 30 days at most | Shorter, per workspace and per role |
| API usage and AI tool-call logs | 90 days | Fixed |
| Workspace export downloads | Link valid 7 days; the file is kept 30 days | Fixed |
| After you cancel | Full export stays available for 30 days Not yet: Deleting the workspace afterwards is done on request, through a pipeline a person approves (export, verify, delete); it does not run on its own. | Fixed |
| Data subject requests | Each request carries a 30-day clock, with escalation before it lapses | Fixed |
Audit log
7 years
You can change it: 12 to 240 months
Call recordings
Off until you turn recording on; then 90 days (7 years for HIPAA workspaces)
You can change it: Per workspace
Not yet: The job that deletes a recording when its window ends is not switched on yet, so recordings are kept until you delete them or close the workspace.
Signed-in sessions
7 days idle, 30 days at most
You can change it: Shorter, per workspace and per role
API usage and AI tool-call logs
90 days
Fixed
Workspace export downloads
Link valid 7 days; the file is kept 30 days
Fixed
After you cancel
Full export stays available for 30 days
Fixed
Not yet: Deleting the workspace afterwards is done on request, through a pipeline a person approves (export, verify, delete); it does not run on its own.
Data subject requests
Each request carries a 30-day clock, with escalation before it lapses
Fixed
Where each of these is set in the code (17)
- core/tenant_settings.py:148
- api/routes/admin_settings.py:46
- core/audit_retention.py:1
- core/voice_recordings.py:457
- core/voice_recordings.py:458
- api/worker_bootstrap.py:2109
- core/tenant_settings.py:142
- core/tenant_settings.py:143
- core/iam/session_policy.py:1
- core/api_monetization/retention.py:44
- core/mcp_invocation_retention.py:35
- core/data_portability.py:92
- core/backup/tenant_export.py:38
- core/data_portability.py:104
- core/tenant_lifecycle/due.py:10
- core/dsar.py:71
- api/worker_bootstrap.py:115
Paths in Pact’s source code, for a reviewer who wants to walk through one with us at security@pact.place.
Sub-processors
Every third party that can process data on Pact’s behalf. The same register fills Annex II of the Data Processing Agreement, so the two cannot disagree. Revised . Certifications are what each vendor publicly claims, not reports Pact holds.
Always engaged · 5
| Provider | Purpose | When engaged | Location | Certifications claimed |
|---|---|---|---|---|
| Fly.io | Application and worker runtime — the API, web frontend and background workers | Always: part of how the service is delivered | United States (iad) | SOC 2 Type II |
| Neon | Managed Postgres — the primary application database and its point-in-time recovery | Always: part of how the service is delivered | United States | SOC 2 Type II |
| Cloudflare | CDN, DNS and WAF in front of the web app and marketing site | Always: part of how the service is delivered | Global edge (US-headquartered) | SOC 2 Type IIISO 27001 |
| Fly Tigris | Object storage — call recordings, exports, archived evidence and uploaded files | Always: part of how the service is delivered | United States | Not recorded |
| Resend | Email delivery — invitations, password resets, notifications and sequence email | Always: part of how the service is delivered | United States | SOC 2 Type II |
Fly.io
United States (iad)Application and worker runtime — the API, web frontend and background workers
Neon
United StatesManaged Postgres — the primary application database and its point-in-time recovery
Cloudflare
Global edge (US-headquartered)CDN, DNS and WAF in front of the web app and marketing site
Fly Tigris
United StatesObject storage — call recordings, exports, archived evidence and uploaded files
Resend
United StatesEmail delivery — invitations, password resets, notifications and sequence email
Engaged only when a feature that uses them is in use · 15
A workspace that never places a call sends no audio to a speech vendor. Several of these can also run on a key your workspace supplies, in which case the vendor bills you directly.
| Provider | Purpose | When engaged | Location | Certifications claimed |
|---|---|---|---|---|
| Anthropic | AI model inference for AI features (no training on customer data, per Anthropic's terms) | When a workspace uses an AI feature, on the workspace's own Anthropic key or on Pact's | United States | SOC 2 Type II |
| Stripe | Subscription billing and payment processing | For workspaces that pay by card; holds the billing contact and payment details | United States | PCI DSS Level 1SOC 2 Type II |
| Sentry | Application error monitoring; error reports can include text from the failing request | When error monitoring is configured for the service | United States | SOC 2 Type II |
| Twilio | Telephony — calls, SMS and the voice media relay. On relayed calls Twilio's own partners transcribe (Deepgram) and voice (ElevenLabs or Amazon Polly) the audio | When a workspace places or receives calls or sends SMS | United States | SOC 2 Type II |
| Deepgram | Speech-to-text transcription of calls and in-app microphone audio | When calls are transcribed, on the workspace's own Deepgram key, Pact's, or through Twilio | United States | SOC 2 Type II |
| ElevenLabs | Text-to-speech synthesis for voice features | When a voice feature speaks, on the workspace's own key, Pact's, or through Twilio | United States | SOC 2 Type II |
| AssemblyAI | Transcription of voice notes and in-app microphone audio | When a voice note or microphone recording is transcribed with AssemblyAI | United States | Not recorded |
| Recall.ai | Meeting bots — joins a meeting and returns its recording and transcript | When a workspace sends a meeting bot to a call | United States | Not recorded |
| OpenAI | Supplementary model inference and embeddings | When a workspace routes AI to OpenAI, or a feature that uses Pact's OpenAI key runs | United States | SOC 2 Type II |
| Amazon Web Services (S3, SES) | Archive of signed e-signature documents (S3); alternate email delivery (SES) | When signed documents are archived to S3, or email falls back to SES | United States | SOC 2 Type IIISO 27001 |
| Alternate email providers (SendGrid, Postmark or Mailgun) | Email delivery when a workspace or Pact routes email through one of them instead of Resend | Only when one of them is configured as the email provider | United States | Not recorded |
| Google Firebase Cloud Messaging and Apple Push Notification service | Mobile push delivery — the notification's title and body | When notifications are sent to the mobile app | United States | Not recorded |
| GitHub | Product feedback you submit in the app — its text, any voice transcript and the page it came from | When someone submits in-app feedback and the feedback channel is configured | United States | SOC 2 Type IIISO 27001 |
| Slack | Product feedback you submit in the app — the first 500 characters, posted to Pact's own workspace | When someone submits in-app feedback and the feedback channel is configured | United States | SOC 2 Type IIISO 27001 |
| Customer-selected cloud KMS (Azure Key Vault, AWS KMS or Google Cloud KMS) | Key-encryption-key custody for tenants using bring-your-own-key | When a workspace chooses to hold its own encryption key | Customer-selected region | SOC 2 Type IIISO 27001 |
Anthropic
United StatesAI model inference for AI features (no training on customer data, per Anthropic's terms)
When engaged: When a workspace uses an AI feature, on the workspace's own Anthropic key or on Pact's
Stripe
United StatesSubscription billing and payment processing
When engaged: For workspaces that pay by card; holds the billing contact and payment details
Sentry
United StatesApplication error monitoring; error reports can include text from the failing request
When engaged: When error monitoring is configured for the service
Twilio
United StatesTelephony — calls, SMS and the voice media relay. On relayed calls Twilio's own partners transcribe (Deepgram) and voice (ElevenLabs or Amazon Polly) the audio
When engaged: When a workspace places or receives calls or sends SMS
Deepgram
United StatesSpeech-to-text transcription of calls and in-app microphone audio
When engaged: When calls are transcribed, on the workspace's own Deepgram key, Pact's, or through Twilio
ElevenLabs
United StatesText-to-speech synthesis for voice features
When engaged: When a voice feature speaks, on the workspace's own key, Pact's, or through Twilio
AssemblyAI
United StatesTranscription of voice notes and in-app microphone audio
When engaged: When a voice note or microphone recording is transcribed with AssemblyAI
Recall.ai
United StatesMeeting bots — joins a meeting and returns its recording and transcript
When engaged: When a workspace sends a meeting bot to a call
OpenAI
United StatesSupplementary model inference and embeddings
When engaged: When a workspace routes AI to OpenAI, or a feature that uses Pact's OpenAI key runs
Amazon Web Services (S3, SES)
United StatesArchive of signed e-signature documents (S3); alternate email delivery (SES)
When engaged: When signed documents are archived to S3, or email falls back to SES
Alternate email providers (SendGrid, Postmark or Mailgun)
United StatesEmail delivery when a workspace or Pact routes email through one of them instead of Resend
When engaged: Only when one of them is configured as the email provider
Google Firebase Cloud Messaging and Apple Push Notification service
United StatesMobile push delivery — the notification's title and body
When engaged: When notifications are sent to the mobile app
GitHub
United StatesProduct feedback you submit in the app — its text, any voice transcript and the page it came from
When engaged: When someone submits in-app feedback and the feedback channel is configured
Slack
United StatesProduct feedback you submit in the app — the first 500 characters, posted to Pact's own workspace
When engaged: When someone submits in-app feedback and the feedback channel is configured
Customer-selected cloud KMS (Azure Key Vault, AWS KMS or Google Cloud KMS)
Customer-selected regionKey-encryption-key custody for tenants using bring-your-own-key
When engaged: When a workspace chooses to hold its own encryption key
Your data is portable
Your data is portable on every plan — including the Free plan, after a downgrade, and after cancellation. There is no export paywall and no lock-in.
Security & uptime events
No incidents disclosed in the last 90 days. See the live status page.
Coordinated disclosure
Anyone can report a security issue to security@pact.place. We acknowledge within 2 business days, agree a 90-day disclosure window from acknowledgement, and give good-faith research safe harbor.
Safe harbor. Good-faith research that respects these rules is authorized: no data exfiltration beyond what's needed to prove an issue, no service degradation, no access to other tenants' data, and a 90-day disclosure window before going public. We will not pursue legal action against researchers who follow them.
In scope
- *.pact.place application and API surfaces
- Authentication, tenant isolation (IDOR), and access-control flaws
- Data exposure and injection vulnerabilities
Out of scope
- Denial of service / volumetric testing
- Social engineering and physical attacks
- Findings that require a rooted device or a compromised browser
- Reports from automated scanners without a working proof of concept
Vulnerability disclosure
Pact welcomes coordinated disclosure of security issues. Report to security@pact.place; we acknowledge within 2 business days and do not pursue good-faith researchers.
security@pact.placeFull policy & safe harborExternal penetration test: being scheduled. What is ready and what comes next
Documentation
The SOC 2 evidence bundle (generated from Pact's own controls; no audit has been performed) and the ISO 27001 Statement of Applicability are available to customers and prospects under NDA. HIPAA is not supported yet, so don't load protected health information into Pact.
Powered by Pact — the consent-native CRM. Statuses are read live from Pact’s control registry.