# The complete example from our README.md file. openapi: "3.1.0" info: title: Example OpenAPI definition paths: /widgets: post: requestBody: required: true content: application/json: schema: # This becomes `$ref: "#/components/schemas/WidgetPost`. $interface: "Widget#Post" responses: 201: content: application/json: schema: # This becomes `$ref: "#/components/schemas/Widget`. $interface: "Widget" components: # You can declare schemas normally if you wish. schemas: {} # But we also support interface definitions. interfaces: Resource: emit: false # Do not include this in generated output. members: id: required: true schema: # Normal OpenAPI / JSON Schema definitions. type: string format: uuid Widget: # Include all fields from `Resource`. $includes: "Resource" description: | A displayable widget. members: # We can override properties from `Resource` using JSON # Merge Patch syntax. id: schema: example: e35a3c8d-5486-49ec-9b23-6747afc19570 name: required: true mutable: true schema: type: string comment: mutable: true schema: type: string readonly: required: true # This can't be updated once the object is created. mutable: false # But we do allow this to be set at creation time. # If omitted, `initializable` defaults to the value # of the `mutable` option. initializable: true schema: type: string