openapi: 3.1.0 info: title: OpenAPI 3.1 Test Spec version: 1.0.0 description: Test fixture for OpenAPI 3.1 specific features servers: - url: https://api.example.com/v1 paths: /users: get: operationId: listUsers summary: List all users tags: - Users responses: '200': description: Successful response content: application/json: schema: type: array items: $ref: '#/components/schemas/User' post: operationId: createUser summary: Create a user tags: - Users requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateUserRequest' responses: '201': description: User created /users/{id}: get: operationId: getUser summary: Get a user by ID tags: - Users parameters: - name: id in: path required: true schema: type: string responses: '200': description: Successful response webhooks: userCreated: post: operationId: userCreatedWebhook summary: User created event requestBody: content: application/json: schema: $ref: '#/components/schemas/UserEvent' responses: '200': description: Webhook acknowledged userDeleted: post: operationId: userDeletedWebhook summary: User deleted event requestBody: content: application/json: schema: $ref: '#/components/schemas/UserEvent' responses: '200': description: Webhook acknowledged components: schemas: # Test: type as array (OpenAPI 3.1) NullableString: type: - string - 'null' description: A string that can be null (3.1 style) # Test: multiple types in array StringOrNumber: type: - string - number description: Can be either string or number # Test: const keyword (OpenAPI 3.1) StatusActive: const: active description: Always the literal value 'active' StatusCode: const: 200 description: Always the number 200 # Test: nullable with complex type NullableInteger: type: - integer - 'null' # Test: object with nullable properties (3.1 style) User: type: object required: - id - email - status properties: id: type: string description: User ID email: type: string format: email name: type: - string - 'null' description: Optional name (can be null) age: type: - integer - 'null' description: Optional age status: const: active metadata: type: - object - 'null' description: Optional metadata # Test: object with OpenAPI 3.0 style nullable (for backward compat) LegacyUser: type: object properties: id: type: string nickname: type: string nullable: true description: Nickname (nullable 3.0 style) CreateUserRequest: type: object required: - email properties: email: type: string name: type: - string - 'null' UserEvent: type: object required: - eventType - userId properties: eventType: type: string userId: type: string timestamp: type: string format: date-time