Security
Court documents carry sensitive data. This page describes the API's security properties and the practices integrations should follow.
Transport and keys
- The API is HTTPS-only.
- Authentication is per-request via
x-api-key(Authentication). Keys are created, scoped, and revoked in the eCourtDate Console → APIs page. - Follow the key-hygiene practices: secrets manager storage, one key per integration, least-privilege scopes, scheduled rotation.
Data lifecycle
The API is a rendering service, not a document store. Everything it holds for you is short-lived by design:
| Data | Lifetime |
|---|---|
| Generated outputs | ~20 hours, then gone (404 OUTPUT_NOT_FOUND) |
| Download URLs | 1 hour per signed URL; re-sign any time within retention |
| Batch job status | 48 hours |
| Base-PDF upload windows | 15 minutes |
| Idempotency keys | 24 hours |
Download generated documents into your system of record promptly. Templates, versions, and uploaded assets persist until you archive or delete them.
Download URLs are capability URLs: anyone holding one can fetch that document while it is valid. Treat them like the documents themselves: pass them over secure channels and don't write them to logs.
Sandboxed HTML rendering
HTML documents render in an isolated engine with strict boundaries:
- Content is sanitized to an allow-list first: scripts, frames, forms, and anything that fetches are removed, and the removal is reported, never silent.
- The render runs with scripting disabled and no network access; images
must be embedded as
data:URIs.
Your document content cannot be used to reach other systems, and nothing in a rendered document depends on an external server being up.
Attribution and the audit trail
Every write and every generation is recorded with:
- the acting person: the
X-On-Behalf-Ofvalue, required on all writes; - the API key used;
- the action, resource, timestamp, and relevant details.
GET /v1/audit (scope audit:read) reads the trail, newest first:
curl -s "https://api.pdfs.ecourtdate.com/v1/audit?action=template.published&from=2026-08-01" \
-H "x-api-key: $API_KEY"
{
"audits": [
{
"action": "template.published",
"resource": "template/5f0c2a4e-…",
"actor": "clerk@example.gov",
"api_key_id": "a1b2c3d4e5",
"at": "2026-08-01T17:24:41.930Z",
"details": { "version": 1 }
}
],
"next_cursor": null
}
Filters: action (exact, e.g. template.published), resource (prefix,
e.g. template/5f0c2a4e…), and from/to (ISO 8601 timestamps or date
prefixes, inclusive). The action and resource filters apply within each
fetched page, so a filtered page may hold fewer than limit entries while
next_cursor is still set. Keep paginating until next_cursor is null.
Two useful properties for agency compliance:
- Previews are audited as previews: browsing never looks like document issuance.
- Every generated file reports its
sha256(outputs) so issued bytes can be proven later.
Reporting
To report a suspected vulnerability or a suspected key compromise, contact eCourtDate through your support channel, and rotate the affected key in the Console immediately.