Skip to content

HTTP and WebSocket APIs

JSONJet provides both HTTP and WebSocket APIs for different use cases.

HTTP API

The HTTP API is used for executing commands and queries.

Endpoint

POST http://localhost:3333/api/execute

Request Format

json
{
  "query": "create stream sensor_data"
}

Response Format

json
{
  "success": true,
  "result": "..."
}

WebSocket API

The WebSocket API is used for real-time operations like stream subscriptions and data insertion.

Connection

ws://localhost:3333/ws

Message Types

All messages support an optional requestId field for correlating requests with responses.

Client → Server Messages

TypeDescriptionPayload
subscribeSubscribe to one or more streams{ "type": "subscribe", "streamName": "stream_name" | ["stream1", "stream2"], "requestId": "optional" }
unsubscribeUnsubscribe from specific subscription or all{ "type": "unsubscribe", "subscriptionId": 123, "requestId": "optional" } (omit subscriptionId to unsubscribe from all)
insertInsert single record or batch{ "type": "insert", "target": "stream_name", "data": {...} | [...], "requestId": "optional" }
executeExecute JET query/command{ "type": "execute", "query": "create stream my_stream", "requestId": "optional" }

Server → Client Messages

TypeDescriptionPayload
connectedConnection established{ "type": "connected", "clientId": 123 }
subscribedSuccessfully subscribed{ "type": "subscribed", "subscriptions": [{"streamName": "...", "subscriptionId": 123}], "requestId": "..." }
unsubscribedSuccessfully unsubscribed{ "type": "unsubscribed", "subscriptionId": 123, "streamName": "...", "requestId": "..." } (or array for bulk unsubscribe)
dataStream data{ "type": "data", "streamName": "...", "data": {...}, "subscriptionId": 123, "requestId": "..." }
insert_responseInsert operation result{ "type": "insert_response", "success": true, "count": 1, "target": "...", "requestId": "..." }
execute_responseExecute operation result{ "type": "execute_response", "success": true, "result": {...}, "requestId": "..." }
errorError message{ "type": "error", "message": "...", "requestId": "..." }

Examples

Subscribe to Single Stream

json
// Client → Server
{
  "type": "subscribe",
  "streamName": "sensor_data",
  "requestId": "req_001"
}

// Server → Client
{
  "type": "subscribed",
  "subscriptions": [{"streamName": "sensor_data", "subscriptionId": 1}],
  "message": "Subscribed to 1 stream(s)",
  "requestId": "req_001"
}

Subscribe to Multiple Streams

json
// Client → Server
{
  "type": "subscribe", 
  "streamName": ["sensor_data", "alerts"],
  "requestId": "req_002"
}

// Server → Client
{
  "type": "subscribed",
  "subscriptions": [
    {"streamName": "sensor_data", "subscriptionId": 2},
    {"streamName": "alerts", "subscriptionId": 3}
  ],
  "message": "Subscribed to 2 stream(s)",
  "requestId": "req_002"
}

Insert Single Record

json
// Client → Server
{
  "type": "insert",
  "target": "sensor_data",
  "data": {"sensor_id": "sensor_1", "temperature": 23.5},
  "requestId": "req_003"
}

// Server → Client
{
  "type": "insert_response",
  "success": true,
  "count": 1,
  "target": "sensor_data",
  "message": "1 record(s) inserted successfully into 'sensor_data'",
  "requestId": "req_003"
}

Insert Multiple Records (Batch)

json
// Client → Server
{
  "type": "insert",
  "target": "sensor_data", 
  "data": [
    {"sensor_id": "sensor_1", "temperature": 23.5},
    {"sensor_id": "sensor_2", "temperature": 24.1}
  ],
  "requestId": "req_004"
}

// Server → Client
{
  "type": "insert_response",
  "success": true,
  "count": 2,
  "target": "sensor_data",
  "message": "2 record(s) inserted successfully into 'sensor_data'",
  "requestId": "req_004"
}

Execute Query/Command

json
// Client → Server
{
  "type": "execute",
  "query": "create stream new_stream",
  "requestId": "req_005"
}

// Server → Client
{
  "type": "execute_response",
  "success": true,
  "result": {"success": true, "message": "Stream 'new_stream' created"},
  "message": "Query executed successfully",
  "requestId": "req_005"
}

Unsubscribe from Specific Subscription

json
// Client → Server
{
  "type": "unsubscribe",
  "subscriptionId": 2,
  "requestId": "req_006"
}

// Server → Client
{
  "type": "unsubscribed",
  "subscriptionId": 2,
  "streamName": "sensor_data",
  "message": "Unsubscribed from subscription 2",
  "requestId": "req_006"
}

Unsubscribe from All Subscriptions

json
// Client → Server
{
  "type": "unsubscribe",
  "requestId": "req_007"
}

// Server → Client
{
  "type": "unsubscribed",
  "unsubscribed": [
    {"subscriptionId": 1, "streamName": "sensor_data"},
    {"subscriptionId": 3, "streamName": "alerts"}
  ],
  "message": "Unsubscribed from 2 subscription(s)",
  "requestId": "req_007"
}