Customer Service
Repo: o-apps/customer-service (fluxcd app directory: customer-api) · Port: 8991
Handles the marketing site's public "contact us" form and the resulting CRM records — leads submitted through it.
Key Capabilities
- Public contact submission — the marketing site's contact form posts here with no login required
- Lead CRM — list, search, get, update, delete, and export submitted contacts, plus assignment and internal notes for the ops/sales team
- Notification integration — new contacts trigger a notification via the Xenia service (
XENIA_BASE_URL)
Auth
Deliberately split, not gated uniformly — this is the one service in the platform with a real public-facing write path:
- Public:
POST /contactandPOST /contacts(the form itself), plusGET /contacts/typesandGET /contacts/modes(static dropdown option lists the form needs to render — confirmed to return hardcoded enums, not customer data) - Requires auth: everything else —
GET /contacts,GET /contacts/search,GET /contacts/{id},PUT /contacts/{id},DELETE /contacts/{id},GET /contacts/export— since these read or mutate stored lead PII
UpdateTicket-style admin fields (assignment, internal notes) additionally require a super_admin user type on top of a valid token, checked in the handler.
REST API
| Method | Path | Auth | Description |
|---|---|---|---|
POST | /api/contact | Public | Submit the contact form |
POST | /api/contacts | Public | Same as above (form's actual submit target) |
GET | /api/contacts/types | Public | Contact type enum for the form |
GET | /api/contacts/modes | Public | Preferred-contact-mode enum for the form |
GET | /api/contacts | Required | List contacts (paginated) |
GET | /api/contacts/search | Required | Search contacts |
GET | /api/contacts/{id} | Required | Get one contact |
PUT | /api/contacts/{id} | Required | Update a contact |
DELETE | /api/contacts/{id} | Required | Delete a contact |
GET | /api/contacts/export | Required | Export contacts |
GET | /health | Public | Health check |
Environment Variables
| Variable | Description |
|---|---|
DATABASE_URL | PostgreSQL connection |
AUTH_JWT_ACCESS_SECRET | Shared JWT signing secret |
XENIA_BASE_URL | Notification service for new-contact alerts |
PORT | HTTP port (default: 8991) |