Help API

Live

Multi-tenant customer support used by Support.ng and Bolrach Help. https://api.bolrach.help and https://api.support.ng reverse-proxy the same Nest service (support-api on port 5010) and the same supportng schema. Console agents authenticate with Authvio JWT plus x-workspace-id. Estate apps such as DGUMS use the internal bridge with a shared secret (not for third-party keys). This surface is not metered under api.bolrach.dev platform keys today; it is documented here so the catalogue is complete.

Base https://api.bolrach.helpAlias https://api.support.ngAuth Authvio JWT + x-workspace-idSpec openapi/help.json

One engine, two hostnames

Support.ng is the product brand. Bolrach Help is the Bolrach-facing brand. Both hit the same process. DGUMS omnichannel escalate creates tickets through /api/internal/bridge/tickets so staff work one ticket plane instead of a separate DGUMS-only ticket store.

# health (no auth)
curl "https://api.bolrach.help/api/health"
# → {"ok":true,"service":"support-api"}

# same process on the Support.ng hostname
curl "https://api.support.ng/api/health"

Health

GET /api/health

Unauthenticated liveness. Returns service name when the API is up.

curl "https://api.bolrach.help/api/health"

Tickets (agent / console)

Agent routes need an Authvio bearer token for audience empire:support:web and the workspace UUID in x-workspace-id.

GET /api/tickets

List tickets. Optional query: status, priority, query, page.

curl "https://api.bolrach.help/api/tickets?status=open" \
  -H "Authorization: Bearer $AUTHVIO_ID_TOKEN" \
  -H "x-workspace-id: WORKSPACE_UUID"
POST /api/tickets

Create a ticket with subject, body, optional priority and customer.

curl -X POST "https://api.bolrach.help/api/tickets" \
  -H "Authorization: Bearer $AUTHVIO_ID_TOKEN" \
  -H "x-workspace-id: WORKSPACE_UUID" \
  -H "Content-Type: application/json" \
  -d '{"subject":"Billing question","body":"Invoice looks wrong","priority":"medium","customer":{"name":"Ada","email":"[email protected]"}}'
GET /api/tickets/{id}

Ticket detail with messages, customer, and events.

curl "https://api.bolrach.help/api/tickets/TICKET_UUID" \
  -H "Authorization: Bearer $AUTHVIO_ID_TOKEN" \
  -H "x-workspace-id: WORKSPACE_UUID"
POST /api/tickets/{id}/reply

Agent reply or internal note. Set internal: true for notes that stay off the customer channel.

curl -X POST "https://api.bolrach.help/api/tickets/TICKET_UUID/reply" \
  -H "Authorization: Bearer $AUTHVIO_ID_TOKEN" \
  -H "x-workspace-id: WORKSPACE_UUID" \
  -H "Content-Type: application/json" \
  -d '{"body":"We are looking into this.","internal":false}'

Conversations

GET /api/conversations

Inbox conversations. Filter with channel (email, chat, web, api, voice).

curl "https://api.bolrach.help/api/conversations?channel=chat" \
  -H "Authorization: Bearer $AUTHVIO_ID_TOKEN" \
  -H "x-workspace-id: WORKSPACE_UUID"

Public intake (no agent JWT)

POST /api/public/chat/{workspaceSlug}/start

Start a public widget chat for a workspace slug.

curl -X POST "https://api.bolrach.help/api/public/chat/my-workspace/start" \
  -H "Content-Type: application/json" \
  -d '{"name":"Visitor","message":"Hi, I need help"}'
POST /api/public/intake/{workspaceSlug}/ticket

Public contact form intake into a ticket.

curl -X POST "https://api.bolrach.help/api/public/intake/my-workspace/ticket" \
  -H "Content-Type: application/json" \
  -d '{"subject":"Website form","body":"Need a callback","email":"[email protected]"}'

Estate bridge (DGUMS and internal services)

Service-to-service only. Header x-support-bridge-secret must match the secret installed on support-api and callers such as dgums-api. Do not ship this secret to browsers or third-party apps.

GET /api/internal/bridge/health

Bridge liveness for estate monitors.

curl "https://api.bolrach.help/api/internal/bridge/health" \
  -H "x-support-bridge-secret: $SUPPORT_BRIDGE_SECRET"
GET /api/internal/bridge/tickets

List tickets for a logical workspace key (default dgums).

curl "https://api.bolrach.help/api/internal/bridge/tickets?workspace=dgums&status=open" \
  -H "x-support-bridge-secret: $SUPPORT_BRIDGE_SECRET"
POST /api/internal/bridge/tickets

Create a ticket from an estate app. DGUMS omnichannel escalate uses this path so new tickets land in the shared Support.ng / Bolrach Help plane.

curl -X POST "https://api.bolrach.help/api/internal/bridge/tickets" \
  -H "x-support-bridge-secret: $SUPPORT_BRIDGE_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"workspace":"dgums","subject":"WA escalate #42","body":"Customer needs billing help","priority":"high","channel":"chat","source":"dgums-omni","customerName":"Chioma","customerPhone":"+2348012345678","tags":["omni","whatsapp"],"externalRef":"omni:conv-uuid"}'

Related products

Notes

Machine-readable OpenAPI: /openapi/help.json. Platform catalogue (Geo, AI, WhatsApp, …) remains at api.bolrach.dev/v1. Human mail on the estate stays on Stalwart; this API is the ticket / conversation engine, not the staff mailbox MTA.