Skip to content

Ports & Endpoints

Local ports

PortServiceStart with
3000web (Next.js)pnpm --filter @playpals/web dev
4000apipnpm --filter @playpals/api dev
4005anansipnpm --filter @playpals/anansi dev
4006igdb-heartbeatpnpm --filter @playpals/igdb-heartbeat dev
4010esupnpm --filter @playpals/esu dev
5173docspnpm --filter @playpals/docs dev
5432PostgreSQLdocker compose up -d db
6379Redisdocker compose up -d redis
7880LiveKit HTTPdocker compose up -d livekit
7881LiveKit RTC/TCP
7882/udpLiveKit RTC/UDP

ogun has no port — it is a queue worker.

bash
lsof -i :4000      # find what is holding a port

Production hosts

HostBacks ontoPort
playpalz.ggplaypalz-web3000
www.playpalz.ggplaypalz-web3000
api.playpalz.ggplaypalz-api4000
socket.playpalz.ggplaypalz-esu4010
ws.playpalz.ggLiveKit droplet7880
media.playpalz.ggSpaces CDN
grafana.playpalz.ggloki-stack-grafana80

anansi, ogun, and igdb-heartbeat have no ingress — they are cluster-internal only.

Cluster-internal DNS

NameService
playpalz-api:4000api
playpalz-esu:4010esu
playpalz-anansi:4005anansi
playpalz-redis:6379redis
loki-stack:3100Loki

Health endpoints

ServiceEndpointHealthy
apiGET /health{"status":"ok"}
esuGET /health{"ok":true}
anansiGET /healthHealth payload
igdb-heartbeatGET /health{"status":"ok","service":"igdb-heartbeat"}
webGET /200
ogunNo HTTP surface

/health sits outside /api/v1 on the API, so it is not rate limited.

API base

EnvironmentBase URL
Localhttp://localhost:4000/api/v1
Productionhttps://api.playpalz.gg/api/v1

Everything in the API Reference is relative to that.

Webhook URLs

ProviderURL
RevenueCathttps://api.playpalz.gg/api/v1/webhooks/revenuecat
Muxhttps://api.playpalz.gg/api/v1/webhooks/mux
Stripehttps://api.playpalz.gg/api/v1/webhooks/stripe (handler is empty)

Locally, expose them with a tunnel:

bash
ngrok http 4000

Admin surfaces

SurfaceWhereAuth
esu interservicePOST {esu}/admin/emit/*X-Realtime-Admin-Token
esu authz callbacksGET {api}/api/v1/{dm,room}/:id/authzThe user's own bearer token
anansi payouts{anansi}/admin/payout/*Authorization: Bearer <ADMIN_SECRET>
Socket.IO Admin UIadmin.socket.iosocket.playpalz.ggBasic auth, disabled by default
Grafanagrafana.playpalz.gggrafana-secrets

Data store connections

StoreLocalProduction
PostgreSQLlocalhost:5432 (postgres/postgres)Managed cluster on :25060, private VPC hostname
Redislocalhost:6379 (password playpalz)playpalz-redis:6379 in-cluster
Spacesnyc3.digitaloceanspaces.com, bucket playpalz-media

The production database listens on 25060, not 5432 — DigitalOcean's managed Postgres default.

Internal documentation — PlayPalz platform