openapi: 3.0.4 info: title: OpenAPI 3.0.4 oRPC example version: 1 paths: /users: get: tags: - users operationId: getUsers summary: Get all users parameters: - name: limit in: query description: Maximum number of users to return required: false schema: type: integer default: 10 - name: offset in: query description: Number of users to skip required: false schema: type: integer default: 0 responses: '200': description: List of users content: application/json: schema: type: array items: $ref: '#/components/schemas/User' post: tags: - users operationId: createUser summary: Create a new user requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateUserInput' responses: '201': description: User created content: application/json: schema: $ref: '#/components/schemas/User' /users/{userId}: get: tags: - users operationId: getUserById summary: Get a user by ID parameters: - name: userId in: path description: User ID required: true schema: type: string responses: '200': description: User found content: application/json: schema: $ref: '#/components/schemas/User' put: tags: - users operationId: updateUser summary: Update a user parameters: - name: userId in: path description: User ID required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserInput' responses: '200': description: User updated content: application/json: schema: $ref: '#/components/schemas/User' delete: tags: - users operationId: deleteUser summary: Delete a user parameters: - name: userId in: path description: User ID required: true schema: type: string - name: X-Request-Id in: header description: Request ID for tracing required: false schema: type: string responses: '204': description: User deleted /posts: get: tags: - posts operationId: getPosts summary: Get all posts parameters: - name: authorId in: query description: Filter by author ID required: false schema: type: string - name: status in: query description: Filter by status required: false schema: type: string enum: - draft - published - archived responses: '200': description: List of posts content: application/json: schema: type: array items: $ref: '#/components/schemas/Post' post: tags: - posts operationId: createPost summary: Create a new post parameters: - name: X-Author-Id in: header description: Author ID required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreatePostInput' responses: '201': description: Post created content: application/json: schema: $ref: '#/components/schemas/Post' /posts/{postId}: get: tags: - posts operationId: getPostById summary: Get a post by ID parameters: - name: postId in: path description: Post ID required: true schema: type: string - name: includeComments in: query description: Include comments in response required: false schema: type: boolean default: false responses: '200': description: Post found content: application/json: schema: $ref: '#/components/schemas/Post' components: schemas: User: type: object required: - id - email - name properties: id: type: string email: type: string format: email name: type: string createdAt: type: string format: date-time CreateUserInput: type: object required: - email - name properties: email: type: string format: email name: type: string password: type: string minLength: 8 UpdateUserInput: type: object properties: email: type: string format: email name: type: string Post: type: object required: - id - title - content - authorId properties: id: type: string title: type: string content: type: string authorId: type: string status: type: string enum: - draft - published - archived createdAt: type: string format: date-time CreatePostInput: type: object required: - title - content properties: title: type: string content: type: string status: type: string enum: - draft - published default: draft