Skip to main content
Version: 0.4.0

REST & SSE Server Usage

The Express REST API (src/server.ts) exposes the agent workflow over HTTP, with Server-Sent Events (SSE) for real-time progress streaming, plus Slack and Microsoft Teams webhook receivers.

Starting the server

npm run server

By default the server listens on port 8080 (override with the PORT environment variable). All routes except / and /health require an X-API-Key header matching PATBA_API_KEY (see Configuration).

Health checks

curl http://localhost:8080/health

Creating a thread and running the agent

  1. Create a thread:

    curl -X POST http://localhost:8080/threads \
    -H "X-API-Key: your_secret_api_key_here"
    # => {"thread_id": "thread_xxxxxxxxxxxxx"}
  2. Start a run on that thread:

    curl -X POST http://localhost:8080/threads/thread_xxxxxxxxxxxxx/runs \
    -H "X-API-Key: your_secret_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{"agentName": "the-brain", "prompt": "Explain Conway'"'"'s Game of Life", "wait": false}'
    # => {"run_id": "run_yyyyyyyyyyyyy", "status": "running"}

    Pass "wait": true to block the HTTP request until the run finishes and receive the full result in the response body instead of polling/streaming.

  3. Stream progress via Server-Sent Events:

    curl -N http://localhost:8080/threads/thread_xxxxxxxxxxxxx/runs/run_yyyyyyyyyyyyy/stream \
    -H "X-API-Key: your_secret_api_key_here"

    The stream emits connected, progress, and complete events as data: <json>\n\n frames.

Endpoint reference

MethodPathDescription
GET/ , /healthUnauthenticated health checks.
POST/threadsCreate a new thread ID.
POST/threads/:thread_id/runsStart a workflow run (agentName, prompt, optional wait).
GET/threads/:thread_id/runs/:run_id/streamSSE stream of progress/completion events for a run. Also emits artifact events as tools write files (see below).
GET/threads/:thread_id/artifactsLists artifacts (name, size, sha256, destination hint) produced by the thread so far.
GET/threads/:thread_id/artifacts/:nameDownloads one artifact's bytes. Behind the same X-API-Key middleware as everything else.
POST/webhooks/slackSlack Events API receiver (handles url_verification and message events, replies via chat.postMessage if SLACK_BOT_TOKEN is set).
POST/webhooks/teamsMicrosoft Teams webhook receiver (acknowledges and processes asynchronously).

Artifact delivery

Tools like save_article and export_article write files, but the graph runs inside this server's process — not on the machine that made the request. Every such write is recorded as an artifact and announced on the run's SSE stream:

{"event": "artifact", "artifact": {"name": "cellular-automata.md", "size": 4213, "sha256": "…", "destination": null}}

The completion frame also lists every artifact the thread has produced, so a client that attached to the stream late still learns what there is to fetch. Download the bytes from GET /threads/:thread_id/artifacts/:name; the response carries X-Artifact-Sha256 and, when the tool call named one, X-Artifact-Destination. patb-cli does this automatically — it downloads each artifact, writes it to real local disk, and prints the path. See Agent Flow for why this exists.

Slack integration

Set SLACK_BOT_TOKEN and point your Slack app's Events API request URL at /webhooks/slack. Incoming, non-bot messages are routed through the agent workflow (thread ID derived from the Slack channel), and the response is posted back to the same channel.