Skip to main content

PSAPLink PSAP — Setup

Lightweight agent installed on each PSAP's isolated network. Talks outbound only — no inbound internet connections required (except the optional ACK callback endpoint).

What It Does

  • Polls CAD export files (CFS) using vendor-specific parsers (TriTech, CentralSquare, NewWorld Aegis, generic XML)
  • Provides a dispatch API for TCOs to create and push incidents
  • Signs and pushes incident events to PSAPLink Cloud via HMAC-signed HTTPS
  • Receives ACK confirmations from Cloud (poll or callback mode)

What It Does NOT Do

  • Manage company users or transport preferences — that's Cloud's job
  • Handle notification fan-out — that's Cloud's job
  • Require multi-tenancy — one instance serves exactly one PSAP

Prerequisites

  • PHP 8.2+ / Composer 2.x
  • PostgreSQL 15+
  • Network access to your PSAPLink Cloud instance (outbound HTTPS only)

Setup

1. Configure environment

cd psap
cp .env.example .env.local
VariableDescription
DATABASE_URLLocal PostgreSQL connection string
APP_SECRET32+ random characters
JWT_SECRET_KEY / JWT_PUBLIC_KEY / JWT_PASSPHRASELocal JWT keys
CLOUD_BASE_URLe.g. https://psaplink.com
CLOUD_PSAP_IDThe PSAP agency UUID as registered in Cloud
CLOUD_API_KEYRaw API key issued by Cloud for this instance
ACK_MODEpoll or callback

2. Create the database

createdb psaplink_psap

3. Generate JWT keys

php bin/console lexik:jwt:generate-keypair

4. Run migrations

php bin/console doctrine:migrations:migrate

5. Bootstrap from Cloud

Pulls PSAP metadata and CFS configurations from your Cloud instance:

php bin/console psaplink:psap:bootstrap \
--cloud-url=https://psaplink.com \
--api-key=<your-raw-api-key>

This calls GET /api/v1/core/psap-config on Cloud and writes the LocalPsap row and all CfsConfiguration rows to the local database.

ACK Modes

ModeHow it works
pollPSAP agent polls GET /api/v1/core/ack-queue/{psapId} on a schedule. No inbound ports needed.
callbackCloud POSTs to the PSAP's POST /api/v1/core/callback/ack endpoint. Faster, requires PSAP to be reachable.

Quick Start (Docker)

cd psap
cp .env.example .env.local
./dev-up.sh --fresh