PolDex handles commercial insurance documents. Precision and safety are not optional.
PolDex provides no login portal. The API is the control surface. Reduced attack surface by design.
Customer content is not used to train or fine-tune any model. Inference provider usage is governed by their data handling terms.
Extracted document content does not appear in application logs. Only job metadata, status transitions, and delivery events are logged.
Every extracted fact carries an evidence pointer. Outputs are not generated without grounding in the source content.
Uploaded content is retained for a defined maximum period and then deleted automatically. Explicit deletion is also available.
Key rotation, credit visibility, job status, and DLQ access are all available without contacting the team.
All webhook payloads are signed with HMAC-SHA256. You can verify delivery authenticity without trusting transport alone.
Jobs, keys, and credit ledgers are scoped to the issuing API key. Cross-tenant data access is not possible by design.
PolDex uses API keys as the authentication primitive. There is no account portal, no username/password combination, and no OAuth flow.
Keys are shown exactly once at issuance. PolDex stores only a hashed version. Recovery is not possible — rotation creates a new key.
Key rotation is self-serve via POST /v1/keys/rotate. Compromised keys should be rotated immediately without contacting support.
Every webhook delivery includes an X-PolDex-Signature header in the format t=<timestamp>,v1=<hex>. Verify by recomputing HMAC-SHA256 over <timestamp>.<raw body>.
import crypto from 'crypto'
const sig = req.headers['x-poldex-signature'] // t=...,v1=...
const body = req.rawBody // unparsed bytes
// Parse header
const parts = Object.fromEntries(sig.split(',').map(p => p.split('=')))
const timestamp = parts['t']
const v1 = parts['v1']
// Recompute: HMAC-SHA256 over "<timestamp>.<raw body>"
const expected = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(timestamp + '.')
.update(body)
.digest('hex')
if (!crypto.timingSafeEqual(
Buffer.from(v1),
Buffer.from(expected)
)) {
return res.status(401).end()
}All processing, storage, and compute runs on one cloud provider. One security model, one compliance story, one operational surface.
Data encrypted in transit (TLS 1.2+) and at rest (AES-256). Encryption key management follows least-privilege access principles.
Document storage uses server-side encryption. No public access. Access controlled by least-privilege IAM policies.
Extraction runs in isolated, short-lived compute environments. No persistent state between jobs. No cross-tenant access.
Job queues are encrypted in transit and at rest. Dead-letter queue captures unprocessed jobs for recovery.
Customer content is not used to train or fine-tune models. Governed by the data handling terms of the inference provider.