#{{#info}}{{title}}


{{description}}

{{#contact}}
[**Contact the developer**](mailto:{{email}})
{{/contact}}

**Version** {{version}}

{{#license}}[**{{name}}**]({{url}}){{/license}}

{{/info}}

{{#if consumes}}**Consumes:** {{join consumes ", "}}{{/if}}

{{#if produces}}**Produces:** {{join produces ", "}}{{/if}}

{{#if securityDefinitions}}
# Security Definitions
{{/if}}
{{> security}}

# APIs

{{#each paths}}
## {{@key}}
{{#this}}
{{#get}}
### GET
{{> operation}}
{{/get}}

{{#put}}
### PUT
{{> operation}}
{{/put}}

{{#post}}
### POST

{{> operation}}

{{/post}}

{{#delete}}
### DELETE
{{> operation}}
{{/delete}}

{{#option}}
### OPTION
{{> operation}}
{{/option}}

{{#patch}}
### PATCH
{{> operation}}
{{/patch}}

{{#head}}
### HEAD
{{> operation}}
{{/head}}

{{/this}}
{{/each}}

# Definitions
{{#each definitions}}
## <a name="/definitions/{{key}}">{{@key}}</a>

<p> {{description}} </p>

<table border="1">
    <tr>
        <th>name</th>
        <th>type</th>
        <th>required</th>
        <th>description</th>
        <th>example</th>
    </tr>
    {{#each this.properties}}
        <tr>
            <td>{{@key}}</td>
            <td>
                {{#ifeq type "array"}}
                {{#items.$ref}}
                    {{type}}[<a href="{{items.$ref}}">{{basename items.$ref}}</a>]
                {{/items.$ref}}
                {{^items.$ref}}{{type}}[{{items.type}}]{{/items.$ref}}
                {{else}}
                    {{#$ref}}<a href="{{$ref}}">{{basename $ref}}</a>{{/$ref}}
                    {{^$ref}}{{type}}{{#format}} ({{format}}){{/format}}{{/$ref}}
                {{/ifeq}}
            </td>
            <td>{{#required}}required{{/required}}{{^required}}optional{{/required}}</td>
            <td>{{#description}}{{{description}}}{{/description}}{{^description}}-{{/description}}</td>
            <td>{{example}}</td>
        </tr>
    {{/each}}
</table>
{{/each}}

