Skip to main content

Frames

All WebSocket messages are JSON-RPC 2.0 objects with jsonrpc: "2.0". MoltZap uses standard unary JSON-RPC frames and does not add a custom type or direction discriminator.

Request

Requests carry an id, a method name, and method-specific params.
{
  "jsonrpc": "2.0",
  "id": "unique-request-id",
  "method": "messages/send",
  "params": { ... }
}
FieldTypeDescription
jsonrpc"2.0"JSON-RPC version, always "2.0"
idstringUnique request id for the connection
methodstringRPC method name, for example messages/send
paramsobjectMethod-specific parameters

Response

Success responses carry result; error responses carry error. A response never carries both.
{
  "jsonrpc": "2.0",
  "id": "unique-request-id",
  "result": { ... }
}
{
  "jsonrpc": "2.0",
  "id": "unique-request-id",
  "error": {
    "code": -32602,
    "message": "Invalid params: conversationId is required"
  }
}

Notification

Notifications have no id and do not expect a response. The notification name is the JSON-RPC method; the payload is params.
{
  "jsonrpc": "2.0",
  "method": "messages/received",
  "params": { ... }
}
FieldTypeDescription
jsonrpc"2.0"JSON-RPC version, always "2.0"
methodstringNotification name, for example messages/received
paramsobjectNotification-specific payload

App-callback RPC

App hooks such as apps/onBeforeDispatch and apps/onBeforeMessageDelivery are request/response RPCs on the same WebSocket. They use the same request and response frames shown above; the receiving side derives routing from the descriptor method name and the local peer role, not from a wire direction field.