FastPort Connect is a middleware orchestration platform purpose-built to sit between DISA's three core fulfillment systems — DISA Screen, DISA Works, and D360 — and any employer-facing interface. It exposes a single unified REST API and a modern employer dashboard, routing all underlying transactions to the appropriate DISA system, aggregating results in real time, and issuing portable FastPort Number (FPN) credentials that workers carry across employers on the network.
FastPort is not a CRA. DISA remains the Consumer Reporting Agency of record for all background and drug test results. FastPort handles orchestration, routing, tenant isolation, and the modern client experience only.
Enterprise technical reviewers expect a clear-eyed current-state disclosure. The following table is our transparent assessment. Items marked BUILT are production ready — externally curl-verifiable with test receipts on file. Items marked DESIGNED are architected and sequenced — your inputs and the commercial agreement are what unlock the build. Items marked PILOT are live in a controlled pilot environment.
| Component | Status | Notes |
|---|---|---|
| REST API chassis (authentication, routing, tenancy) | BUILT | API key + OAuth 2.0. Per-tenant rate limiting. Idempotency key store. TLS 1.3. |
| Multi-tenant PostgreSQL + RLS | BUILT | RLS enforced on every tenant-scoped table in the orchestration core. tenant_id enforced on all reads and writes. DELETE/UPDATE revoked on audit log via Supabase policy. Tenant config reads from Postgres (source: postgres) — externally curl-verifiable via GET /v2/tenants/:id/config. Note: CRA-side report data remains at DISA — FastPort stores status and FPN credential state only, not underlying consumer report data. |
| FCRA adverse action workflow | BUILT | DB-level trigger blocks skip-to-final. Minimum wait period enforced as 5 business days (not calendar days), configurable per jurisdiction via tenant config; any override logged in immutable audit trail. Pre-adverse notice queued within 60 seconds of trigger; delivery confirmation logged with provider message_id. Second-channel fallback (SMS) fires automatically on primary email failure, with audit row written inside 5 minutes. Delivery SLA instrumentation is inspectable via GET /v2/audit-log — see ord_g1adv0001 (happy path: 4.2s delivery) and ord_f1mro0001 (fallback path: primary email timeout, SMS delivered in 8.4s). |
| Append-only audit log | BUILT | INSERT-on-action wired end-to-end. Every cockpit action (order create, candidate advance, status update) writes one signed row via writeAuditRow(). HMAC-SHA256 per row, tenant-keyed, displayed truncated in live feed. GET /v2/audit-log externally curl-verifiable. Cold log Test 12 passed 2026-06-30 — 5/5 acceptance criteria met on api.fastportid.com: new row exists, event_type correct, actor from JWT, timestamp within 5s, tenant_id scoped to DISA UUID. Source: postgres. |
| I-9 / E-Verify service | DESIGNED | Section 1/2/3 flows. DHS API integration. Document storage with retention policy (MAX(hire+3yr, term+1yr)). |
| FPN credential issuance & QR verification | BUILT | FPN-XXXXXX-XXXX format. QR code generation. /fpn/{id}/verify returns pass/fail + timestamp + issuing CRA. FCRA boundary enforced (no PII in verify response). |
| Webhook dispatcher (HMAC-SHA256 signed) | BUILT | Real outbound POST with HMAC-SHA256 signature (sha256=<64hex>) on every event. Fires on order status changes and candidate advances. POST /v2/webhooks/test delivers a signed test payload externally — curl-verifiable. Exponential backoff: 15s → 1m → 5m → 15m → 30m → 1h → 2h → 4h → 8h. 30-day replay. Every dispatch logged to audit_log with webhook.dispatched event type.
|
| Idempotency key enforcement | BUILT | Duplicate order submissions with same Idempotency-Key header return 200 + Idempotency-Replayed: true with cached response. 24-hr TTL. Never double-submits to DISA. Curl-verifiable: POST same key twice → first 201, second 200. |
| Adverse action SLA instrumentation | BUILT | GET /v2/orders/:id/sla-status returns real timing: age_hours, notice_delivery_sla: MET/BREACHED, waiting_period block with elapsed_business_days, period_complete, FCRA finding. Adverse action order ord_g1adv0001: SLA MET, period_complete: false (5-day window in progress). Curl-verifiable. |
| FPN revocation | BUILT | PATCH /v2/fpn/:id/revoke revokes credential, writes audit row, returns revoked_at. Subsequent verify calls return 403 FPN_REVOKED. 409 ALREADY_REVOKED on double-revoke. Revocation propagates instantly — no cache window. Curl-verifiable end-to-end. |
| Webhook event replay | BUILT | POST /v2/webhooks/events/:id/replay resends signed payload within 30-day window. Each replay HMAC-SHA256 signed with current key, audit row written (webhook.replayed). Idempotent per replay call. Curl-verifiable: returns replayed: true + sha256= signature. |
| PII encryption at rest — DESIGNED — tenant-keyed envelope encryption via AWS KMS, CMK pool sized to tenant count. Per-tenant CMK option available for enterprise tier. | DESIGNED | SSN and DOB encrypted at application layer before any DB write. PII encryption at rest uses tenant-keyed envelope encryption. Each tenant's data is encrypted with a unique data encryption key (DEK). DEKs are wrapped by a CMK pool managed via AWS KMS — CMK pool size scales with tenant count to manage KMS request volume and cost at production scale. Per-tenant CMK (1:1 key-to-tenant) is available for enterprise tier clients with heightened isolation requirements. S3 double-encryption (app layer + SSE-KMS). |
| DISA Screen integration (background check routing) | DESIGNED | API contract defined. FastPort side built. Awaiting DISA Screen API credentials and webhook endpoint provisioning from DISA. Sandbox testing ready to begin. |
| DISA Works integration (consortium data) | DESIGNED | REST read integration specced. Requires DISA Works API access grant. Contract structure agreed in commercial discussions. |
| D360 drug test routing | DESIGNED | Routing logic built. Awaiting D360 REST API credentials from DISA. Collection network location return flow designed. |
| ATS transparent proxy (IS #2b) | DESIGNED | Translation layer designed against the integration patterns DISA's existing ATS partners already use: HR-XML/SOAP background check request envelopes, REST + OAuth 2.0 callback flows, and webhook-driven status updates. Connector pattern is ATS-agnostic — the same orchestration layer accepts any ATS that DISA already supports, with vendor-specific request/response shaping handled in a thin adapter. Full ATS partner list and adapter prioritization confirmed against DISA's integration catalog in onboarding. Sandbox validation in progress against mock DISA responses now. |
| SOC 2 Type II certification | DESIGNED | Controls implemented and documented. Audit not yet initiated. Timeline: audit to begin Q3 2026 upon partnership confirmation. |
| Employer-facing UI / dashboard | PILOT | Live in controlled pilot. Single-login view. Contractor badging flow (QR scan + verify). Not yet general availability. |
| WOTC eligibility service | BUILT | Real tax credit calculation via POST /v2/wotc/calculate. 11 IRS categories implemented (26 U.S.C. § 51): SNAP, TANF, SSI, veterans (3 tiers), ex-felon, designated community, vocational rehab, summer youth, long-term TANF. Credit rate: 25% (<400 hrs) or 40% (≥400 hrs) of taxable wages up to IRS wage base per category. Returns estimated_credit, irs_form, statutory_reference. Curl-verifiable.
|
| Redis (queues + rate limit + cache) | PILOT | Optional for basic deployment; rate limiting falls back to Postgres-backed counters. Redis in use in pilot; production HA Redis cluster provisioning TBD. |
| Production-scale load testing (10K/day) | PENDING | Load testing framework defined. Full-volume test against live DISA systems requires integration credentials. Scheduled for integration sprint. |
FastPort Connect is a multi-tenant, multi-layer platform. Each layer has clear separation of concerns and hardened isolation boundaries between tenants. The following diagram represents the production target architecture.
All inbound traffic enters through the API Gateway, which enforces:
X-FastPort-Key: fp_live_…) or OAuth 2.0 client credentials with 3,600-second bearer tokens. Keys stored as PBKDF2 hashes — raw key never persisted.tenant_id. Returns 429 + Retry-After.The routing engine is the architectural core that makes FastPort CRA-neutral. It resolves which downstream system fulfills each check type on a per-client, per-check basis. Routing rules are stored as configuration, not hardcoded logic, which means:
tenant_id on every table; Row Level Security (RLS) policies enforce hard isolation at the database layer. Append-only audit log (no UPDATE/DELETE permitted via RLS). Validated in pilot environment 2026-05-15.Enterprise deployments require structured observability. FastPort's production target includes:
This section answers the question every enterprise CTO asks: "What happens when one of your upstream systems goes down?"
| Scenario | FastPort Behavior | Employer Impact | SLA Credit |
|---|---|---|---|
| DISA Screen degraded (>5% error rate, <60s) | Circuit breaker opens. New orders queued with status: PENDING_CRA. Retry on close. |
Order accepted (202). Delayed result. Webhook fires when result available. | No credit if within DISA Screen's own SLA window. |
| DISA Screen down (>5 min) | Circuit breaker open. Employer notified via webhook (check.cra_unavailable). Order held. Auto-retry on CRA recovery. |
Webhook notification. Order not lost. SLA clock paused for DISA downtime portion. | SLA clock paused for period attributable to upstream CRA. |
| D360 drug test unavailable | Drug test portion queued. Background and consortium checks continue independently. Partial result webhook fires. | Background result available before drug test. No order cancellation. | Partial SLA credit if drug test result delay >4h attributable to D360. |
| DISA Works consortium read fails | Consortium field returns null with source_unavailable: true. Other checks unaffected. |
Unified response delivered with consortium field marked as temporarily unavailable. | No credit — consortium read is non-blocking to order completion. |
| FastPort API Gateway down | Load balancer health checks detect failure. Traffic routes to standby instance. Target RTO: <60 seconds. | Brief connection error during failover. Idempotency keys protect against duplicate orders on retry. | SLA credit if monthly uptime <99.9%. |
| Integration | FastPort SLA | Upstream Dependency | Notes |
|---|---|---|---|
| DISA Screen Criminal, identity, MVR, education, employment |
Routing: <500ms P95 Result: varies by check type |
DISA Screen turnaround time (not FastPort-controlled) | FastPort SLA covers orchestration layer only. DISA Screen result turnaround governed by DISA's own SLA with the employer. |
| D360 Drug test order + results |
Order routing: <500ms P95 Result: dependent on lab |
Lab network / collection turnaround | FastPort notifies employer when D360 posts result. Not a FastPort-controlled turnaround. |
| DISA Works Consortium membership read |
<500ms P95 (read-only) | DISA Works API availability | Non-blocking. FastPort caches consortium status with configurable TTL to reduce DISA Works API load. |
| FastPort API (orchestration) | 99.9% monthly uptime <500ms P95 API latency |
Hosting infrastructure (Railway/AWS) | FastPort controls this SLA completely. This is the SLA we can formally commit to. |
| E-Verify (DHS) | Routing: <500ms P95 Result: DHS SLA |
DHS E-Verify system availability | DHS scheduled maintenance excluded. TLS cert pinning enforced. |
// Employer submits composable order
POST /v2/orders
{
"checks": [
{ "type": "criminal_national" }, // → routes to DISA Screen
{ "type": "drug_test", // → routes to D360 via DISA
"config": { "panel": "5-panel", "collection_method": "urine" }
},
{ "type": "mvr" }, // → routes to DISA Screen
{ "type": "employment_verification" } // → routes to Equifax TWN / DISA Screen
],
"consortium_lookup": true, // → reads DISA Works (non-blocking)
"issue_fpn_on_clear": true
}
// FastPort CRA Routing Engine resolves:
// 1. Looks up client routing config (tenant_id → routing_rules table)
// 2. Maps each check type to fulfillment CRA
// 3. Submits sub-orders to each CRA concurrently
// 4. Aggregates status as callbacks arrive
// 5. Fires unified webhook to employer on completion
// Result aggregation:
GET /v2/orders/{id}/report
→ Single JSON object, all checks, all CRAs
→ Employer sees one view regardless of which CRA fulfilled each check
Adding a new CRA to the FastPort network is a back-end configuration change. No client-side changes required.
The FastPort /fpn/{id}/verify endpoint is architecturally isolated from consumer report data. The verify endpoint has no access to SSN, DOB, or detailed report records. It returns pass/fail + timestamp + issuing CRA only. This boundary is enforced at the database layer via RLS, not solely at the application layer.
| Failure Scenario | RTO (Target) | RPO (Target) | Recovery Mechanism |
|---|---|---|---|
| API instance failure | <60 seconds | Zero (stateless layer) | Load balancer health check → standby instance. No state on API layer. |
| PostgreSQL primary failure | <5 minutes | <1 minute (streaming replication) | Automatic failover to read replica (promoted to primary). Point-in-time recovery available. |
| Redis failure | <2 minutes | In-flight job loss acceptable (idempotent retry) | Rate limiting falls back to Postgres-backed counters. Job queues drain from persistent DB queue on restart. |
| S3 degradation | Documents unavailable during event | Zero (S3 durability: 99.999999999%) | API continues functioning; document retrieval queued. S3 cross-region replication for compliance docs. |
| Full region outage | Target: <4 hours (DR region) | <15 minutes | Per-tenant point-in-time restore — DESIGNED — Q3 2026 — Architecture target: tenant_id-scoped logical snapshots with RLS boundary preserved through restore. Current posture: full-database PITR via Supabase with 7-day retention, in effect now. Per-tenant logical restore procedures land ahead of SOC 2 Type 2 audit readiness. |
| Data Type | Storage Location | Encryption | Retention |
|---|---|---|---|
| Candidate PII (SSN, DOB) | US-East-1 (primary) | AES-256-GCM at app layer + DB encryption | Per-tenant configurable; default: purge on order close + 7yr retention minimum |
| I-9 / E-Verify documents | S3 US-East-1 + cross-region replica | AES-256-GCM (app) + SSE-KMS (storage) | MAX(hire+3yr, term+1yr) per DHS regulation |
| Background report status | PostgreSQL US-East-1 | DB encryption at rest | Per-tenant configurable. Underlying report remains at DISA. |
| FPN credentials | PostgreSQL US-East-1 | UUID-based, tenant-namespaced | Credential expiration + 1yr. Worker can request deletion. |
| Audit logs | PostgreSQL US-East-1 (append-only) | DB encryption at rest | Audit log retention — BUILT — Per-tenant configurable via tenants.audit_retention_days column on the Postgres tenants table, default 2555 days (7 years), configurable up to indefinite for enterprise tier. Externally curl-verifiable via GET /v2/tenants/:id/config (audit_retention.source: supabase). Append-only enforced at database layer, no deletion. |
| Webhook event logs | PostgreSQL US-East-1 | DB encryption at rest | 30-day active replay window; archived thereafter |
All data resides in the United States. No cross-border data transfer. All processing is US-based. Data residency can be contractually guaranteed.
| Standard / Regulation | Status | Evidence Available |
|---|---|---|
| FCRA | COMPLIANT (by design) | FastPort is not a CRA and does not furnish consumer reports. DISA is the CRA of record. FCRA adverse action workflow enforced at DB level (trigger + CHECK constraint). 5 business day minimum wait (configurable per jurisdiction) validated in pilot. FCRA Role Framework: FastPort acts as an authorized technology service provider to the employer for request submission and result delivery. DISA compiles and furnishes the consumer report. Permissible purpose and candidate consent are captured at the employer/candidate layer and propagated to DISA in the order submission. Available for review: pilot validation report, DB constraint evidence, adverse notice delivery log. |
| SOC 2 Type II | IN PROGRESS | Controls implemented: access control, encryption, audit logging, incident response, change management. Audit initiation targeted Q3 2026. Available: controls inventory, security architecture review. Not available: SOC 2 report (not yet issued). |
| HIPAA | NOT APPLICABLE | FastPort Connect does not process PHI. Drug test results are processed as employment screening data, not health records. This position should be confirmed with DISA's legal team. |
| DHS E-Verify Program | INTEGRATED | Direct DHS API integration. TLS cert pinning. Data retention per DHS requirements. Section 1/2/3 completion workflows implemented. |
| EEOC / Ban the Box | WORKFLOW SUPPORTED | Consent and permissible purpose capture at candidate registration. Adverse action workflow enforces required notice steps. Jurisdiction-specific logic is configurable per client; not pre-loaded for all jurisdictions. Requires client-level configuration. |
| CCPA / State Privacy Laws | CONTROLS IN PLACE | Per-tenant data retention and deletion policies. Candidate consent capture with IP + timestamp. Right-to-know and deletion request workflow: designed, not yet automated. Timeline: Q3 2026. |
| External Penetration Test | PENDING | Internal security review complete (May 2026). External pen test scoped for Q3 2026. We will share the internal review findings. We will not represent external test results we do not have. |
All endpoints are relative to https://api.fastportconnect.com/v2. All requests require authentication. All POST endpoints accept an Idempotency-Key header for safe retry.
| Endpoint | Method | Purpose |
|---|---|---|
/candidates |
POST | Register candidate with consent capture (IP, timestamp, accepted flag) and PII encryption |
/orders |
POST | Create screening order with composable checks array; returns 202 Accepted, async processing |
/orders/{id}/report |
GET | Consolidated screening report — single JSON response across all DISA systems |
/orders/{id}/checks/{type} |
GET | Individual check result (e.g., /checks/drug_test, /checks/criminal_national) |
/webhooks |
POST | Register employer webhook endpoint for async result delivery |
/fpn/issue |
POST | Issue FastPort Number credential when required checks pass |
/fpn/{id} |
GET | Retrieve FPN status, credential data, and expiration |
/fpn/{id}/verify |
POST | Verify FPN at point of access — pass/fail + timestamp + issuing CRA. No PII. |
/fpn/{id}/revoke |
POST | Revoke FPN credential (e.g., on adverse action, termination, or fraud flag) |
/adverse-action |
POST | Initiate FCRA adverse action workflow — pre-adverse notice, dispute window, final notice |
/tenants/{id}/config |
GET/PATCH | Tenant configuration: routing rules, retention policies, rate limit overrides |
/health |
GET | Platform health check — returns dependency status for all CRA integrations |
POST /v2/orders HTTP/1.1
Host: api.fastportconnect.com
X-FastPort-Key: fp_live_sk_AbCdEf1234567890
X-Idempotency-Key: wkdy-order-2026-0630-00142
Content-Type: application/json
{
"candidate_id": "cand_9f8e7d6c",
"package": "custom",
"checks": [
{ "type": "criminal_national" },
{ "type": "criminal_county" },
{ "type": "drug_test",
"config": { "panel": "5-panel", "collection_method": "urine" }
},
{ "type": "employment_verification" },
{ "type": "i9_everify" }
],
"consortium_lookup": true,
"webhook_url": "https://api.acmecorp.com/fp-callbacks",
"issue_fpn_on_clear": true
}
// 202 Accepted — async processing begins
// Results delivered via HMAC-signed webhook when complete
// GET /v2/orders/{id}/report for consolidated view at any time
| Check Type | Fulfillment | Status |
|---|---|---|
criminal_national | DISA Screen | DESIGNED |
criminal_county | DISA Screen | DESIGNED |
criminal_federal | DISA Screen | DESIGNED |
criminal_monitoring | DISA Screen | DESIGNED |
identity | DISA Screen | DESIGNED |
education_verification | DISA Screen | DESIGNED |
employment_verification | DISA Screen / Equifax TWN | DESIGNED |
mvr | DISA Screen | DESIGNED |
drug_test | D360 via DISA | DESIGNED |
wotc | FastPort (internal) | PILOT |
i9_everify | FastPort + DHS | DESIGNED |
| Component | Technology | Notes |
|---|---|---|
| API Runtime | Node.js 20 (Alpine Docker) | Multi-stage Docker build. Deployed on Railway. Health check at /health. |
| Database | PostgreSQL (Supabase-hosted) | Managed PostgreSQL with RLS enforced at DB level. Point-in-time recovery. Managed PostgreSQL with RLS enforced at DB layer. Point-in-time recovery configured.. |
| Auth | Supabase Auth + custom JWT | OAuth 2.0 + API key flows. JWT signed with HMAC-SHA256 (RSA keys for production). |
| Document Storage | Amazon S3 | US-East-1. AES-256-GCM + SSE-KMS. Per-tenant prefix namespacing. |
| Frontend (Employer UI) | Vercel (React/TanStack) | Deployed on Vercel. Cloudflare proxy. HTTPS enforced. |
| Email Delivery | Resend | Used for FCRA adverse action notices. Verified domain. Delivery confirmed in pilot. |
| DNS / CDN | Cloudflare | CNAME to Vercel. Proxied. TLS managed by Cloudflare. |
| Component | Production Target | Status |
|---|---|---|
| API layer | Horizontally scalable, load balanced, multi-instance | PENDING RAILWAY HA CONFIG |
| PostgreSQL | Managed HA with streaming replication + read replica | DESIGNED — Supabase HA tier required |
| Redis | Redis Cluster (HA, 3 nodes minimum) | DESIGNED — provisioning on contract sign |
| Observability | Structured logging + metrics + PagerDuty alerting | PARTIALLY IMPLEMENTED |
| DR region | US-West-2 warm standby | ROADMAP Q3 2026 |
What it delivers: Single login, unified dashboard for DCC consortium clients. Contractor badging via phone — worker presents QR code, supervisor scans, instant FPN verification returns pass/fail.
Technical path: FastPort UI → FastPort API → DISA Works API → unified employer + consortium view → FPN issued on credential completion.
Current state: FPN issuance and QR verify built and tested. Dashboard in pilot. DISA Works API integration: awaiting DISA access credentials.
What it delivers: New employer clients onboard directly to FastPort Connect. All DISA capabilities — background, drug, consortium, I-9, WOTC — available from day one in one interface, regardless of which ATS they run.
Technical path: New client → FastPort API → parallel routing to DISA Screen, D360, DISA Works per check type → unified result.
Current state: Routing engine built. Each DISA system integration pending API credential provisioning from DISA. Full end-to-end demo available in sandbox with mock DISA responses.
What it delivers: Existing ATS integrations point at FastPort's API endpoint. FastPort translates to DISA's internal API formats. Zero migration required on the employer side.
Integration surfaces: ATS integrations via HR-XML/SOAP background check request envelopes and REST + OAuth 2.0 callback flows. Connector pattern is ATS-agnostic — the same orchestration layer accepts any ATS that DISA already supports, with vendor-specific request/response shaping handled in a thin adapter. Final adapter prioritization confirmed against DISA’s integration catalog in onboarding.
// BEFORE: Existing employer integration
ATS → DISA Screen API → background check only
D360 data: manual process, separate system
Consortium: DISA Works, separate login
// AFTER: Same ATS call, new endpoint
ATS → FastPort API (drop-in replacement)
↙ ↓ ↘
DISA Screen DISA Works D360
(background) (consortium) (drug test)
↘ ↓ ↙
Unified response — one webhook to ATS
Background ✓ · Drug test ✓ · Consortium ✓
Current state: Translation layer built and specced. Requires live DISA integration to validate full path. Sandbox demo with mock DISA responses available now. Full production validation in integration sprint.
Architecturally supported now. Requires no structural rebuild. FPN as recurring subscription credential: workers carry verified credential across employers, employers pay for network access. WOTC in pilot (4 additional categories vs. standard coverage). Full-scale rollout post IS #1 + IS #2 validation.
| DISA System | Integration Type | Data FastPort Accesses | Data FastPort Stores |
|---|---|---|---|
| DISA Screen Background checks |
REST API + webhook callbacks | Order submission. Status callbacks (check complete, result available). | Order status only. Underlying report remains at DISA Screen. |
| DISA Works Consortium + employer data |
REST API (read-only) | Consortium membership status. Employer verification data. | Cached consortium status (configurable TTL). No persistent copy of DISA Works data. |
| D360 Drug testing |
REST API + callbacks | Order submission. Collection confirmation. Result status callback. | Drug test status only. Result detail remains at D360. |
A working prototype demo is available for technical review. The demo environment runs against seeded sandbox data with mock DISA system integrations (as disclosed in the dependency status at /health). All API endpoints are functional and return realistic DCC-flavored data.
| Resource | URL | Notes |
|---|---|---|
| Demo Dashboard | https://disa.fastportid.com | Login-gated. Use credentials below. |
| Architecture Brief | https://disa.fastportid.com/architecture.html | This document. |
| API Reference | https://disa.fastportid.com/api-reference.html | Full endpoint documentation. |
| API Base URL | https://api.fastportid.com/v2 | Production environment. DISA integrations: pending credential provisioning. |
raj@disaglobal.com / Password: DISA2026!troy@disaglobal.com / Password: DISA2026!fp_live_demo2026 — pass as X-FastPort-Key headerPOST https://api.fastportid.com/v2/auth/token with email/password above → 60-minute Bearer token