Complex data types
Describe APIs with flexible schemas using oneOf, anyOf, and allOf keywords for optional properties, polymorphism, and multiple data formats.
When your API accepts multiple data formats, has conditional fields, or uses inheritance patterns, OpenAPI's schema composition keywords help you document these flexible structures. Using oneOf, anyOf, and allOf, you can describe APIs that handle different input types or combine multiple schemas into comprehensive data models.
oneOf, anyOf, allOf keywords
Section titled “oneOf, anyOf, allOf keywords”For complex data types, OpenAPI provides keywords for combining schemas:
allOf: Combines multiple schemas (like merging objects or extending a base schema). Functions like anandoperator.anyOf: Accepts data matching any of the provided schemas. Functions like anoroperator.oneOf: Accepts data matching exactly one of the provided schemas. Functions like anexclusive-oroperator.
For detailed specifications of these keywords see the OpenAPI documentation.
Combining schemas with allOf
Section titled “Combining schemas with allOf”When you use allOf, Mintlify performs some preprocessing on your OpenAPI document to display complex combinations in a readable way. For example, when you combine two object schemas with allOf, Mintlify combines the properties of both into a single object. This becomes especially useful when you use OpenAPI's reusable components.
org_with_users:
allOf:
- $ref: '#/components/schemas/Org'
- type: object
properties:
users:
type: array
description: An array containing all users in the organization
# ...
components:
schemas:
Org:
type: object
properties:
id:
type: string
description: The ID of the organizationorg_with_users(object)
Details
id(string) — The ID of the organizationusers(object[]) — An array containing all users in the organization
any and undefined types
Section titled “any and undefined types”Fields typed as any or undefined render the same way as oneOf schemas with a picker that lets users select a concrete shape before sending a request. This allows the API playground to present a meaningful input even when the schema doesn't constrain the value to a single type.
Providing options with oneOf and anyOf
Section titled “Providing options with oneOf and anyOf”When you use oneOf or anyOf, the options display in a tabbed container. Specify a title field in each subschema to give your options names. For example, here's how you might display two different types of delivery addresses:
delivery_address:
oneOf:
- title: StreetAddress
type: object
properties:
address_line_1:
type: string
description: The street address of the recipient
# ...
- title: POBox
type: object
properties:
box_number:
type: string
description: The number of the PO Box
# ...delivery_address(object)
address_line_1(string) — The street address of the residence
box_number(string) — The number of the PO Box