Skip to main content

Security

Court documents carry sensitive data. This page describes the API's security properties and the practices integrations should follow.

Transport and keys

Data lifecycle

The API is a rendering service, not a document store. Everything it holds for you is short-lived by design:

DataLifetime
Generated outputs~20 hours, then gone (404 OUTPUT_NOT_FOUND)
Download URLs1 hour per signed URL; re-sign any time within retention
Batch job status48 hours
Base-PDF upload windows15 minutes
Idempotency keys24 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-Of value, 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.