Compliance evidence binder
The evidence binder turns the compliance data your workspace already produces — audit logs, access reviews, consent records, retention settings, breach counts — into a single evidence pack mapped to a public framework, with one download to hand to an auditor or a buyer’s security review. Pick a framework, generate, download. Four frameworks are supported today — TCPA is not among them; assemble a TCPA pack manually using TCPA Evidence Pack in the Binder:
Every generation is recorded in your audit log, only the workspace’s owner or admin roles can generate one, and the download is a signed link that expires after 24 hours.
Generate a binder from the dashboard
- Open Settings → Compliance → Binder.
- Choose the framework and the output format — a rendered PDF for humans, or a ZIP of per-control files for importing into a GRC tool.
- Select Generate. Generation runs in the background; the page shows the job move from Pending → Generating → Completed.
- When it completes, use the Download link on the job row. The link is valid for 24 hours; if it lapses until expiry, generate again or open the job to see a fresh link.
Generate from the API
202 with a job id:
download_url (24-hour signed link), download_sha256 for file verification, download_size_bytes, and tamper_alert. List past generations with GET /api/v1/compliance/binder?page=1. The framework catalogue (names, scope text, control counts) is at GET /api/v1/compliance/binder/frameworks.
SOC 2 — Trust Services Criteria coverage
The SOC 2 pack walks the AICPA Common Criteria CC1.0 through CC9.0, one section per category. Each section pairs the platform’s policy narrative with evidence rows counted from your workspace’s own audit chain:
If the integrity pre-check failed during generation, the tamper alert is not a footnote — it renders as a bordered banner ahead of CC1.0, so the first thing the auditor reads is that the chain replay found issues. That placement is deliberate: a reader must see the caveat before any evidence row.
ISO 27001 — Annex-A control mapping
The ISO/IEC 27001:2022 pack covers the four Annex-A control categories plus two individually numbered clauses procurement teams ask about most. Rows fall into two classes — platform-fixed (identical for every workspace, inheriting the platform’s own posture) and workspace-derived (counted from your tenant’s data at generation time):
People and physical controls have no workspace-derived rows because the tenant does not operate them — the binder states the platform’s posture and says so plainly, rather than implying an evidence trail it cannot produce.
GDPR — article-by-article evidence
The GDPR pack maps the articles a supervisory authority, a DPO, or a buyer’s privacy team asks about. The counts it assembles come from the same surfaces you operate day to day:
Consent posture enters Art. 6 as an aggregate (which lawful bases appear across your consent records) — never as individual grant rows, because the binder ships to parties who must not receive your contacts’ identifiers. DSAR history and erasure counts roll up the DSAR queue by status; the privacy register owns the Art. 30 categories and Art. 35 DPIA posture that Art. 30 and Art. 35 restate as evidence rows.
HIPAA — safeguards and BAA posture
The HIPAA pack walks the Security Rule safeguards (45 CFR §§ 164.302–318) plus the Breach Notification Rule, and reads your workspace’s HIPAA configuration from the same settings the HIPAA controls reference describes:
The BAA date and retention window you see in the binder are the values set in Settings → Compliance → HIPAA. Bring them current before generating — the HIPAA onboarding guide sequences BAA execution, HIPAA-mode enablement, role restriction, and retention in the order the pack expects.
Reading the pack
Every binder, regardless of framework, is the same three layers:- Static narrative per control — the platform’s policy for that control, stated once. This text is identical across workspaces on purpose: it describes platform behaviour, and a change in platform behaviour (not a regeneration against unchanged data) is the only thing that edits it.
- Tenant evidence rows per control — aggregate counts and posture that differ per workspace: audit-log volume, team role distribution, DSAR and erasure status counts, active API key counts, breach incidents, configured retention. A control with nothing applicable today shows “No tenant-specific evidence recorded for this control” rather than an empty table.
- Integrity summary in the header — how many audit-chain rows were replayed and verified while the pack was being built. A chain break does not block generation; it flips the binder into the tamper-alert banner so the reader knows upfront.
Operational runbook
Import into a GRC tool. Generate withformat: "zip". The ZIP contains a 00_README.md (the integrity summary and generation metadata) plus one Markdown file per control — 01_CC1_0.md, 02_CC2_0.md, … (SOC 2), 01_A_5.md, … (ISO 27001), the article ids for GDPR, and the section ids for HIPAA. Each file carries the control’s narrative and an | Evidence | Value | table, which is the shape compliance platforms (SecureFrame-class, Drata-class importers) parse on folder upload.
Compare two generations. Because output is deterministic, diffing two ZIPs isolates exactly what changed: an identical file list with identical checksums means “no compliant-relevant change”; a modified control file narrows the delta to one control; a differing 00_README.md with identical control files means only the audit-chain row count moved. Regenerate on a fixed cadence and store each SHA-256 from the job status response so the comparison is a checksum equality, not a manual read.
Handle a tamper flag. Open the flagged binder and note the issue count in the banner. Check whether a later generation clears the flag — the alert covers a trailing 12-month replay window, so a resolved issue clears once it falls outside it. If the flag persists, hold the binder internally and contact security@devotel.io before routing it to an auditor; the file is still evidence of your timeline, but it should never be handed over without the caveat discussed first.
Worked example — SOC 2 vendor questionnaire
A buyer’s procurement portal lists one question per Trust Services Criteria category and accepts an optional attachment. The binder answers the attachment slot the questionnaire leaves open:- Settings → Compliance → Binder, choose SOC 2, format PDF, select Generate.
- Wait for Completed and download the pack.
- Read the integrity summary in the header first. If the banner is present, resolve it (runbook above) before continuing.
- Map the questionnaire categories to binder sections one-to-one: “Governance” → CC1.0, “People” → CC2.0/CC6.0, “Change management” → CC8.0, and so on down CC1.0–CC9.0.
- Attach the PDF. Where a question demands a number — “when was your last access review?” — the answer is the evidence row, quoted verbatim (
Last access review: 2026-07-31T…). - Save the
download_sha256from the job into the questionnaire’s notes field. The buyer can re-hash the attachment and confirm the document they received is the one you generated.
Worked example — GDPR authority response pack
A supervisory authority requests documentation of processing activities, data-subject request handling, and breach posture in one response:- Bring the source surfaces current: the DSAR queue statuses, the privacy register entries, and the breach incident register.
- Generate GDPR as a ZIP — the authority’s case-management intake usually parses per-article files better than a single PDF.
- The Art. 30 chapter answers “what you process”; the Art. 15 and Art. 17 chapters answer “how you handle requests” with completion medians against the statutory 30 days; the Art. 33 chapter answers “how you would know and notify” with the 12-month breach count and the 72-hour SLA.
- Quote the Art. 33 count with its window (“notifiable breaches in the trailing 12 months”) — the binder reports rolling counts, not all-time totals.
- Attach the ZIP and keep the SHA-256 with your case file. If the authority returns for a follow-up, regenerate after the window moves and diff the two ZIPs (runbook above) to enumerate exactly what changed.
Limits
- Signed URL expires after 24 hours. The download link in the job row stops working after a day; open the job for a fresh link or regenerate — the history keeps the job record either way.
- Owner or admin role required. Generation (and reading job status) is gated to workspace owners and admins, including via API keys; Devotel super-admins may also generate against a workspace, for example on a support request.
- Every action is audit-logged. Queueing writes a
compliance.binder_generatedentry to your audit log with framework, format, and requesting role; completion writes a second entry. Failed generations land in the history with the error message. - Windows are rolling. Evidence counts cover trailing windows (90 days or 12 months, per control), not all-time totals; two binders generated weeks apart legitimately differ.
- Redaction cannot be lifted. The binder never contains PII or secrets; if an auditor needs per-subject data behind an aggregate, route them to the underlying surface (DSAR, audit log) rather than the binder.
Auditing and access control
- Generation requires the workspace owner or admin role; API keys follow the same role gate.
- Every generation writes a
compliance.binder_generatedentry to your audit log with the framework, format, and requesting role; completion writes a second entry. - Failed generations land in the history with an error message instead of silently disappearing.
Related
- TCPA Evidence Pack — manually assemble a TCPA defence handout from consent, suppression, audit, and quiet-hours exports
- DSAR — the queue GDPR Art. 15 and Art. 17 rows count from
- Privacy register (ROPA + DPIA) — source of Art. 30 categories and Art. 35 posture
- HIPAA controls and HIPAA onboarding — the configuration the HIPAA pack reads back
- Compliance plugin marketplace — browse evidence packs and activation bundles in one place
- Legal