diff --git a/.travis.yml b/.travis.yml
index 37727967b9..822a22279c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,10 +9,11 @@ matrix:
- env: VALIDATORS=tv4
install:
- rm -rf ~/.nvm
+ - mkdir -p ~/.nvm
- curl -L https://raw.githubusercontent.com/creationix/nvm/master/install.sh | sh
- source ~/.nvm/nvm.sh
- - nvm install 6.1
- - nvm use 6.1
+ - nvm install 8
+ - nvm use 8
script:
- npm install
- node node_modules/mdv/mdv versions/3.*.md
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
index 698eccfb69..b975f55b98 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -1,6 +1,6 @@
## Development Guidelines
-This document intends to establish guidelines which build a transparent, open mechanism for deciding how to evolve the OpenAPI Specification. The Open API Technical Developer Community will initially follow these processes when merging changes from external contributors or from the TDC itself. This guideline document will be adjusted as practicality dictates.
+This document intends to establish guidelines which build a transparent, open mechanism for deciding how to evolve the OpenAPI Specification. The Open API Technical Steering Committee (TSC) will initially follow these processes when merging changes from external contributors or from the TSC itself. This guideline document will be adjusted as practicality dictates.
## OAI Specification Driving factors
@@ -43,7 +43,7 @@ For each change in the specification we should _always_ consider the following:
- Tooling. Strive to support code generation, software interfaces, and spec generation techniques. Some features may be impossible to support in different frameworks/languages. These should be documented and considered during the change approval process.
- Visualization. Can the specification change be graphically visualized somehow in a UI or other interface?
-Spec changes should be approved by a majority of the committers. Approval can be given by commenting on the issue itself, for example, "Approved by @fehguy". After voting criteria is met, any committer can merge the PR. (**TODO**: we will want to formalize what voting criteria actually is).
+Spec changes should be approved by a majority of the committers. Approval can be given by commenting on the issue itself, for example, "Approved by @webron". After voting criteria is met, any committer can merge the PR. (**TODO**: we will want to formalize what voting criteria actually is).
No change should be approved until there is documentation for it, supplied in an accompanying PR.
diff --git a/GOVERNANCE.md b/GOVERNANCE.md
new file mode 100644
index 0000000000..e9eda78d71
--- /dev/null
+++ b/GOVERNANCE.md
@@ -0,0 +1,31 @@
+# Governance
+
+The OpenAPI Specification is a project of the Open API Initiative (OAI), under the auspices of the Linux Foundation. For governance of the OAI, review the [OAI's charter](https://www.openapis.org/participate/how-to-contribute/governance).
+
+# Processes and procedures of the Technical Steering Committee (TSC)
+
+The TSC is a self-organizing sub-group of the OAI. Herein are its principles and guidelines.
+
+## 1. The establishment of roles and the responsibilities for each role
+
+Roles:
+
+* [Liaison](https://www.merriam-webster.com/dictionary/liaison) — Elected by TSC members in a plurality vote (oral count). Liaison represents the TSC to the OAI's Business Governing Board (BGB) at board meetings (though this itself does not confer voting rights) and is the public facing mouthpiece of the TSC.
+
+* [Maintainer](https://www.merriam-webster.com/dictionary/maintainer) — all and only members of the TSC are maintainers, and are responsible for approving proposed changes to the specification. If membership drops below 3, work is suspended until the BGB can re-establish the minimum. To maintain agility, the TSC should be capped at a maximum 9 members, though that number can be reconsidered by the TSC in the future. Past members will be noted as emeritus status once they are no longer members.
+
+* [Rick](https://www.youtube.com/watch?v=dQw4w9WgXcQ) — Responsible for not giving up or letting down. Requires plurality vote of TSC members.
+
+## 2. Adding members to the TSC
+
+A call-for-nominations period may be agreed upon by the TSC voting members and announced in a timely manner through [@OpenApiSpec](https://twitter.com/OpenApiSpec) on Twitter, assuming the TSC membership is not already at its maximum. A candidate may be nominated through a motion by a voting TSC member in a closed TSC meeting. A nominee must not receive opposition votes of more than 25% of the TSC voting membership via a confidential vote held electronically within a week following the nomination meeting. Approved nominees become provisional members and are expected to comport themselves as full members of the TSC during the provisional period of 4-6 weeks (to be determined at start of each nominating period), though nominees have no voting rights. The provisional period is concluded by a second, confidential vote similar to the nomination period's vote. At most there are four voting periods per year (no more than one every three months), with a minimum of one per year.
+
+## 3. Removal of membership from the TSC
+
+In dire situations, it may be necessary to remove a TSC member, such as behavior that violates the code of conduct (NB: whether non-participation merits removal is a decision left to the TSC voting members). 75% vote (confidential, electronic) of the other TSC members is required to remove a member. Otherwise, TSC members are removed when they renounce their position by informing the Liaison of their effective resignation date.
+
+## 4. Criteria for decisions
+
+The group will strive to achieve all decisions via unopposed consensus. When not possible, unresolved conflicts will be raised to the OAI's Technical Oversight Board (TOB).
+
+The TSC will maintain a publicly available document specifying the process in the contributor guidelines for how proposed changes are merged into the specification. The TSC will document and publicize the schedule of merge parties and release parties for the benefit of the developer community.
diff --git a/IMPLEMENTATIONS.md b/IMPLEMENTATIONS.md
index 96a2a2d6c1..e7411465f3 100644
--- a/IMPLEMENTATIONS.md
+++ b/IMPLEMENTATIONS.md
@@ -2,46 +2,60 @@
Below is a list of known tooling that implements the 3.0.0 specification. While support for the 3.0.0 specification matures, refer to the details of projects listed below for any notes about stability and roadmap. The process to improve the 3.x specification includes feedback from end-users and tooling creators. We strongly encourage draft tooling be made available for early users of OAS drafts.
-These tools are not necessarily endorsed by the OAI.
+These tools are not endorsed by the OAI.
#### Low-Level tooling
| Title | Project Link | Language |Description |
|----------------|--------------|----------|---------------------|
-| swagger-parser | [GitHub/swagger-api](https://github.com/swagger-api/swagger-parser/tree/feature/3.0.0-rc0) | Java | Swagger 1.0, 1.1, 1.2, 2.0 to Open API Specification converter |
-| swagger-models | [GitHub/swagger-api](https://github.com/swagger-api/swagger-core/tree/feature/3.0.0-rc0/modules/swagger-models) | Java | Open API 3.0 Java Pojos |
-| KaiZen OpenAPI Parser | [GitHub/RepreZen/KaiZen-OpenAPI-Parser](https://github.com/RepreZen/KaiZen-OpenAPI-Parser) | Java | High-performance Parser, Validator, and Java Object Model for OpenAPI 3.x |
-| openapi3-ts | [GitHub/metadevpro/openapi3-ts](https://github.com/metadevpro/openapi3-ts) | TypeScript | TS Model & utils for OpenAPI 3.0.x contracts |
-| swagger2openapi | [GitHub/mermade/swagger2openapi](https://github.com/mermade/swagger2openapi) | Node.js | An OpenAPI / Swagger 2.0 to OpenAPI 3.0.x converter and validator |
-| Tavis.OpenApi | [GitHub/tavis-sofware/Tavis.OpenApi](https://github.com/tavis-software/Tavis.OpenApi/) | dotnet | C# based parser with definition validation and migration support from V2 |
-| odata-openapi | [GitHub/oasis-tcs/odata-openapi](https://github.com/oasis-tcs/odata-openapi) | XSLT | OData 4.0 to OpenAPI 3.0.0 converter |
+| swagger-parser | [github/swagger-api](https://github.com/swagger-api/swagger-parser/tree/feature/3.0.0-rc0) | Java | Swagger 1.0, 1.1, 1.2, 2.0 to OpenAPI Specification converter |
+| swagger-models | [github/swagger-api](https://github.com/swagger-api/swagger-core/tree/feature/3.0.0-rc0/modules/swagger-models) | Java | OpenAPI 3.0 Java Pojos |
+| KaiZen OpenAPI Parser | [github/RepreZen/KaiZen-OpenAPI-Parser](https://github.com/RepreZen/KaiZen-OpenAPI-Parser) | Java | High-performance Parser, Validator, and Java Object Model for OpenAPI 3.x |
+| openapi3-ts | [github/metadevpro/openapi3-ts](https://github.com/metadevpro/openapi3-ts) | TypeScript | TS Model & utils for OpenAPI 3.0.x contracts |
+| swagger2openapi | [github/mermade/swagger2openapi](https://github.com/mermade/swagger2openapi) | Node.js | An OpenAPI / Swagger 2.0 to OpenAPI 3.0.x converter and validator |
+| Microsoft.OpenApi.net | [github/microsoft/OpenApi.net](https://github.com/microsoft/openapi.net/) | dotnet | C# based parser with definition validation and migration support from V2 |
+| odata-openapi | [github/oasis-tcs/odata-openapi](https://github.com/oasis-tcs/odata-openapi) | XSLT | OData 4.0 to OpenAPI 3.0.0 converter |
+| openapi3_parser | [github/kevindew/openapi3_parser](https://github.com/kevindew/openapi3_parser) | Ruby | A Ruby implementation of parser and validator for the OpenAPI 3 Specification |
+| oas_parser | [github/Nexmo/oas_parser](https://github.com/Nexmo/oas_parser) | Ruby | An open source OpenAPI Spec 3 Definition Parser writen in Ruby |
#### Editors
| Title | Project Link | Language |Description |
|----------------|--------------|----------|---------------------|
-| KaiZen OpenAPI Editor | [GitHub/RepreZen/KaiZen-OpenAPI-Editor](https://github.com/RepreZen/KaiZen-OpenAPI-Editor) | Java | Eclipse Editor for OpenAPI 2.0 and 3.0 |
+| Apicurio Studio | [github/Apicurio/apicurio-studio](https://github.com/Apicurio/apicurio-studio) | Java/Typescript | Web-Based **visual designer** for OpenAPI 2.0 and 3.0.0. |
+| KaiZen OpenAPI Editor | [github/RepreZen/KaiZen-OpenAPI-Editor](https://github.com/RepreZen/KaiZen-OpenAPI-Editor) | Java | Eclipse Editor for OpenAPI 2.0 and 3.0 |
| RepreZen API Studio | [RepreZen.com/OpenAPI](https://www.reprezen.com/OpenAPI) | Java | Commercial desktop IDE for API design, documentation & development |
-| OpenApi-gui | [GitHub/Mermade/openapi-gui](https://github.com/Mermade/openapi-gui) | Node.js | GUI / visual editor for creating and editing OpenApi / Swagger definitions |
-| swagger-editor | [GitHub/swagger-api](https://github.com/swagger-api/swagger-editor) | JavaScript | Web-Based editor for creating, editing, validating and testing OpenAPI\Swagger definitions |
+| OpenAPI-gui | [github/Mermade/openapi-gui](https://github.com/Mermade/openapi-gui) | Node.js | GUI / visual editor for creating and editing OpenAPI definitions |
+| SwaggerHub | [swaggerhub.com](https://swaggerhub.com) | | API Design and Documentation Platform, Built For Teams
+| swagger-editor | [github/swagger-api](https://github.com/swagger-api/swagger-editor) | JavaScript | Web-Based editor for creating, editing, validating and testing OpenAPI\Swagger definitions |
#### User Interfaces
| Title | Project Link | Language |Description |
|----------------|--------------|----------|---------------------|
-| openapi-viewer | [GitHub/koumoul/openapi-viewer](https://github.com/koumoul-dev/openapi-viewer) | Vue.js | Browse and test a REST API described with the OpenAPI 3.0 Specification. |
-| swagger-ui | [GitHub/swagger-api](https://github.com/swagger-api/swagger-UI) | JavaScript | Web-Based interface for visualizing and testing OpenAPI\Swagger definitions |
-| lincoln | [GitHub/temando/open-api-renderer](https://github.com/temando/open-api-renderer)| React.js| A React renderer for Open API v3 |
-
+| openapi-viewer | [github/koumoul/openapi-viewer](https://github.com/koumoul-dev/openapi-viewer) | Vue.js | Browse and test a REST API described with the OpenAPI 3.0 Specification. |
+| swagger-ui | [github/swagger-api](https://github.com/swagger-api/swagger-UI) | JavaScript | Web-Based interface for visualizing and testing OpenAPI\Swagger definitions |
+| lincoln | [github/temando/open-api-renderer](https://github.com/temando/open-api-renderer)| React.js| A React renderer for OpenAPI v3 |
+| WebSphere Liberty | [Download jar](https://developer.ibm.com/wasdev/downloads/) | JavaScript | Includes a native OpenAPI v3 UI which allows for customization of its banners and URL |
+| Widdershins | [github/Mermade/widdershins](https://github.com/Mermade/widdershins) | Node.js | Generate Slate/Shins markdown from OpenAPI 3.0.x |
+| angular-swagger-ui | [github/angular-swagger-ui](https://github.com/Orange-OpenSource/angular-swagger-ui) | AngularJS | An angularJS implementation of Swagger UI |
#### Server Implementations
-
+| Title | Project Link | Language |Description |
+|----------------|--------------|----------|---------------------|
+| Vert.x Web API Contract | [github/vert-x3/vertx-web](http://vertx.io/docs/#web) | Java, Kotlin, JavaScript, Groovy, Ruby, Ceylon & Scala | Create an API endpoint with Vert.x 3 and OpenAPI 3 with automatic requests validation
+| Fusio | [github/apioo/fusio](https://github.com/apioo/fusio) | PHP, JavaScript | Build API endpoints based on OpenAPI 3
+| Modern | [github/modern-project/modern-ruby](https://github.com/modern-project/modern-ruby) | Ruby | OpenAPI 3-based Rack framework with automatic OAS generation and requests/response validation
#### Code Generators
| Title | Project Link | Language |Description |
|----------------|--------------|----------|---------------------|
-| baucis-openapi3 | [Github/metadevpro/baucis-openapi3](https://github.com/metadevpro/baucis-openapi3) | Node.js | [Baucis.js](https://github.com/wprl/baucis) plugin for generating OpenAPI 3.0 compliant API contracts. |
-| Google Gnostic | [GitHub/googleapis/gnostic](https://github.com/googleapis/gnostic) | Go | Compile OpenAPI descriptions into equivalent Protocol Buffer representations. |
-| serverless-openapi-documentation | [GitHub/temando/serverless-openapi-documentation](https://github.com/temando/serverless-openapi-documentation) | Typescript | Serverless 1.0 plugin to generate OpenAPI V3 documentation from serverless configuration |
+| baucis-openapi3 | [github/metadevpro/baucis-openapi3](https://github.com/metadevpro/baucis-openapi3) | Node.js | [Baucis.js](https://github.com/wprl/baucis) plugin for generating OpenAPI 3.0 compliant API contracts. |
+| Google Gnostic | [github/googleapis/gnostic](https://github.com/googleapis/gnostic) | Go | Compile OpenAPI descriptions into equivalent Protocol Buffer representations. |
+| serverless-openapi-documentation | [github/temando/serverless-openapi-documentation](https://github.com/temando/serverless-openapi-documentation) | Typescript | Serverless 1.0 plugin to generate OpenAPI V3 documentation from serverless configuration |
+| zero-rails_openapi | [github/zhandao/zero-rails_openapi](https://github.com/zhandao/zero-rails_openapi) | Ruby | Provide concise DSL for generating the OpenAPI Specification 3 documentation file for Rails application |
+| slush-vertx | [github/pmlopes/slush-vertx](https://github.com/pmlopes/slush-vertx) | Java, Kotlin & Groovy | Generate server skeleton for [Vert.x Web API Contract](http://vertx.io/docs/#web) and API Client based on [Vert.x 3 Web Client](http://vertx.io/docs/#web)
+| WebSphere Liberty | [Download jar](https://developer.ibm.com/wasdev/downloads/) | Java EE | Generates OpenAPI v3 documentation from Java EE applications |
+| swagger-node-codegen | [github/fmvilas/swagger-node-codegen](https://github.com/fmvilas/swagger-node-codegen) | Node.js | Generates a Node.js/express server, but also has a template engine for creating any templates needed. |
diff --git a/MAINTAINERS.md b/MAINTAINERS.md
new file mode 100644
index 0000000000..34421f2c62
--- /dev/null
+++ b/MAINTAINERS.md
@@ -0,0 +1,11 @@
+## Active
+* Darrel Miller [@darrelmiller](https://github.com/darrelmiller)
+* Jeremy Whitlock [@whitlockjc](https://github.com/whitlockjc)
+* Marsh Gardiner [@earth2marsh](https://github.com/earth2marsh)
+* Mike Ralphson [@MikeRalphson](https://github.com/MikeRalphson)
+* Ron Ratovsky [@webron](https://github.com/webron)
+* Uri Sarid [@usarid](https://github.com/usarid)
+
+## Emeritus
+* Jason Harmon [@jharmn](https://github.com/jharmn)
+* Tony Tam [@fehguy](https://github.com/fehguy)
diff --git a/README.md b/README.md
index f2f1f82cd4..c432ba4236 100644
--- a/README.md
+++ b/README.md
@@ -4,29 +4,27 @@

-The OpenAPI Specification is a community driven, open specification within the [Open API Initiative](https://www.openapis.org/), a Linux Foundation Collaborative Project.
+The OpenAPI Specification is a community-driven open specification within the [OpenAPI Initiative](https://www.openapis.org/), a Linux Foundation Collaborative Project.
-The OpenAPI Specification (OAS) defines a standard, programming language-agnostic interface description for REST APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.
+The OpenAPI Specification (OAS) defines a standard, programming language-agnostic interface description for [REST APIs](https://en.wikipedia.org/wiki/Representational_state_transfer), which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.
-Use cases for machine-readable API definition documents include, but are not limited to, interactive documentation; code generation for documentation, clients, and servers; and automation of test cases. OpenAPI documents describe an API's services and are represented in either YAML or JSON formats. These documents may either be produced and served statically or be generated dynamically from an application.
+Use cases for machine-readable API definition documents include, but are not limited to: interactive documentation; code generation for documentation, clients, and servers; and automation of test cases. OpenAPI documents describe an API's services and are represented in either YAML or JSON formats. These documents may either be produced and served statically or be generated dynamically from an application.
-The OpenAPI Specification does not require rewriting existing APIs. It does not require binding any software to a service—the service being described may not even be owned by the creator of its description. It does, however, require the capabilities of the service be described in the structure of the OpenAPI Specification. Not all services can be described by OpenAPI—this specification is not intended to cover every possible style of REST APIs. The OpenAPI Specification does not mandate a specific development process such as design-first or code-first. It does facilitate either technique by establishing clear interactions with a REST API.
+The OpenAPI Specification does not require rewriting existing APIs. It does not require binding any software to a service — the service being described may not even be owned by the creator of its description. It does, however, require the capabilities of the service be described in the structure of the OpenAPI Specification. Not all services can be described by OpenAPI — this specification is not intended to cover every possible style of REST APIs. The OpenAPI Specification does not mandate a specific development process such as design-first or code-first. It does facilitate either technique by establishing clear interactions with a REST API.
-This GitHub project is the starting point for OpenAPI.
-Here you will find the information you need about the OpenAPI Specification, simple examples of what it looks like, and some general information regarding the project.
+This GitHub project is the starting point for OpenAPI. Here you will find the information you need about the OpenAPI Specification, simple examples of what it looks like, and some general information regarding the project.
-## Current Version - 3.0
+## Current Version - 3.0.1
-The current version of the OpenAPI specification is [OpenAPI Specification 3.0](versions/3.0.0.md).
+The current version of the OpenAPI specification is [OpenAPI Specification 3.0.1](versions/3.0.1.md).
### Future Versions
-[3.0.1](https://github.com/OAI/OpenAPI-Specification/tree/v3.0.1) - The next PATCH version. Patch-level fixes (typos, clarifications, etc.) should be submitted against this branch.
+[3.0.2](https://github.com/OAI/OpenAPI-Specification/tree/v3.0.2-dev) - The next PATCH version. Patch-level fixes (typos, clarifications, etc.) should be submitted against this branch.
### Previous Versions
-This repository also contains the [OpenAPI Specification 2.0](versions/2.0.md), which is identical to the Swagger 2.0 specification before it was renamed to “OpenAPI Specification”,
-as well as the Swagger 1.2 and Swagger 2.0 specifications.
+This repository also contains the [OpenAPI Specification 2.0](versions/2.0.md), which is identical to the Swagger 2.0 specification before it was renamed to "OpenAPI Specification", as well as the Swagger 1.2 and Swagger 2.0 specifications.
Each folder in this repository, such as [examples](examples) and [schemas](schemas), should contain folders pertaining to the current and previous versions of the specification.
@@ -37,18 +35,19 @@ If you just want to see it work, check out the [list of current examples](exampl
## Tools and Libraries
Looking to see how you can create your own OpenAPI definition, present it, or otherwise use it? Check out the growing
-[list of 3.0 Implementations](IMPLEMENTATIONS.md).
+[list of 3.0 implementations](IMPLEMENTATIONS.md).
## Participation
The current process for development of the OpenAPI Specification is described in
[Development Guidelines](DEVELOPMENT.md).
-Development of the next version of the OpenAPI Specification is guided by the [Technical Developer Community](https://www.openapis.org/participate/how-to-contribute/governance#TDC). This group of committers bring their API expertise, incorporate feedback from the community, and expand the group of committers as appropriate. All development activity on the future specification will be performed as features and merged into this branch. Upon release of the future specification, this branch will be merged to master.
+Development of the next version of the OpenAPI Specification is guided by the [Technical Steering Committee (TSC)](https://www.openapis.org/participate/how-to-contribute/governance#TDC). This group of committers bring their API expertise, incorporate feedback from the community, and expand the group of committers as appropriate. All development activity on the future specification will be performed as features and merged into this branch. Upon release of the future specification, this branch will be merged to master.
-The Open API Initiative encourages participation from individuals and companies alike.
-If you want to participate in the evolution of the OpenAPI Specification, consider taking the following actions:
+The TSC holds weekly web conferences to review open pull requests and discuss open issues related to the evolving OpenAPI Specification. Participation in weekly calls and scheduled working sessions is open to the community. You can view the [TSC calendar online](https://openapi.groups.io/g/tsc/calendar), and import it to your calendar using the [iCal link](https://openapi.groups.io/g/tsc/ics/1105671/1995679554/feed.ics).
-* Review the [current specification](versions/3.0.0.md). The human-readable markdown file _is the source of truth_ for the specification.
+The Open API Initiative encourages participation from individuals and companies alike. If you want to participate in the evolution of the OpenAPI Specification, consider taking the following actions:
+
+* Review the [current specification](versions/3.0.1.md). The human-readable markdown file _is the source of truth_ for the specification.
* Review the [development](DEVELOPMENT.md) process so you understand how the spec is evolving.
* Check the [issues](https://github.com/OAI/OpenAPI-Specification/issues) and [pull requests](https://github.com/OAI/OpenAPI-Specification/pulls) to see if someone has already documented your idea or feedback on the specification. You can follow an existing conversation by adding a comment to the existing issue or PR.
* Create an issue to describe a new concern. If possible, propose a solution.
@@ -57,8 +56,6 @@ Not all feedback can be accommodated and there may be solid arguments for or aga
## License
-
See: [License (Apache-2.0)](https://github.com/OAI/OpenAPI-Specification/blob/master/LICENSE)
-

diff --git a/examples/v2.0/json/petstore-expanded.json b/examples/v2.0/json/petstore-expanded.json
index 0c59f9a48e..d5d8de8126 100644
--- a/examples/v2.0/json/petstore-expanded.json
+++ b/examples/v2.0/json/petstore-expanded.json
@@ -7,12 +7,12 @@
"termsOfService": "http://swagger.io/terms/",
"contact": {
"name": "Swagger API Team",
- "email": "foo@example.com",
- "url": "http://madskristensen.net"
+ "email": "apiteam@swagger.io",
+ "url": "http://swagger.io"
},
"license": {
- "name": "MIT",
- "url": "http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT"
+ "name": "Apache 2.0",
+ "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "petstore.swagger.io",
@@ -207,4 +207,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/examples/v2.0/json/petstore-separate/spec/swagger.json b/examples/v2.0/json/petstore-separate/spec/swagger.json
index 542b76fc2a..7276990020 100644
--- a/examples/v2.0/json/petstore-separate/spec/swagger.json
+++ b/examples/v2.0/json/petstore-separate/spec/swagger.json
@@ -4,18 +4,18 @@
"version": "1.0.0",
"title": "Swagger Petstore",
"description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification",
- "termsOfService": "http://helloreverb.com/terms/",
+ "termsOfService": "http://swagger.io/terms/",
"contact": {
- "name": "Wordnik API Team",
- "email": "foo@example.com",
- "url": "http://madskristensen.net"
+ "name": "Swagger API Team",
+ "email": "apiteam@swagger.io",
+ "url": "http://swagger.io"
},
"license": {
- "name": "MIT",
- "url": "http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT"
+ "name": "Apache 2.0",
+ "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
}
},
- "host": "petstore.swagger.wordnik.com",
+ "host": "petstore.swagger.io",
"basePath": "/api",
"schemes": [
"http"
@@ -143,4 +143,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/examples/v2.0/json/petstore-with-external-docs.json b/examples/v2.0/json/petstore-with-external-docs.json
index 4c5154c233..e9d3f7765d 100644
--- a/examples/v2.0/json/petstore-with-external-docs.json
+++ b/examples/v2.0/json/petstore-with-external-docs.json
@@ -11,8 +11,8 @@
"url": "http://swagger.io"
},
"license": {
- "name": "MIT",
- "url": "http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT"
+ "name": "Apache 2.0",
+ "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"externalDocs": {
@@ -230,4 +230,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/examples/v2.0/yaml/petstore-expanded.yaml b/examples/v2.0/yaml/petstore-expanded.yaml
index 588759d91a..e415dae654 100644
--- a/examples/v2.0/yaml/petstore-expanded.yaml
+++ b/examples/v2.0/yaml/petstore-expanded.yaml
@@ -6,11 +6,11 @@ info:
termsOfService: http://swagger.io/terms/
contact:
name: Swagger API Team
- email: foo@example.com
- url: http://madskristensen.net
+ email: apiteam@swagger.io
+ url: http://swagger.io
license:
- name: MIT
- url: http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
+ name: Apache 2.0
+ url: https://www.apache.org/licenses/LICENSE-2.0.html
host: petstore.swagger.io
basePath: /api
schemes:
diff --git a/examples/v2.0/yaml/petstore-separate/spec/swagger.yaml b/examples/v2.0/yaml/petstore-separate/spec/swagger.yaml
index 850527ebf6..b937b5022a 100644
--- a/examples/v2.0/yaml/petstore-separate/spec/swagger.yaml
+++ b/examples/v2.0/yaml/petstore-separate/spec/swagger.yaml
@@ -3,15 +3,15 @@ info:
version: 1.0.0
title: Swagger Petstore
description: A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification
- termsOfService: http://helloreverb.com/terms/
+ termsOfService: http://swagger.io/terms/
contact:
- name: Wordnik API Team
- email: foo@example.com
- url: http://madskristensen.net
+ name: Swagger API Team
+ email: apiteam@swagger.io
+ url: http://swagger.io
license:
- name: MIT
- url: http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
-host: petstore.swagger.wordnik.com
+ name: Apache 2.0
+ url: https://www.apache.org/licenses/LICENSE-2.0.html
+host: petstore.swagger.io
basePath: /api
schemes:
- http
diff --git a/examples/v2.0/yaml/petstore-with-external-docs.yaml b/examples/v2.0/yaml/petstore-with-external-docs.yaml
index 3db47ff362..792864fca0 100644
--- a/examples/v2.0/yaml/petstore-with-external-docs.yaml
+++ b/examples/v2.0/yaml/petstore-with-external-docs.yaml
@@ -10,8 +10,8 @@
email: "apiteam@swagger.io"
url: "http://swagger.io"
license:
- name: "MIT"
- url: "http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT"
+ name: "Apache 2.0"
+ url: "https://www.apache.org/licenses/LICENSE-2.0.html"
externalDocs:
description: "find more info here"
url: "https://swagger.io/about"
diff --git a/examples/v2.0/yaml/petstore.yaml b/examples/v2.0/yaml/petstore.yaml
index 790948cb93..4003794e83 100644
--- a/examples/v2.0/yaml/petstore.yaml
+++ b/examples/v2.0/yaml/petstore.yaml
@@ -28,7 +28,7 @@ paths:
format: int32
responses:
"200":
- description: An paged array of pets
+ description: A paged array of pets
headers:
x-next:
type: string
diff --git a/examples/v3.0/callback-example.yaml b/examples/v3.0/callback-example.yaml
index 56ab18e27d..1622bd06b1 100644
--- a/examples/v3.0/callback-example.yaml
+++ b/examples/v3.0/callback-example.yaml
@@ -1,4 +1,7 @@
-# ...
+openapi: 3.0.0
+info:
+ title: Callback Example
+ version: 1.0.0
paths:
/streams:
post:
diff --git a/examples/v3.0/petstore-expanded.yaml b/examples/v3.0/petstore-expanded.yaml
index e8c0fe5ffd..d7533318c6 100644
--- a/examples/v3.0/petstore-expanded.yaml
+++ b/examples/v3.0/petstore-expanded.yaml
@@ -6,11 +6,11 @@ info:
termsOfService: http://swagger.io/terms/
contact:
name: Swagger API Team
- email: foo@example.com
- url: http://madskristensen.net
+ email: apiteam@swagger.io
+ url: http://swagger.io
license:
- name: MIT
- url: http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
+ name: Apache 2.0
+ url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: http://petstore.swagger.io/api
paths:
diff --git a/examples/v3.0/uber.yaml b/examples/v3.0/uber.yaml
deleted file mode 100644
index 8b94db300f..0000000000
--- a/examples/v3.0/uber.yaml
+++ /dev/null
@@ -1,297 +0,0 @@
-# this is an example of the Uber API
-# as a demonstration of an API spec in YAML
-openapi: "3.0.0"
-info:
- title: Uber API
- description: Move your app forward with the Uber API
- version: "1.0.0"
-servers:
- - url: https://api.uber.com/v1
-paths:
- /products:
- get:
- summary: Product Types
- description: The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order.
- parameters:
- - name: latitude
- in: query
- description: Latitude component of location.
- required: true
- schema:
- type: number
- format: double
- - name: longitude
- in: query
- description: Longitude component of location.
- required: true
- schema:
- type: number
- format: double
- security:
- - apikey: []
- tags:
- - Products
- responses:
- '200':
- description: An array of products
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/ProductList"
- default:
- description: Unexpected error
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Error"
- /estimates/price:
- get:
- summary: Price Estimates
- description: The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.
The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier.
- parameters:
- - name: start_latitude
- in: query
- description: Latitude component of start location.
- required: true
- schema:
- type: number
- format: double
- - name: start_longitude
- in: query
- description: Longitude component of start location.
- required: true
- schema:
- type: number
- format: double
- - name: end_latitude
- in: query
- description: Latitude component of end location.
- required: true
- schema:
- type: number
- format: double
- - name: end_longitude
- in: query
- description: Longitude component of end location.
- required: true
- schema:
- type: number
- format: double
- tags:
- - Estimates
- responses:
- '200':
- description: An array of price estimates by product
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: "#/components/schemas/PriceEstimate"
- default:
- description: Unexpected error
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Error"
- /estimates/time:
- get:
- summary: Time Estimates
- description: The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs.
- parameters:
- - name: start_latitude
- in: query
- description: Latitude component of start location.
- required: true
- schema:
- type: number
- format: double
- - name: start_longitude
- in: query
- description: Longitude component of start location.
- required: true
- schema:
- type: number
- format: double
- - name: customer_uuid
- in: query
- schema:
- type: string
- format: uuid
- description: Unique customer identifier to be used for experience customization.
- - name: product_id
- in: query
- schema:
- type: string
- description: Unique identifier representing a specific product for a given latitude & longitude.
- tags:
- - Estimates
- responses:
- '200':
- description: An array of products
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: "#/components/schemas/Product"
- default:
- description: Unexpected error
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Error"
- /me:
- get:
- summary: User Profile
- description: The User Profile endpoint returns information about the Uber user that has authorized with the application.
- tags:
- - User
- responses:
- '200':
- description: Profile information for a user
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Profile"
- default:
- description: Unexpected error
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Error"
- /history:
- get:
- summary: User Activity
- description: The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.
The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary.
- parameters:
- - name: offset
- in: query
- schema:
- type: integer
- format: int32
- description: Offset the list of returned results by this amount. Default is zero.
- - name: limit
- in: query
- schema:
- type: integer
- format: int32
- description: Number of items to retrieve. Default is 5, maximum is 100.
- tags:
- - User
- responses:
- '200':
- description: History information for the given user
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Activities"
- default:
- description: Unexpected error
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Error"
-components:
- securitySchemes:
- apikey:
- type: apiKey
- name: server_token
- in: query
- schemas:
- Product:
- properties:
- product_id:
- type: string
- description: Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles.
- description:
- type: string
- description: Description of product.
- display_name:
- type: string
- description: Display name of product.
- capacity:
- type: integer
- description: Capacity of product. For example, 4 people.
- image:
- type: string
- description: Image URL representing the product.
- ProductList:
- properties:
- products:
- description: Contains the list of products
- type: array
- items:
- $ref: "#/components/schemas/Product"
- PriceEstimate:
- properties:
- product_id:
- type: string
- description: Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles
- currency_code:
- type: string
- description: "[ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code."
- display_name:
- type: string
- description: Display name of product.
- estimate:
- type: string
- description: Formatted string of estimate in local currency of the start location. Estimate could be a range, a single number (flat rate) or "Metered" for TAXI.
- low_estimate:
- type: number
- description: Lower bound of the estimated price.
- high_estimate:
- type: number
- description: Upper bound of the estimated price.
- surge_multiplier:
- type: number
- description: Expected surge multiplier. Surge is active if surge_multiplier is greater than 1. Price estimate already factors in the surge multiplier.
- Profile:
- properties:
- first_name:
- type: string
- description: First name of the Uber user.
- last_name:
- type: string
- description: Last name of the Uber user.
- email:
- type: string
- description: Email address of the Uber user
- picture:
- type: string
- description: Image URL of the Uber user.
- promo_code:
- type: string
- description: Promo code of the Uber user.
- Activity:
- properties:
- uuid:
- type: string
- description: Unique identifier for the activity
- Activities:
- properties:
- offset:
- type: integer
- format: int32
- description: Position in pagination.
- limit:
- type: integer
- format: int32
- description: Number of items to retrieve (100 max).
- count:
- type: integer
- format: int32
- description: Total number of items available.
- history:
- type: array
- items:
- $ref: "#/components/schemas/Activity"
- Error:
- properties:
- code:
- type: string
- message:
- type: string
- fields:
- type: string
-
diff --git a/examples/v3.0/uspto.yaml b/examples/v3.0/uspto.yaml
new file mode 100644
index 0000000000..774ca526b6
--- /dev/null
+++ b/examples/v3.0/uspto.yaml
@@ -0,0 +1,210 @@
+openapi: 3.0.0
+servers:
+ - url: '{scheme}://developer.uspto.gov/ds-api'
+ variables:
+ scheme:
+ description: 'The Data Set API is accessible via https and http'
+ enum:
+ - 'https'
+ - 'http'
+ default: 'https'
+info:
+ description: >-
+ The Data Set API (DSAPI) allows the public users to discover and search
+ USPTO exported data sets. This is a generic API that allows USPTO users to
+ make any CSV based data files searchable through API. With the help of GET
+ call, it returns the list of data fields that are searchable. With the help
+ of POST call, data can be fetched based on the filters on the field names.
+ Please note that POST call is used to search the actual data. The reason for
+ the POST call is that it allows users to specify any complex search criteria
+ without worry about the GET size limitations as well as encoding of the
+ input parameters.
+ version: 1.0.0
+ title: USPTO Data Set API
+ contact:
+ name: Open Data Portal
+ url: 'https://developer.uspto.gov'
+ email: developer@uspto.gov
+tags:
+ - name: metadata
+ description: Find out about the data sets
+ - name: search
+ description: Search a data set
+paths:
+ /:
+ get:
+ tags:
+ - metadata
+ operationId: list-data-sets
+ summary: List available data sets
+ responses:
+ '200':
+ description: Returns a list of data sets
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/dataSetList'
+ example:
+ {
+ "total": 2,
+ "apis": [
+ {
+ "apiKey": "oa_citations",
+ "apiVersionNumber": "v1",
+ "apiUrl": "https://developer.uspto.gov/ds-api/oa_citations/v1/fields",
+ "apiDocumentationUrl": "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/oa_citations.json"
+ },
+ {
+ "apiKey": "cancer_moonshot",
+ "apiVersionNumber": "v1",
+ "apiUrl": "https://developer.uspto.gov/ds-api/cancer_moonshot/v1/fields",
+ "apiDocumentationUrl": "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/cancer_moonshot.json"
+ }
+ ]
+ }
+ /{dataset}/{version}/fields:
+ get:
+ tags:
+ - metadata
+ summary: >-
+ Provides the general information about the API and the list of fields
+ that can be used to query the dataset.
+ description: >-
+ This GET API returns the list of all the searchable field names that are
+ in the oa_citations. Please see the 'fields' attribute which returns an
+ array of field names. Each field or a combination of fields can be
+ searched using the syntax options shown below.
+ operationId: list-searchable-fields
+ parameters:
+ - name: dataset
+ in: path
+ description: 'Name of the dataset. In this case, the default value is oa_citations'
+ required: true
+ schema:
+ type: string
+ default: oa_citations
+ - name: version
+ in: path
+ description: Version of the dataset.
+ required: true
+ schema:
+ type: string
+ default: v1
+ responses:
+ '200':
+ description: >-
+ The dataset api for the given version is found and it is accessible
+ to consume.
+ content:
+ application/json:
+ schema:
+ type: string
+ '404':
+ description: >-
+ The combination of dataset name and version is not found in the
+ system or it is not published yet to be consumed by public.
+ content:
+ application/json:
+ schema:
+ type: string
+ /{dataset}/{version}/records:
+ post:
+ tags:
+ - search
+ summary: >-
+ Provides search capability for the data set with the given search
+ criteria.
+ description: >-
+ This API is based on Solr/Lucense Search. The data is indexed using
+ SOLR. This GET API returns the list of all the searchable field names
+ that are in the Solr Index. Please see the 'fields' attribute which
+ returns an array of field names. Each field or a combination of fields
+ can be searched using the Solr/Lucene Syntax. Please refer
+ https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for
+ the query syntax. List of field names that are searchable can be
+ determined using above GET api.
+ operationId: perform-search
+ parameters:
+ - name: version
+ in: path
+ description: Version of the dataset.
+ required: true
+ schema:
+ type: string
+ default: v1
+ - name: dataset
+ in: path
+ description: 'Name of the dataset. In this case, the default value is oa_citations'
+ required: true
+ schema:
+ type: string
+ default: oa_citations
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ type: object
+ additionalProperties:
+ type: object
+ '404':
+ description: No matching record found for the given criteria.
+ requestBody:
+ content:
+ application/x-www-form-urlencoded:
+ schema:
+ type: object
+ properties:
+ criteria:
+ description: >-
+ Uses Lucene Query Syntax in the format of
+ propertyName:value, propertyName:[num1 TO num2] and date
+ range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the
+ response please see the 'docs' element which has the list of
+ record objects. Each record structure would consist of all
+ the fields and their corresponding values.
+ type: string
+ default: '*:*'
+ start:
+ description: Starting record number. Default value is 0.
+ type: integer
+ default: 0
+ rows:
+ description: >-
+ Specify number of rows to be returned. If you run the search
+ with default values, in the response you will see 'numFound'
+ attribute which will tell the number of records available in
+ the dataset.
+ type: integer
+ default: 100
+ required:
+ - criteria
+components:
+ schemas:
+ dataSetList:
+ type: object
+ properties:
+ total:
+ type: integer
+ apis:
+ type: array
+ items:
+ type: object
+ properties:
+ apiKey:
+ type: string
+ description: To be used as a dataset parameter value
+ apiVersionNumber:
+ type: string
+ description: To be used as a version parameter value
+ apiUrl:
+ type: string
+ format: uriref
+ description: "The URL describing the dataset's fields"
+ apiDocumentationUrl:
+ type: string
+ format: uriref
+ description: A URL to the API console for each API
diff --git a/versions/3.0.1.md b/versions/3.0.1.md
new file mode 100644
index 0000000000..0a8a834358
--- /dev/null
+++ b/versions/3.0.1.md
@@ -0,0 +1,3380 @@
+# OpenAPI Specification
+
+#### Version 3.0.1
+
+The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [BCP 14](https://tools.ietf.org/html/bcp14) [RFC2119](https://tools.ietf.org/html/rfc2119) [RFC8174](https://tools.ietf.org/html/rfc8174) when, and only when, they appear in all capitals, as shown here.
+
+This document is licensed under [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.html).
+
+## Introduction
+
+The OpenAPI Specification (OAS) defines a standard, language-agnostic interface to RESTful APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection. When properly defined, a consumer can understand and interact with the remote service with a minimal amount of implementation logic.
+
+An OpenAPI definition can then be used by documentation generation tools to display the API, code generation tools to generate servers and clients in various programming languages, testing tools, and many other use cases.
+
+## Table of Contents
+
+
+- [Definitions](#definitions)
+ - [OpenAPI Document](#oasDocument)
+ - [Path Templating](#pathTemplating)
+ - [Media Types](#mediaTypes)
+ - [HTTP Status Codes](#httpCodes)
+- [Specification](#specification)
+ - [Versions](#versions)
+ - [Format](#format)
+ - [Document Structure](#documentStructure)
+ - [Data Types](#dataTypes)
+ - [Rich Text Formatting](#richText)
+ - [Relative References In URLs](#relativeReferences)
+ - [Schema](#schema)
+ - [OpenAPI Object](#oasObject)
+ - [Info Object](#infoObject)
+ - [Contact Object](#contactObject)
+ - [License Object](#licenseObject)
+ - [Server Object](#serverObject)
+ - [Server Variable Object](#serverVariableObject)
+ - [Components Object](#componentsObject)
+ - [Paths Object](#pathsObject)
+ - [Path Item Object](#pathItemObject)
+ - [Operation Object](#operationObject)
+ - [External Documentation Object](#externalDocumentationObject)
+ - [Parameter Object](#parameterObject)
+ - [Request Body Object](#requestBodyObject)
+ - [Media Type Object](#mediaTypeObject)
+ - [Encoding Object](#encodingObject)
+ - [Responses Object](#responsesObject)
+ - [Response Object](#responseObject)
+ - [Callback Object](#callbackObject)
+ - [Example Object](#exampleObject)
+ - [Link Object](#linkObject)
+ - [Header Object](#headerObject)
+ - [Tag Object](#tagObject)
+ - [Reference Object](#referenceObject)
+ - [Schema Object](#schemaObject)
+ - [Discriminator Object](#discriminatorObject)
+ - [XML Object](#xmlObject)
+ - [Security Scheme Object](#securitySchemeObject)
+ - [OAuth Flows Object](#oauthFlowsObject)
+ - [OAuth Flow Object](#oauthFlowObject)
+ - [Security Requirement Object](#securityRequirementObject)
+ - [Specification Extensions](#specificationExtensions)
+ - [Security Filtering](#securityFiltering)
+- [Appendix A: Revision History](#revisionHistory)
+
+
+
+
+## Definitions
+
+##### OpenAPI Document
+A document (or set of documents) that defines or describes an API. An OpenAPI definition uses and conforms to the OpenAPI Specification.
+
+##### Path Templating
+Path templating refers to the usage of curly braces ({}) to mark a section of a URL path as replaceable using path parameters.
+
+##### Media Types
+Media type definitions are spread across several resources.
+The media type definitions SHOULD be in compliance with [RFC6838](https://tools.ietf.org/html/rfc6838).
+
+Some examples of possible media type definitions:
+```
+ text/plain; charset=utf-8
+ application/json
+ application/vnd.github+json
+ application/vnd.github.v3+json
+ application/vnd.github.v3.raw+json
+ application/vnd.github.v3.text+json
+ application/vnd.github.v3.html+json
+ application/vnd.github.v3.full+json
+ application/vnd.github.v3.diff
+ application/vnd.github.v3.patch
+```
+##### HTTP Status Codes
+The HTTP Status Codes are used to indicate the status of the executed operation.
+The available status codes are defined by [RFC7231](https://tools.ietf.org/html/rfc7231#section-6) and registered status codes are listed in the [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml).
+
+## Specification
+
+### Versions
+
+The OpenAPI Specification is versioned using [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) (semver) and follows the semver specification.
+
+The `major`.`minor` portion of the semver (for example `3.0`) SHALL designate the OAS feature set. Typically, *`.patch`* versions address errors in this document, not the feature set. Tooling which supports OAS 3.0 SHOULD be compatible with all OAS 3.0.\* versions. The patch version SHOULD NOT be considered by tooling, making no distinction between `3.0.0` and `3.0.1` for example.
+
+Subsequent minor version releases of the OpenAPI Specification (incrementing the `minor` version number) SHOULD NOT interfere with tooling developed to a lower minor version and same major version. Thus a hypothetical `3.1.0` specification SHOULD be usable with tooling designed for `3.0.0`.
+
+An OpenAPI document compatible with OAS 3.\*.\* contains a required [`openapi`](#oasVersion) field which designates the semantic version of the OAS that it uses. (OAS 2.0 documents contain a top-level version field named [`swagger`](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#swaggerObject) and value `"2.0"`.)
+
+### Format
+
+An OpenAPI document that conforms to the OpenAPI Specification is itself a JSON object, which may be represented either in JSON or YAML format.
+
+For example, if a field has an array value, the JSON array representation will be used:
+
+```json
+{
+ "field": [ 1, 2, 3 ]
+}
+```
+All field names in the specification are **case sensitive**.
+
+The schema exposes two types of fields: Fixed fields, which have a declared name, and Patterned fields, which declare a regex pattern for the field name.
+
+Patterned fields MUST have unique names within the containing object.
+
+In order to preserve the ability to round-trip between YAML and JSON formats, YAML version [1.2](http://www.yaml.org/spec/1.2/spec.html) is RECOMMENDED along with some additional constraints:
+
+- Tags MUST be limited to those allowed by the [JSON Schema ruleset](http://www.yaml.org/spec/1.2/spec.html#id2803231).
+- Keys used in YAML maps MUST be limited to a scalar string, as defined by the [YAML Failsafe schema ruleset](http://yaml.org/spec/1.2/spec.html#id2802346).
+
+**Note:** While APIs may be defined by OpenAPI documents in either YAML or JSON format, the API request and response bodies and other content are not required to be JSON or YAML.
+
+### Document Structure
+
+An OpenAPI document MAY be made up of a single document or be divided into multiple, connected parts at the discretion of the user. In the latter case, `$ref` fields MUST be used in the specification to reference those parts as follows from the [JSON Schema](http://json-schema.org) definitions.
+
+It is RECOMMENDED that the root OpenAPI document be named: `openapi.json` or `openapi.yaml`.
+
+### Data Types
+
+Primitive data types in the OAS are based on the types supported by the [JSON Schema Specification Wright Draft 00](https://tools.ietf.org/html/draft-wright-json-schema-00#section-4.2).
+Note that `integer` as a type is also supported and is defined as a JSON number without a fraction or exponent part.
+`null` is not supported as a type (see [`nullable`](#schemaNullable) for an alternative solution).
+Models are defined using the [Schema Object](#schemaObject), which is an extended subset of JSON Schema Specification Wright Draft 00.
+
+Primitives have an optional modifier property: `format`.
+OAS uses several known formats to define in fine detail the data type being used.
+However, to support documentation needs, the `format` property is an open `string`-valued property, and can have any value.
+Formats such as `"email"`, `"uuid"`, and so on, MAY be used even though undefined by this specification.
+Types that are not accompanied by a `format` property follow the type definition in the JSON Schema. Tools that do not recognize a specific `format` MAY default back to the `type` alone, as if the `format` is not specified.
+
+The formats defined by the OAS are:
+
+Common Name | [`type`](#dataTypes) | [`format`](#dataTypeFormat) | Comments
+----------- | ------ | -------- | --------
+integer | `integer` | `int32` | signed 32 bits
+long | `integer` | `int64` | signed 64 bits
+float | `number` | `float` | |
+double | `number` | `double` | |
+string | `string` | | |
+byte | `string` | `byte` | base64 encoded characters
+binary | `string` | `binary` | any sequence of octets
+boolean | `boolean` | | |
+date | `string` | `date` | As defined by `full-date` - [RFC3339](https://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14)
+dateTime | `string` | `date-time` | As defined by `date-time` - [RFC3339](https://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14)
+password | `string` | `password` | A hint to UIs to obscure input.
+
+### Rich Text Formatting
+Throughout the specification `description` fields are noted as supporting CommonMark markdown formatting.
+Where OpenAPI tooling renders rich text it MUST support, at a minimum, markdown syntax as described by [CommonMark 0.27](http://spec.commonmark.org/0.27/). Tooling MAY choose to ignore some CommonMark features to address security concerns.
+
+### Relative References in URLs
+
+Unless specified otherwise, all properties that are URLs MAY be relative references as defined by [RFC3986](https://tools.ietf.org/html/rfc3986#section-4.2).
+Relative references are resolved using the URLs defined in the [`Server Object`](#serverObject) as a Base URI.
+
+Relative references used in `$ref` are processed as per [JSON Reference](https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03), using the URL of the current document as the base URI. See also the [Reference Object](#referenceObject).
+
+### Schema
+
+In the following description, if a field is not explicitly **REQUIRED** or described with a MUST or SHALL, it can be considered OPTIONAL.
+
+#### OpenAPI Object
+
+This is the root document object of the [OpenAPI document](#oasDocument).
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+openapi | `string` | **REQUIRED**. This string MUST be the [semantic version number](https://semver.org/spec/v2.0.0.html) of the [OpenAPI Specification version](#versions) that the OpenAPI document uses. The `openapi` field SHOULD be used by tooling specifications and clients to interpret the OpenAPI document. This is *not* related to the API [`info.version`](#infoVersion) string.
+info | [Info Object](#infoObject) | **REQUIRED**. Provides metadata about the API. The metadata MAY be used by tooling as required.
+servers | [[Server Object](#serverObject)] | An array of Server Objects, which provide connectivity information to a target server. If the `servers` property is not provided, or is an empty array, the default value would be a [Server Object](#serverObject) with a [url](#serverUrl) value of `/`.
+paths | [Paths Object](#pathsObject) | **REQUIRED**. The available paths and operations for the API.
+components | [Components Object](#componentsObject) | An element to hold various schemas for the specification.
+security | [[Security Requirement Object](#securityRequirementObject)] | A declaration of which security mechanisms can be used across the API. The list of values includes alternative security requirement objects that can be used. Only one of the security requirement objects need to be satisfied to authorize a request. Individual operations can override this definition.
+tags | [[Tag Object](#tagObject)] | A list of tags used by the specification with additional metadata. The order of the tags can be used to reflect on their order by the parsing tools. Not all tags that are used by the [Operation Object](#operationObject) must be declared. The tags that are not declared MAY be organized randomly or based on the tools' logic. Each tag name in the list MUST be unique.
+externalDocs | [External Documentation Object](#externalDocumentationObject) | Additional external documentation.
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+#### Info Object
+
+The object provides metadata about the API.
+The metadata MAY be used by the clients if needed, and MAY be presented in editing or documentation generation tools for convenience.
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+title | `string` | **REQUIRED**. The title of the application.
+description | `string` | A short description of the application. [CommonMark syntax](http://spec.commonmark.org/) MAY be used for rich text representation.
+termsOfService | `string` | A URL to the Terms of Service for the API. MUST be in the format of a URL.
+contact | [Contact Object](#contactObject) | The contact information for the exposed API.
+license | [License Object](#licenseObject) | The license information for the exposed API.
+version | `string` | **REQUIRED**. The version of the OpenAPI document (which is distinct from the [OpenAPI Specification version](#oasVersion) or the API implementation version).
+
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+##### Info Object Example:
+
+```json
+{
+ "title": "Sample Pet Store App",
+ "description": "This is a sample server for a pet store.",
+ "termsOfService": "http://example.com/terms/",
+ "contact": {
+ "name": "API Support",
+ "url": "http://www.example.com/support",
+ "email": "support@example.com"
+ },
+ "license": {
+ "name": "Apache 2.0",
+ "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
+ },
+ "version": "1.0.1"
+}
+```
+
+```yaml
+title: Sample Pet Store App
+description: This is a sample server for a pet store.
+termsOfService: http://example.com/terms/
+contact:
+ name: API Support
+ url: http://www.example.com/support
+ email: support@example.com
+license:
+ name: Apache 2.0
+ url: https://www.apache.org/licenses/LICENSE-2.0.html
+version: 1.0.1
+```
+
+#### Contact Object
+
+Contact information for the exposed API.
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+name | `string` | The identifying name of the contact person/organization.
+url | `string` | The URL pointing to the contact information. MUST be in the format of a URL.
+email | `string` | The email address of the contact person/organization. MUST be in the format of an email address.
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+##### Contact Object Example:
+
+```json
+{
+ "name": "API Support",
+ "url": "http://www.example.com/support",
+ "email": "support@example.com"
+}
+```
+
+```yaml
+name: API Support
+url: http://www.example.com/support
+email: support@example.com
+```
+
+#### License Object
+
+License information for the exposed API.
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+name | `string` | **REQUIRED**. The license name used for the API.
+url | `string` | A URL to the license used for the API. MUST be in the format of a URL.
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+##### License Object Example:
+
+```json
+{
+ "name": "Apache 2.0",
+ "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
+}
+```
+
+```yaml
+name: Apache 2.0
+url: https://www.apache.org/licenses/LICENSE-2.0.html
+```
+
+#### Server Object
+
+An object representing a Server.
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+url | `string` | **REQUIRED**. A URL to the target host. This URL supports Server Variables and MAY be relative, to indicate that the host location is relative to the location where the OpenAPI document is being served. Variable substitutions will be made when a variable is named in `{`brackets`}`.
+description | `string` | An optional string describing the host designated by the URL. [CommonMark syntax](http://spec.commonmark.org/) MAY be used for rich text representation.
+variables | Map[`string`, [Server Variable Object](#serverVariableObject)] | A map between a variable name and its value. The value is used for substitution in the server's URL template.
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+##### Server Object Example
+
+A single server would be described as:
+
+```json
+{
+ "url": "https://development.gigantic-server.com/v1",
+ "description": "Development server"
+}
+```
+
+```yaml
+url: https://development.gigantic-server.com/v1
+description: Development server
+```
+
+The following shows how multiple servers can be described, for example, at the OpenAPI Object's [`servers`](#oasServers):
+
+```json
+{
+ "servers": [
+ {
+ "url": "https://development.gigantic-server.com/v1",
+ "description": "Development server"
+ },
+ {
+ "url": "https://staging.gigantic-server.com/v1",
+ "description": "Staging server"
+ },
+ {
+ "url": "https://api.gigantic-server.com/v1",
+ "description": "Production server"
+ }
+ ]
+}
+```
+
+```yaml
+servers:
+- url: https://development.gigantic-server.com/v1
+ description: Development server
+- url: https://staging.gigantic-server.com/v1
+ description: Staging server
+- url: https://api.gigantic-server.com/v1
+ description: Production server
+```
+
+The following shows how variables can be used for a server configuration:
+
+```json
+{
+ "servers": [
+ {
+ "url": "https://{username}.gigantic-server.com:{port}/{basePath}",
+ "description": "The production API server",
+ "variables": {
+ "username": {
+ "default": "demo",
+ "description": "this value is assigned by the service provider, in this example `gigantic-server.com`"
+ },
+ "port": {
+ "enum": [
+ "8443",
+ "443"
+ ],
+ "default": "8443"
+ },
+ "basePath": {
+ "default": "v2"
+ }
+ }
+ }
+ ]
+}
+```
+
+```yaml
+servers:
+- url: https://{username}.gigantic-server.com:{port}/{basePath}
+ description: The production API server
+ variables:
+ username:
+ # note! no enum here means it is an open value
+ default: demo
+ description: this value is assigned by the service provider, in this example `gigantic-server.com`
+ port:
+ enum:
+ - '8443'
+ - '443'
+ default: '8443'
+ basePath:
+ # open meaning there is the opportunity to use special base paths as assigned by the provider, default is `v2`
+ default: v2
+```
+
+
+#### Server Variable Object
+
+An object representing a Server Variable for server URL template substitution.
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+enum | [`string`] | An enumeration of string values to be used if the substitution options are from a limited set.
+default | `string` | **REQUIRED**. The default value to use for substitution, and to send, if an alternate value is _not_ supplied. Unlike the [Schema Object's](#schemaObject) `default`, this value MUST be provided by the consumer.
+description | `string` | An optional description for the server variable. [CommonMark syntax](http://spec.commonmark.org/) MAY be used for rich text representation.
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+#### Components Object
+
+Holds a set of reusable objects for different aspects of the OAS.
+All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object.
+
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---|---
+ schemas | Map[`string`, [Schema Object](#schemaObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Schema Objects](#schemaObject).
+ responses | Map[`string`, [Response Object](#responseObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Response Objects](#responseObject).
+ parameters | Map[`string`, [Parameter Object](#parameterObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Parameter Objects](#parameterObject).
+ examples | Map[`string`, [Example Object](#exampleObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Example Objects](#exampleObject).
+ requestBodies | Map[`string`, [Request Body Object](#requestBodyObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Request Body Objects](#requestBodyObject).
+ headers | Map[`string`, [Header Object](#headerObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Header Objects](#headerObject).
+ securitySchemes| Map[`string`, [Security Scheme Object](#securitySchemeObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Security Scheme Objects](#securitySchemeObject).
+ links | Map[`string`, [Link Object](#linkObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Link Objects](#linkObject).
+ callbacks | Map[`string`, [Callback Object](#callbackObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Callback Objects](#callbackObject).
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+All the fixed fields declared above are objects that MUST use keys that match the regular expression: `^[a-zA-Z0-9\.\-_]+$`.
+
+Field Name Examples:
+
+```
+User
+User_1
+User_Name
+user-name
+my.org.User
+```
+
+##### Components Object Example
+
+```json
+"components": {
+ "schemas": {
+ "Category": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "parameters": {
+ "skipParam": {
+ "name": "skip",
+ "in": "query",
+ "description": "number of items to skip",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "limitParam": {
+ "name": "limit",
+ "in": "query",
+ "description": "max records to return",
+ "required": true,
+ "schema" : {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ },
+ "responses": {
+ "NotFound": {
+ "description": "Entity not found."
+ },
+ "IllegalInput": {
+ "description": "Illegal input for operation."
+ },
+ "GeneralError": {
+ "description": "General Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GeneralError"
+ }
+ }
+ }
+ }
+ },
+ "securitySchemes": {
+ "api_key": {
+ "type": "apiKey",
+ "name": "api_key",
+ "in": "header"
+ },
+ "petstore_auth": {
+ "type": "oauth2",
+ "flows": {
+ "implicit": {
+ "authorizationUrl": "http://example.org/api/oauth/dialog",
+ "scopes": {
+ "write:pets": "modify pets in your account",
+ "read:pets": "read your pets"
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+```yaml
+components:
+ schemas:
+ Category:
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ name:
+ type: string
+ Tag:
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ name:
+ type: string
+ parameters:
+ skipParam:
+ name: skip
+ in: query
+ description: number of items to skip
+ required: true
+ schema:
+ type: integer
+ format: int32
+ limitParam:
+ name: limit
+ in: query
+ description: max records to return
+ required: true
+ schema:
+ type: integer
+ format: int32
+ responses:
+ NotFound:
+ description: Entity not found.
+ IllegalInput:
+ description: Illegal input for operation.
+ GeneralError:
+ description: General Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/GeneralError'
+ securitySchemes:
+ api_key:
+ type: apiKey
+ name: api_key
+ in: header
+ petstore_auth:
+ type: oauth2
+ flows:
+ implicit:
+ authorizationUrl: http://example.org/api/oauth/dialog
+ scopes:
+ write:pets: modify pets in your account
+ read:pets: read your pets
+```
+
+
+#### Paths Object
+
+Holds the relative paths to the individual endpoints and their operations.
+The path is appended to the URL from the [`Server Object`](#serverObject) in order to construct the full URL. The Paths MAY be empty, due to [ACL constraints](#securityFiltering).
+
+##### Patterned Fields
+
+Field Pattern | Type | Description
+---|:---:|---
+/{path} | [Path Item Object](#pathItemObject) | A relative path to an individual endpoint. The field name MUST begin with a slash. The path is **appended** (no relative URL resolution) to the expanded URL from the [`Server Object`](#serverObject)'s `url` field in order to construct the full URL. [Path templating](#pathTemplating) is allowed. When matching URLs, concrete (non-templated) paths would be matched before their templated counterparts. Templated paths with the same hierarchy but different templated names MUST NOT exist as they are identical. In case of ambiguous matching, it's up to the tooling to decide which one to use.
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+##### Path Templating Matching
+
+Assuming the following paths, the concrete definition, `/pets/mine`, will be matched first if used:
+
+```
+ /pets/{petId}
+ /pets/mine
+```
+
+The following paths are considered identical and invalid:
+
+```
+ /pets/{petId}
+ /pets/{name}
+```
+
+The following may lead to ambiguous resolution:
+
+```
+ /{entity}/me
+ /books/{id}
+```
+
+##### Paths Object Example
+
+```json
+{
+ "/pets": {
+ "get": {
+ "description": "Returns all pets from the system that the user has access to",
+ "responses": {
+ "200": {
+ "description": "A list of pets.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/pet"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+```yaml
+/pets:
+ get:
+ description: Returns all pets from the system that the user has access to
+ responses:
+ '200':
+ description: A list of pets.
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/pet'
+```
+
+#### Path Item Object
+
+Describes the operations available on a single path.
+A Path Item MAY be empty, due to [ACL constraints](#securityFiltering).
+The path itself is still exposed to the documentation viewer but they will not know which operations and parameters are available.
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+$ref | `string` | Allows for an external definition of this path item. The referenced structure MUST be in the format of a [Path Item Object](#pathItemObject). If there are conflicts between the referenced definition and this Path Item's definition, the behavior is *undefined*.
+summary| `string` | An optional, string summary, intended to apply to all operations in this path.
+description | `string` | An optional, string description, intended to apply to all operations in this path. [CommonMark syntax](http://spec.commonmark.org/) MAY be used for rich text representation.
+get | [Operation Object](#operationObject) | A definition of a GET operation on this path.
+put | [Operation Object](#operationObject) | A definition of a PUT operation on this path.
+post | [Operation Object](#operationObject) | A definition of a POST operation on this path.
+delete | [Operation Object](#operationObject) | A definition of a DELETE operation on this path.
+options | [Operation Object](#operationObject) | A definition of a OPTIONS operation on this path.
+head | [Operation Object](#operationObject) | A definition of a HEAD operation on this path.
+patch | [Operation Object](#operationObject) | A definition of a PATCH operation on this path.
+trace | [Operation Object](#operationObject) | A definition of a TRACE operation on this path.
+servers | [[Server Object](#serverObject)] | An alternative `server` array to service all operations in this path.
+parameters | [[Parameter Object](#parameterObject) \| [Reference Object](#referenceObject)] | A list of parameters that are applicable for all the operations described under this path. These parameters can be overridden at the operation level, but cannot be removed there. The list MUST NOT include duplicated parameters. A unique parameter is defined by a combination of a [name](#parameterName) and [location](#parameterIn). The list can use the [Reference Object](#referenceObject) to link to parameters that are defined at the [OpenAPI Object's components/parameters](#componentsParameters).
+
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+##### Path Item Object Example
+
+```json
+{
+ "get": {
+ "description": "Returns pets based on ID",
+ "summary": "Find pets by ID",
+ "operationId": "getPetsById",
+ "responses": {
+ "200": {
+ "description": "pet response",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Pet"
+ }
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "error payload",
+ "content": {
+ "text/html": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorModel"
+ }
+ }
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "ID of pet to use",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "style": "simple"
+ }
+ ]
+}
+```
+
+```yaml
+get:
+ description: Returns pets based on ID
+ summary: Find pets by ID
+ operationId: getPetsById
+ responses:
+ '200':
+ description: pet response
+ content:
+ '*/*' :
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Pet'
+ default:
+ description: error payload
+ content:
+ 'text/html':
+ schema:
+ $ref: '#/components/schemas/ErrorModel'
+parameters:
+- name: id
+ in: path
+ description: ID of pet to use
+ required: true
+ schema:
+ type: array
+ style: simple
+ items:
+ type: string
+```
+
+#### Operation Object
+
+Describes a single API operation on a path.
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+tags | [`string`] | A list of tags for API documentation control. Tags can be used for logical grouping of operations by resources or any other qualifier.
+summary | `string` | A short summary of what the operation does.
+description | `string` | A verbose explanation of the operation behavior. [CommonMark syntax](http://spec.commonmark.org/) MAY be used for rich text representation.
+externalDocs | [External Documentation Object](#externalDocumentationObject) | Additional external documentation for this operation.
+operationId | `string` | Unique string used to identify the operation. The id MUST be unique among all operations described in the API. Tools and libraries MAY use the operationId to uniquely identify an operation, therefore, it is RECOMMENDED to follow common programming naming conventions.
+parameters | [[Parameter Object](#parameterObject) \| [Reference Object](#referenceObject)] | A list of parameters that are applicable for this operation. If a parameter is already defined at the [Path Item](#pathItemParameters), the new definition will override it but can never remove it. The list MUST NOT include duplicated parameters. A unique parameter is defined by a combination of a [name](#parameterName) and [location](#parameterIn). The list can use the [Reference Object](#referenceObject) to link to parameters that are defined at the [OpenAPI Object's components/parameters](#componentsParameters).
+requestBody | [Request Body Object](#requestBodyObject) \| [Reference Object](#referenceObject) | The request body applicable for this operation. The `requestBody` is only supported in HTTP methods where the HTTP 1.1 specification [RFC7231](https://tools.ietf.org/html/rfc7231#section-4.3.1) has explicitly defined semantics for request bodies. In other cases where the HTTP spec is vague, `requestBody` SHALL be ignored by consumers.
+responses | [Responses Object](#responsesObject) | **REQUIRED**. The list of possible responses as they are returned from executing this operation.
+callbacks | Map[`string`, [Callback Object](#callbackObject) \| [Reference Object](#referenceObject)] | A map of possible out-of band callbacks related to the parent operation. The key is a unique identifier for the Callback Object. Each value in the map is a [Callback Object](#callbackObject) that describes a request that may be initiated by the API provider and the expected responses. The key value used to identify the callback object is an expression, evaluated at runtime, that identifies a URL to use for the callback operation.
+deprecated | `boolean` | Declares this operation to be deprecated. Consumers SHOULD refrain from usage of the declared operation. Default value is `false`.
+security | [[Security Requirement Object](#securityRequirementObject)] | A declaration of which security mechanisms can be used for this operation. The list of values includes alternative security requirement objects that can be used. Only one of the security requirement objects need to be satisfied to authorize a request. This definition overrides any declared top-level [`security`](#oasSecurity). To remove a top-level security declaration, an empty array can be used.
+servers | [[Server Object](#serverObject)] | An alternative `server` array to service this operation. If an alternative `server` object is specified at the Path Item Object or Root level, it will be overridden by this value.
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+##### Operation Object Example
+
+```json
+{
+ "tags": [
+ "pet"
+ ],
+ "summary": "Updates a pet in the store with form data",
+ "operationId": "updatePetWithForm",
+ "parameters": [
+ {
+ "name": "petId",
+ "in": "path",
+ "description": "ID of pet that needs to be updated",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/x-www-form-urlencoded": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "Updated name of the pet",
+ "type": "string"
+ },
+ "status": {
+ "description": "Updated status of the pet",
+ "type": "string"
+ }
+ },
+ "required": ["status"]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Pet updated.",
+ "content": {
+ "application/json": {},
+ "application/xml": {}
+ }
+ },
+ "405": {
+ "description": "Invalid input",
+ "content": {
+ "application/json": {},
+ "application/xml": {}
+ }
+ }
+ },
+ "security": [
+ {
+ "petstore_auth": [
+ "write:pets",
+ "read:pets"
+ ]
+ }
+ ]
+}
+```
+
+```yaml
+tags:
+- pet
+summary: Updates a pet in the store with form data
+operationId: updatePetWithForm
+parameters:
+- name: petId
+ in: path
+ description: ID of pet that needs to be updated
+ required: true
+ schema:
+ type: string
+requestBody:
+ content:
+ 'application/x-www-form-urlencoded':
+ schema:
+ properties:
+ name:
+ description: Updated name of the pet
+ type: string
+ status:
+ description: Updated status of the pet
+ type: string
+ required:
+ - status
+responses:
+ '200':
+ description: Pet updated.
+ content:
+ 'application/json': {}
+ 'application/xml': {}
+ '405':
+ description: Invalid input
+ content:
+ 'application/json': {}
+ 'application/xml': {}
+security:
+- petstore_auth:
+ - write:pets
+ - read:pets
+```
+
+
+#### External Documentation Object
+
+Allows referencing an external resource for extended documentation.
+
+##### Fixed Fields
+
+Field Name | Type | Description
+---|:---:|---
+description | `string` | A short description of the target documentation. [CommonMark syntax](http://spec.commonmark.org/) MAY be used for rich text representation.
+url | `string` | **REQUIRED**. The URL for the target documentation. Value MUST be in the format of a URL.
+
+This object MAY be extended with [Specification Extensions](#specificationExtensions).
+
+##### External Documentation Object Example
+
+```json
+{
+ "description": "Find more info here",
+ "url": "https://example.com"
+}
+```
+
+```yaml
+description: Find more info here
+url: https://example.com
+```
+
+#### Parameter Object
+
+Describes a single operation parameter.
+
+A unique parameter is defined by a combination of a [name](#parameterName) and [location](#parameterIn).
+
+##### Parameter Locations
+There are four possible parameter locations specified by the `in` field:
+* path - Used together with [Path Templating](#pathTemplating), where the parameter value is actually part of the operation's URL. This does not include the host or base path of the API. For example, in `/items/{itemId}`, the path parameter is `itemId`.
+* query - Parameters that are appended to the URL. For example, in `/items?id=###`, the query parameter is `id`.
+* header - Custom headers that are expected as part of the request. Note that [RFC7230](https://tools.ietf.org/html/rfc7230#page-22) states header names are case insensitive.
+* cookie - Used to pass a specific cookie value to the API.
+
+
+##### Fixed Fields
+Field Name | Type | Description
+---|:---:|---
+name | `string` | **REQUIRED**. The name of the parameter. Parameter names are *case sensitive*.