JSON Schema Reference
The complete guide to JSON Schema definitions for JSON-RPC protocols
On this page
JSON Schema for JSON-RPC
JSON Schema provides a powerful way to define the structure of JSON-RPC requests and responses. This reference documents the standard schemas for JSON-RPC 2.0 messages, which can be used for validation, documentation, and code generation.
Using JSON Schema with JSON-RPC provides several benefits:
- Automated validation of requests and responses
- Clear documentation of expected message formats
- Type checking and code completion in compatible IDEs
- Automated code generation for clients and servers
JSON-RPC Request Schema
The standard schema for a JSON-RPC 2.0 request:
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "JSON-RPC 2.0 Request",
  "description": "A JSON-RPC 2.0 request object",
  "type": "object",
  "required": ["jsonrpc", "method"],
  "properties": {
    "jsonrpc": {
      "type": "string",
      "enum": ["2.0"],
      "description": "JSON-RPC version string"
    },
    "method": {
      "type": "string",
      "description": "The name of the method to be invoked"
    },
    "params": {
      "description": "Parameter values to be used during the invocation of the method",
      "oneOf": [
        {
          "type": "array",
          "description": "Positional parameters"
        },
        {
          "type": "object",
          "description": "Named parameters"
        }
      ]
    },
    "id": {
      "description": "Identifier established by the client",
      "oneOf": [
        { "type": "string" },
        { "type": "number" },
        { "type": "null" }
      ]
    }
  },
  "additionalProperties": false
}Example Valid Request
{
  "jsonrpc": "2.0",
  "method": "user.get",
  "params": {
    "userId": 123
  },
  "id": "req-1"
}JSON-RPC Response Schema
The standard schema for a JSON-RPC 2.0 response:
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "JSON-RPC 2.0 Response",
  "description": "A JSON-RPC 2.0 response object",
  "type": "object",
  "required": ["jsonrpc"],
  "properties": {
    "jsonrpc": {
      "type": "string",
      "enum": ["2.0"],
      "description": "JSON-RPC version string"
    },
    "result": {
      "description": "The result of the RPC call if successful"
    },
    "error": {
      "description": "Error information if an error occurred",
      "$ref": "#/definitions/error"
    },
    "id": {
      "description": "Identifier matching the request",
      "oneOf": [
        { "type": "string" },
        { "type": "number" },
        { "type": "null" }
      ]
    }
  },
  "oneOf": [
    { "required": ["result", "id"] },
    { "required": ["error", "id"] }
  ],
  "additionalProperties": false,
  "definitions": {
    "error": {
      "type": "object",
      "required": ["code", "message"],
      "properties": {
        "code": {
          "type": "integer",
          "description": "Error code"
        },
        "message": {
          "type": "string",
          "description": "Error message"
        },
        "data": {
          "description": "Additional error information"
        }
      },
      "additionalProperties": false
    }
  }
}Example Success Response
{
  "jsonrpc": "2.0",
  "result": {
    "id": 123,
    "name": "John Doe",
    "email": "[email protected]"
  },
  "id": "req-1"
}Error Object Schema
The schema for the error object within a JSON-RPC 2.0 response:
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "JSON-RPC 2.0 Error Object",
  "description": "Error object in a JSON-RPC 2.0 response",
  "type": "object",
  "required": ["code", "message"],
  "properties": {
    "code": {
      "type": "integer",
      "description": "Error code",
      "examples": [-32700, -32600, -32601, -32602, -32603]
    },
    "message": {
      "type": "string",
      "description": "Error message",
      "examples": ["Parse error", "Invalid Request", "Method not found"]
    },
    "data": {
      "description": "Additional error information that may assist in debugging"
    }
  },
  "additionalProperties": false
}Example Error Response
{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found",
    "data": "The method 'user.delete' does not exist"
  },
  "id": "req-1"
}Custom Method Schemas
Beyond the core protocol schemas, you can define schemas for specific RPC methods:
Method-Specific Request Schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "User.Create Request",
  "description": "Request schema for the user.create method",
  "type": "object",
  "required": ["jsonrpc", "method", "params", "id"],
  "properties": {
    "jsonrpc": { "enum": ["2.0"] },
    "method": { "enum": ["user.create"] },
    "id": {},
    "params": {
      "type": "object",
      "required": ["name", "email"],
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "role": {
          "type": "string",
          "enum": ["admin", "user", "guest"],
          "default": "user"
        }
      },
      "additionalProperties": false
    }
  }
}Method-Specific Response Schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "User.Create Response",
  "description": "Response schema for the user.create method",
  "type": "object",
  "required": ["jsonrpc", "result", "id"],
  "properties": {
    "jsonrpc": { "enum": ["2.0"] },
    "id": {},
    "result": {
      "type": "object",
      "required": ["id", "name", "email", "created"],
      "properties": {
        "id": {
          "type": "integer",
          "description": "Unique user ID generated by the system"
        },
        "name": { "type": "string" },
        "email": { "type": "string" },
        "role": { "type": "string" },
        "created": {
          "type": "string",
          "format": "date-time"
        }
      }
    }
  }
}Using Schemas for Validation
You can use these schemas with JSON Schema validators to ensure protocol compliance:
JavaScript Validation Example
// Using Ajv for JSON Schema validation
const Ajv = require('ajv');
const ajv = new Ajv();
// Load the JSON-RPC request schema
const requestSchema = require('./schemas/jsonrpc-request.json');
const validate = ajv.compile(requestSchema);
function validateJsonRpcRequest(request) {
  const valid = validate(request);
  if (!valid) {
    console.error('Invalid JSON-RPC request:', validate.errors);
    return false;
  }
  return true;
}
// Example usage
const request = {
  jsonrpc: '2.0',
  method: 'user.get',
  params: { userId: 123 },
  id: 'req-1'
};
if (validateJsonRpcRequest(request)) {
  console.log('Request is valid');
  // Process the request
} else {
  console.log('Request is invalid');
  // Return an error response
}Tip: Consider using OpenAPI/Swagger to document your JSON-RPC API using these schemas. This allows you to generate interactive documentation and client libraries.