Specifying multiple types for additionalProperties through Swagger/OpenAPI

10,014

OpenAPI 3.0

OpenAPI 3.0 supports oneOf so you can use:

Person:
  type: object
  additionalProperties:
    oneOf:
      - type: string
      - type: integer

OpenAPI 2.0

OpenAPI 2.0 does not support multi-type values. The most you can do is use the typeless schema, which means the additional properties can be anything - strings, numbers, booleans, and so on - but you can't specify the exact types.

Person:
  type: object
  additionalProperties: {}

This is equivalent to:

Person:
  type: object
Share:
10,014
sle
Author by

sle

Updated on July 24, 2022

Comments

  • sle
    sle almost 2 years

    I am looking to represent the following JSON Object in OpenAPI:

    {
      "name": "Bob",
      "age": 4,
      ...
    }
    

    The number of properties and the property names are not fully predetermined, so I look to use additionalProperties. However, I'm not too certain how it would be represented through OpenAPI/Swagger 2.0. I tried this:

    Person:
      type: object
      additionalProperties:
        type:
          - int
          - string
    

    or the JSON equivalent:

    {
      "Person": {
        "type": "object",
        "additionalProperties": {
          "type": ["int", "string"]
        }
      }
    }
    

    but that didn't quite work. Is there any way to keep the structure of the JSON Object I want to represent, for specifically strings and integers, and not arbitrary object types?