openapi: 3.0.3
security:
- api_key: []
info:
  title: DSP API
  description: |-
    More information about this API can be found [here](https://docs.api.dsp.plusserver.com/dsp-api-doc.html)
servers:
  - url: https://api.dsp.plusserver.com/v1.0
tags:
  - name: Account
    description: Account information
    externalDocs:
      description: Documentation
      url: https://docs.api.dsp.plusserver.com/dsp-api-doc.html
  - name: Application
    description: Application information
    externalDocs:
      description: Documentation
      url: https://docs.api.dsp.plusserver.com/dsp-api-doc.html
  - name: Contact
    description: Contact information
    externalDocs:
      description: Documentation
      url: https://docs.api.test.dsp.ps-intern.de/dsp-api-doc.html
  - name: Domain
    description: Domain information
    externalDocs:
      description: Documentation
      url: https://docs.api.dsp.plusserver.com/dsp-api-doc.html
  - name: Redirect
    description: Redirect information
    externalDocs:
      description: Documentation
      url: https://docs.api.dsp.plusserver.com/dsp-api-doc.html
  - name: SSL
    description: SSL information
    externalDocs:
      description: Documentation
      url: https://docs.api.dsp.plusserver.com/dsp-api-doc.html
paths:
  /account:
    get:
      tags:
        - Account
      summary: Receive account information (Search)
      description: |-
        All GET parameters are strings.  
        
        For many parameters you can use the following additional operators:
          - (\*) "Wildcard" operator (i.e. "\*plus\*")
          - (!) "Not" operator (i.e. "!\*plus\*")
          - (>) "Greater than" operator (i.e. ">42")
          - (<) "Smaller than" operator (i.e. "<42")  
        
        Query parameters can be repeated to achieve better results (i.e. ..&san=!\*plus\*&san=!\*server\*&san=!\*gmbh\*..)  
        Alternatively, it is possible to separate values by a comma (i.e. ..&san=!\*plus\*,!\*server\*,!\*gmbh\*..).  
        
        All parameters are evaluated as "AND" links (related to the returned data set).  
        
        Example: "..&id=1,2..." does not return the records with ID 1 and ID 2, but searches for a record whose ID is 1 and 2.  
        This leads to an empty list. If you need an "OR" link, split your requests.  
      operationId: AccountGet
      parameters:
        - name: accountid
          in: query
          description: |-
            id of account  
            
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: accountname
          in: query
          description: |-
            notation of account  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: companyid
          in: query
          description: |-
            id of company  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: contractid_domain
          in: query
          description: |-
            contract id (domain)  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: contractid_ssl
          in: query
          description: |-
            contract id (ssl)  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: customerid
          in: query
          description: |-
            id of customer  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: email
          in: query
          description: |-
            email of account  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: name
          in: query
          description: |-
            name of customer  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string 
        - name: offset
          in: query
          description: |-
            offset  
                        
            The following operators are accepted:  
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /account/{accountid}:
    get:
      tags:
        - Account
      summary: Receive account information (Account by id)
      operationId: AccountGetPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "accountid"
          in: "path"
          description: "id of account"
          required: true
          type: "integer"
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /account/api_key/exchange:
    patch:
      tags:
        - Account
      summary: Exchange actual api key (actual key will be deactivated and new key will be generated)
      operationId: AccountPatch_api_key_exchange
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              description: empty body
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /account/key_description:
    get:
      tags:
        - Account
      summary: Receive information about the used keys
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: AccountGet_key_description
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /application:
    get:
      tags:
        - Application
      summary: Receive application information (Search)
      description: |-
        All GET parameters are strings.  
        
        For many parameters you can use the following additional operators:
          - (\*) "Wildcard" operator (i.e. "\*plus\*")
          - (!) "Not" operator (i.e. "!\*plus\*")
          - (>) "Greater than" operator (i.e. ">42")
          - (<) "Smaller than" operator (i.e. "<42")  
        
        Query parameters can be repeated to achieve better results (i.e. ..&san=!\*plus\*&san=!\*server\*&san=!\*gmbh\*..)  
        Alternatively, it is possible to separate values by a comma (i.e. ..&san=!\*plus\*,!\*server\*,!\*gmbh\*..).  
        
        All parameters are evaluated as "AND" links (related to the returned data set).  
        
        Example: "..&id=1,2..." does not return the records with ID 1 and ID 2, but searches for a record whose ID is 1 and 2.  
        This leads to an empty list. If you need an "OR" link, split your requests.  
      operationId: ApplicationGet
      parameters:
        - name: accountid
          in: query
          description: |-
            id of account  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: accountid_request
          in: query
          description: |-
            id of requestor's account  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: applicationid
          in: query
          description: |-
            id of application  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: application_type
          in: query
          description: |-
            type of application  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
            enum:
              - registration
              - renew
              - revoke
        - name: object
          in: query
          description: |-
            application object  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: true
          schema:
            type: string
            default: ssl
            enum:
              - ssl
        - name: offset
          in: query
          description: |-
            offset  
                        
            The following operators are accepted:  
          required: false
          schema:
            type: integer
        - name: product_type
          in: query
          description: |-
            notation of product  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
            enum:
             - external_managed_private
             - external_managed_public
             - letsencrypt_standard
             - psca_plusserver_network
             - psca_plusserver_sap
             - ssl_csr
        - name: san
          in: query
          description: |-
            fqdn in native form (i.e. häuser.de)  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string  
        - name: sanace
          in: query
          description: |-
            fqdn in ascii/ace (i.e. xn--huser-gra.de)  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: status
          in: query
          description: |-
            status of application  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string  
            enum:
              - queued
              - prepared
              - processing
              - success
              - fail
        - name: time_create
          in: query
          description: |-
            application's time of creation  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
    post:
      tags:
        - Application
      summary: Create an application
      operationId: ApplicationPost
      consumes:
        - application/json
      produces:
        - application/json
      requestBody:
        description: Create an application
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Application'
            examples:
              letsencrypt_singledomain:
                summary: SSL - Lets Encrypt Single Domain (DNS)
                value:
                  accountid: 999999
                  object: ssl
                  application_type: registration
                  product_type: letsencrypt_standard
                  verification_type: dns
                  autorenew: 0
                  sanace: xn--gltig-kva.example.com
                  san: gültig.example.com
              letsencrypt_multidomaindomain:
                summary: SSL - Lets Encrypt Multi Domain (DNS)
                value:
                  accountid: 999999
                  object: ssl
                  application_type: registration
                  product_type: letsencrypt_standard
                  verification_type: dns
                  autorenew: 0
                  sanace:
                    - example.com
                    - subdomain.example.com
                    - xn--gltig-kva.example.com
                  san: 
                    - example.com
                    - subdomain.example.com
                    - gültig.example.com
              ssl_sectigo_singledomain_dns:
                summary: SSL - Sectigo Single Domain (DNS)
                value:
                  accountid: 999999
                  object: ssl
                  application_type: registration
                  product_type: sectigo_positive_ssl
                  verification_type: dns
                  autorenew: 0
                  key_size: 2048
                  key_type: rsa
                  contactid_owner: 9991
                  sanace: xn--gltig-kva.example.com
                  san: gültig.example.com
              ssl_sectigo_multidomain_dns:
                summary: SSL - Sectigo Multi Domain (DNS)
                value:
                  accountid: 999999
                  object: ssl
                  application_type: registration
                  product_type: sectigo_positive_ssl_trial
                  verification_type: dns
                  autorenew: 0
                  key_size: 2048
                  key_type: rsa
                  contactid_owner: 9991
                  sanace:
                    - example.com
                    - subdomain.example.com
                    - xn--gltig-kva.example.com
                  san: 
                    - example.com
                    - subdomain.example.com
                    - gültig.example.com
              ssl_sectigo_singledomain_email:
                summary: SSL - Sectigo Single Domain (eMail)
                value:
                  accountid: 999999
                  object: ssl
                  application_type: registration
                  product_type: sectigo_positive_ssl
                  verification_type: email
                  verification_email: admin@example.com
                  autorenew: 0
                  key_size: 2048
                  key_type: rsa
                  contactid_owner: 9991
                  sanace: xn--gltig-kva.example.com
                  san: gültig.example.com
              ssl_csr:
                summary: SSL - CSR
                value:
                  accountid: 999999
                  object: ssl
                  application_type: registration
                  product_type: ssl_csr
                  verification_type: dsp
                  autorenew: 0
                  key_size: 2048
                  key_type: rsa
                  contactid_owner: 9991
                  sanace: xn--gltig-kva.example.com
                  san: gültig.example.com
              psca:
                summary: SSL - PSCA
                value:
                  accountid: 999999
                  object: ssl
                  application_type: registration
                  product_type: psca_plusserver_network
                  verification_type: dsp
                  autorenew: 0
                  validity_days: 7
                  key_type: rsa
                  key_size: 2048
                  sanace: xn--gltig-kva.example.com
                  san: gültig.example.com
              revoke:
                summary: SSL - Revoke
                value:
                  object: ssl
                  application_type: revoke
                  sslid: 42
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /application/{applicationid}:
    get:
      tags:
        - Application
      summary: Receive application information (Application by id)
      operationId: ApplicationGetPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "applicationid"
          in: "path"
          description: "id of application"
          required: true
          type: "integer"
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /application/key_description:
    get:
      tags:
        - Application
      summary: Receive information about the used keys
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: ApplicationGet_key_description
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /application/product_type:
    get:
      tags:
        - Application
      summary: Receive information about valid product_type
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: ApplicationGet_product_type
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /contact:
    get:
      tags:
        - Contact
      summary: Receive contact information (Search)
      description: |-
        All GET parameters are strings.  
        
        For many parameters you can use the following additional operators:
          - (\*) "Wildcard" operator (i.e. "\*plus\*")
          - (!) "Not" operator (i.e. "!\*plus\*")
          - (>) "Greater than" operator (i.e. ">42")
          - (<) "Smaller than" operator (i.e. "<42")  
        
        Query parameters can be repeated to achieve better results (i.e. ..&san=!\*plus\*&san=!\*server\*&san=!\*gmbh\*..)  
        Alternatively, it is possible to separate values by a comma (i.e. ..&san=!\*plus\*,!\*server\*,!\*gmbh\*..).  
        
        All parameters are evaluated as "AND" links (related to the returned data set).  
        
        Example: "..&id=1,2..." does not return the records with ID 1 and ID 2, but searches for a record whose ID is 1 and 2.  
        This leads to an empty list. If you need an "OR" link, split your requests.  
      operationId: ContactGet
      parameters:
        - name: accountid
          in: query
          description: |-
            id of account  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: accountid_request
          in: query
          description: |-
            id of requestor's account  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: address_additional_info
          in: query
          description: |-
            Additional address information  
                        
            The following operators are accepted: 
            - (\*) "Wildcard" 
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: address_city
          in: query
          description: |-
            Name of the city  
                        
            The following operators are accepted: 
            - (\*) "Wildcard" 
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: address_city_birth
          in: query
          description: |-
            Birthplace
                        
            The following operators are accepted: 
            - (\*) "Wildcard" 
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: address_country_code
          in: query
          description: |-
            ISO 3166-1 (alpha-2) country code of the country  
                        
            The following operators are accepted:
            - (\*) "Wildcard"  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: address_postcode
          in: query
          description: |-
            Postal code  
                        
            The following operators are accepted:
            - (\*) "Wildcard"  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: address_state
          in: query
          description: |-
            Name of the state 
                        
            The following operators are accepted:
            - (\*) "Wildcard"  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: address_street
          in: query
          description: |-
            Name of the street 
                        
            The following operators are accepted:
            - (\*) "Wildcard"  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: address_street_number
          in: query
          description: |-
            House number 
                        
            The following operators are accepted:
            - (\*) "Wildcard"  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: company_type
          in: query
          description: |-
            Type of company (AG, GmbH, association, ...)
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: contact_ref
          in: query
          description: |-
            Reference to historical information 
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: contactid
          in: query
          description: |-
            id of contact 
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: contactid_alias
          in: query
          description: |-
            id alias of contact (unique user friendly identifier)
                        
            The following operators are accepted:
            - (\*) "Wildcard"  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: date_active
          in: query
          description: |-
            Date of dataset activation. 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
        - name: date_birth_date
          in: query
          description: |-
            Birth date of the natural person 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
        - name: date_inactive
          in: query
          description: |-
            Date of dataset deactivation 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
        - name: email
          in: query
          description: |-
            Email address 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: fax_number
          in: query
          description: |-
            Fax number with country calling code and with area calling code. (Example: 00494077175519) 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_companyid
          in: query
          description: |-
            Company identification number (This is not the plusserver company id. This is the identification of the chamber of commerce) 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_duns
          in: query
          description: |-
            DUNS ID 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_identity_card_number
          in: query
          description: |-
            Number of the identity card (Natural person) 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_identity_card_authority
          in: query
          description: |-
            Authority of the identity card (Natural person) 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_tax_number_natural_person
          in: query
          description: |-
            Tax number of the natural person
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_tax_number_organisation
          in: query
          description: |-
            Tax number of the organisation
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_trademark
          in: query
          description: |-
            Trademark identification number
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_vatid
          in: query
          description: |-
            VAT identification number
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: id_xxx
          in: query
          description: |-
            XXX community ID
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: name_firstname
          in: query
          description: |-
            First name of the natural person
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: name_functional
          in: query
          description: |-
            Name of the functional.
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: name_lastname
          in: query
          description: |-
            Surname of the natural person
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: name_organisation
          in: query
          description: |-
            Name of the organisation
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: name_organisation_unit
          in: query
          description: |-
            Name of the organisation unit
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: person_jobtitle
          in: query
          description: |-
            Job title
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: phone_number
          in: query
          description: |-
            Phone number with country calling code and with area calling code (Example: 00494077175519) 
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: url_company
          in: query
          description: |-
            Website of the company
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
    post:
      tags:
        - Contact
      summary: Create a contact
      operationId: ContactPost
      consumes:
        - application/json
      produces:
        - application/json
      requestBody:
        description: Create a contact
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Contact'
            examples:
              general_all:
                summary: GENERAL - All parameters
                value:
                  accountid: 1000
                  name_organisation: Plusserver
                  name_organisation_unit: Plusserver Support
                  name_functional: Administrator
                  name_firstname: Tim
                  name_lastname: Muster
                  address_street: Venloer Strasse
                  address_street_number: "47"
                  address_additional_info: Eingang links
                  address_city: Koeln
                  address_city_birth: "Dresden"
                  address_postcode: "50672"
                  address_state: Nordrhein-Westfalen
                  address_country_code: DE
                  company_type: "GmbH"
                  date_birth_date: "19990117"
                  email: hostmaster@plusserver.com
                  id_companyid: HRB 84977
                  id_duns: "11-222-3333"
                  id_identity_card_number: "11223344XAB"
                  id_identity_card_authority: "Dresden Nord"
                  id_tax_number_organisation: "100/204/5513"
                  id_tax_number_natural_person: "207/318/9912"  
                  id_trademark: "AX12345"
                  id_vatid: "DE815289260"
                  id_xxx: "X114499"
                  fax_number: "0049220310451045"
                  person_jobtitle: "Administrator"
                  phone_number: "0049220310453500"
                  url_company: "https://plusserver.com"
              general_natural_person:
                summary: GENERAL - Natural person
                value:
                  accountid: 1000
                  name_firstname: Tim
                  name_lastname: Muster
                  address_street: Venloer Strasse
                  address_street_number: "47"
                  address_city: Koeln
                  address_postcode: "50672"
                  address_country_code: DE
                  email: hostmaster@plusserver.com
                  phone_number: "0049220310453500"
              general_organisation:
                summary: GENERAL - Organisation
                value:
                  accountid: 1000
                  name_organisation: Plusserver
                  address_street: Venloer Strasse
                  address_street_number: "47"
                  address_city: Koeln
                  address_postcode: "50672"
                  address_country_code: DE
                  email: hostmaster@plusserver.com
                  phone_number: "0049220310453500"
              ssl:
                summary: SSL
                value:
                  accountid: 1000
                  name_organisation: Plusserver
                  name_organisation_unit: Plusserver Support
                  name_firstname: Tim
                  name_lastname: Muster
                  address_street: Venloer Strasse
                  address_street_number: "47"
                  address_city: Koeln
                  address_postcode: "50672"
                  address_state: Nordrhein-Westfalen
                  address_country_code: DE
                  email: hostmaster@plusserver.com
                  phone_number: "0049220310453500"
              domain_de:
                summary: DOMAIN - .de
                value:
                  accountid: 1000
                  name_organisation: Plusserver
                  name_firstname: Tim
                  name_lastname: Muster
                  address_street: Venloer Strasse
                  address_street_number: "47"
                  address_city: Koeln
                  address_postcode: "50672"
                  address_country_code: DE
                  email: hostmaster@plusserver.com
                  phone_number: "0049220310453500"
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
    patch:
      tags:
        - Contact
      summary: Update a contact (id in body)
      operationId: ContactPatch
      consumes:
        - application/json
      produces:
        - application/json
      requestBody:
        description: Update an existing contact
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactPatch'
            examples:
              change_email:
                summary: CHANGE - email
                value:
                  contactid: 1000
                  email: hostmaster@plusserver.com
              change_phone:
                summary: CHANGE - phone
                value:
                  contactid: 1000
                  phone_number: "0049220310453500"
              change_address:
                summary: CHANGE - address
                value:
                  contactid: 1000
                  address_street: Venloer Strasse
                  address_street_number: "47"
                  address_city: Koeln
                  address_postcode: "50672"
                  address_country_code: DE
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /contact/{contactid}:
    get:
      tags:
        - Contact
      summary: Receive contact information (Contact by id)
      operationId: ContactGetPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "contactid"
          in: "path"
          description: "id of contact"
          required: true
          type: "integer"
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
    patch:
      tags:
        - Contact
      summary: Update a contact (id in path)
      operationId: ContactPatchPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "contactid"
          in: "path"
          description: "id of contact"
          required: true
          type: "integer"
      requestBody:
        description: Update an existing contact
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactPatchPath'
            examples:
              change_email:
                summary: CHANGE - email
                value:
                  email: hostmaster@plusserver.com
              change_phone:
                summary: CHANGE - phone
                value:
                  phone_number: "0049220310453500"
              change_address:
                summary: CHANGE - address
                value:
                  address_street: Venloer Strasse
                  address_street_number: "47"
                  address_city: Koeln
                  address_postcode: "50672"
                  address_country_code: DE
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /contact/contact_product_requirements:
    get:
      tags:
        - Contact
      summary: Contact Product Requirements
      description: |-
        Receive information about necessary contact information regarding product and type of contact  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: ContactGet_contact_product_requirements
      parameters:
        - name: object
          in: query
          description: |-
            product object (domain, ssl)
          required: true
          schema:
            type: string
            default: ssl
            enum:
              - domain
              - ssl
        - name: contact_type
          in: query
          description: |-
            type of contact (owner, admin, tech)  
          required: true
          schema:
            type: string
            default: owner
            enum:
              - owner
              - admin
              - tech
        - name: product_type
          in: query
          description: |-
            type of product (ssl_csr, .de, .net)  
          required: true
          schema:
            type: string
        - name: extended_information
          in: query
          description: |-
            0: return minimum information
            1: return maximum information  
          required: false
          schema:
            type: string
            default: 0
            enum:
              - 0
              - 1
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /contact/key_description:
    get:
      tags:
        - Contact
      summary: Receive information about the used keys
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: ContactGet_key_description
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /domain:
    get:
      tags:
        - Domain
      summary: Receive domain information (Search)
      description: |-
        All GET parameters are strings.  
        
        For many parameters you can use the following additional operators:
          - (\*) "Wildcard" operator (i.e. "\*plus\*")
          - (!) "Not" operator (i.e. "!\*plus\*")
          - (>) "Greater than" operator (i.e. ">42")
          - (<) "Smaller than" operator (i.e. "<42")  
        
        Query parameters can be repeated to achieve better results (i.e. ..&san=!\*plus\*&san=!\*server\*&san=!\*gmbh\*..)  
        Alternatively, it is possible to separate values by a comma (i.e. ..&san=!\*plus\*,!\*server\*,!\*gmbh\*..).  
        
        All parameters are evaluated as "AND" links (related to the returned data set).  
        
        Example: "..&id=1,2..." does not return the records with ID 1 and ID 2, but searches for a record whose ID is 1 and 2.  
        This leads to an empty list. If you need an "OR" link, split your requests.  
      operationId: DomainGet
      parameters:
        - name: accountid
          in: query
          description: |-
            id of account  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: date_active
          in: query
          description: |-
            activation date  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
        - name: date_billing
          in: query
          description: |-
            billing date  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
        - name: date_delete
          in: query
          description: |-
            delete date  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
        - name: date_inactive
          in: query
          description: |-
            inactivation date  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
        - name: domain
          in: query
          description: |-
            name of domain in native form (i.e. häuser.de)  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: domainace
          in: query
          description: |-
            name of domain in ascii/ace (i.e. xn--huser-gra.de)  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: domainid
          in: query
          description: |-
            id of domain  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: offset
          in: query
          description: |-
            offset  
                        
            The following operators are accepted:  
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /domain/{domainid}:
    get:
      tags:
        - Domain
      summary: Receive domain information (Domain by id)
      operationId: DomainGetPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "domainid"
          in: "path"
          description: "id of domain"
          required: true
          type: "integer"
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /domain/key_description:
    get:
      tags:
        - Domain
      summary: Receive information about the used keys
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: DomainGet_key_description
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /domain/price:
    get:
      tags:
        - Domain
      summary: Receive information about prices
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: DomainGet_price
      parameters:
        - name: accountid
          in: query
          description: |-
            id of account  
                        
            The following operators are accepted:

            None
          required: true
          schema:
            type: string
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /domain/product_type:
    get:
      tags:
        - Domain
      summary: Receive information about valid product_type
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: DomainGet_product_type
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /redirect:
    get:
      tags:
        - Redirect
      summary: Receive redirect information (Search)
      description: |-
        All GET parameters are strings.  
        
        For many parameters you can use the following additional operators:
          - (\*) "Wildcard" operator (i.e. "\*plus\*")
          - (!) "Not" operator (i.e. "!\*plus\*")
          - (>) "Greater than" operator (i.e. ">42")
          - (<) "Smaller than" operator (i.e. "<42")  
        
        Query parameters can be repeated to achieve better results (i.e. ..&san=!\*plus\*&san=!\*server\*&san=!\*gmbh\*..)  
        Alternatively, it is possible to separate values by a comma (i.e. ..&san=!\*plus\*,!\*server\*,!\*gmbh\*..).  
        
        All parameters are evaluated as "AND" links (related to the returned data set).  
        
        Example: "..&id=1,2..." does not return the records with ID 1 and ID 2, but searches for a record whose ID is 1 and 2.  
        This leads to an empty list. If you need an "OR" link, split your requests.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: RedirectGet
      parameters:
        - name: accountid
          in: query
          description: |-
            id of account  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: destination
          in: query
          description: |-
            Destination (Target of the redirect)
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string  
        - name: fqdn
          in: query
          description: |-
            fqdn in native form (i.e. www.häuser.de)  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string  
        - name: fqdnace
          in: query
          description: |-
            fqdn in ascii/ace (i.e. www.xn--huser-gra.de)  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: offset
          in: query
          description: |-
            offset  
                        
            The following operators are accepted:  
          required: false
          schema:
            type: integer
        - name: product_type
          in: query
          description: |-
            notation of product  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
            enum:
             - standard
             - hidden
             - rewrite
        - name: redirectid
          in: query
          description: |-
            id of redirect  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string    
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
    post:
      tags:
        - Redirect
      summary: Create a redirect
      operationId: RedirectPost
      consumes:
        - application/json
      produces:
        - application/json
      requestBody:
        description: Create a redirect
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Redirect'
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
    patch:
      tags:
        - Redirect
      summary: Update a redirect (id in body)
      operationId: RedirectPatch
      consumes:
        - application/json
      produces:
        - application/json
      requestBody:
        description: Update an existing redirect
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedirectPatch'
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /redirect/{redirectid}:
    get:
      tags:
        - Redirect
      summary: Receive redirect information (Redirect by id)
      operationId: RedirectGetPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "redirectid"
          in: "path"
          description: "id of redirect"
          required: true
          type: "integer"
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
    patch:
      tags:
        - Redirect
      summary: Update a redirect (id in path)
      operationId: RedirectPatchPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "redirectid"
          in: "path"
          description: "id of redirect"
          required: true
          type: "integer"
      requestBody:
        description: Update an existing redirect
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedirectPatchPath'
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
    delete:
      tags:
        - Redirect
      summary: Delete a redirect
      operationId: RedirectDelete
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
      - name: "redirectid"
        in: "path"
        description: "Delete an existening redirect"
        required: true
        type: "integer"
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /redirect/configuration_type:
    get:
      tags:
        - Redirect
      summary: Receive information about valid configuration_type
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: RedirectGet_configuration_type
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /redirect/key_description:
    get:
      tags:
        - Redirect
      summary: Receive information about the used keys
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: RedirectGet_key_description
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /redirect/product_type:
    get:
      tags:
        - Redirect
      summary: Receive information about valid product_type
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: RedirectGet_product_type
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /redirect/webserver_ip:
    get:
      tags:
        - Redirect
      summary: Receive information about valid webserver_ip
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: RedirectGet_webserver_ip
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /ssl:
    get:
      tags:
        - SSL
      summary: Receive SSL information (Search)
      description: |-
        All GET parameters are strings.  
        
        For many parameters you can use the following additional operators:
          - (\*) "Wildcard" operator (i.e. "\*plus\*")
          - (!) "Not" operator (i.e. "!\*plus\*")
          - (>) "Greater than" operator (i.e. ">42")
          - (<) "Smaller than" operator (i.e. "<42")  
        
        Query parameters can be repeated to achieve better results (i.e. ..&san=!\*plus\*&san=!\*server\*&san=!\*gmbh\*..)  
        Alternatively, it is possible to separate values by a comma (i.e. ..&san=!\*plus\*,!\*server\*,!\*gmbh\*..).  
        
        All parameters are evaluated as "AND" links (related to the returned data set).  
        
        Example: "..&id=1,2..." does not return the records with ID 1 and ID 2, but searches for a record whose ID is 1 and 2.  
        This leads to an empty list. If you need an "OR" link, split your requests.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: SSLGet
      parameters:
        - name: accountid
          in: query
          description: |-
            id of account  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: applicationid
          in: query
          description: |-
            id of application leading to this certificate  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: autorenew
          in: query
          description: autorenew (0 no, 1 yes)
          required: false
          schema:
            type: string
            enum:
              - 0
              - 1
        - name: exclude_key
          in: query
          description: hide keys (0 no, 1 yes)
          required: false
          schema:
            type: string
            enum:
              - 0
              - 1
            default: "1"
        - name: exclude_no_key
          in: query
          description: do not show certificates without an available private key. (0 no, 1 yes)
          required: false
          schema:
            type: string
            enum:
              - 0
              - 1
            default: "1"
        - name: offset
          in: query
          description: |-
            offset  
                        
            The following operators are accepted:  
          required: false
          schema:
            type: integer
        - name: product_type
          in: query
          description: |-
            notation of product  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
            enum:
             - letsencrypt_standard
             - external_managed_private
             - external_managed_public
        - name: san
          in: query
          description: |-
            fqdn in native form (i.e. häuser.de)  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string  
        - name: sanace
          in: query
          description: |-
            fqdn in ascii/ace (i.e. xn--huser-gra.de)  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: sslid
          in: query
          description: |-
            id of certificate  
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: sslid_ref_previous
          in: query
          description: |-
            id of previous certificate (if created by renew)
                        
            The following operators are accepted:  
            - (!) "Not"
          required: false
          schema:
            type: string
        - name: valid_from
          in: query
          description: |-
            valid from  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string  
        - name: valid_until
          in: query
          description: |-
            valid until  
                        
            The following operators are accepted:  
            - (\*) "Wildcard"
            - (!) "Not"
            - (>) "Greater than"
            - (<) "Smaller than"
          required: false
          schema:
            type: string
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
    patch:
      tags:
        - SSL
      summary: Update SSL information (id in body)
      operationId: SSLPatch
      consumes:
        - application/json
      produces:
        - application/json
      requestBody:
        description: Update an existing certificate
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SSLPatch'
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /ssl/{sslid}:
    get:
      tags:
        - SSL
      summary: Receive SSL information (SSL by id)
      operationId: SSLGetPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "sslid"
          in: "path"
          description: "id of ssl"
          required: true
          type: "integer"
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
    patch:
      tags:
        - SSL
      summary: Update SSL information (id in path)
      operationId: SSLPatchPath
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "sslid"
          in: "path"
          description: "id of ssl"
          required: true
          type: "integer"
      requestBody:
        description: Update an existing certificate
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SSLPatchPath'
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /ssl/external_managed:
    patch:
      tags:
        - SSL
      summary: Upload certificate for existing CSR (id in body)
      operationId: SSLPatch_external_managed
      consumes:
        - application/json
      produces:
        - application/json
      requestBody:
        description: Update an existing CSR
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SSLPatchExternalManaged'
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
    post:
      tags:
        - SSL
      summary: Upload existing (external) certificate (not managed by plusserver)
      description: |-
        Upload existing (external) certificate (not managed by plusserver)
        (Use /application to order new certifcates)
      operationId: SSLPost_external_managed
      consumes:
        - application/json
      produces:
        - application/json
      requestBody:
        description: Upload existing (external) certificate (not managed by plusserver)
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SSLPostExternalManaged'
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /ssl/external_managed/{sslid}:
    patch:
      tags:
        - SSL
      summary: Upload certificate for existing CSR (id in path)
      operationId: SSLPatchPath_external_managed
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: "sslid"
          in: "path"
          description: "id of ssl"
          required: true
          type: "integer"
      requestBody:
        description: Update an existing CSR
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SSLPatchPathExternalManaged'
        required: true
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '500':
          description: internal server error
  /ssl/key_description:
    get:
      tags:
        - SSL
      summary: Receive information about the used keys
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: SSLGet_key_description
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /ssl/price:
    get:
      tags:
        - SSL
      summary: Receive information about prices
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: SSLGet_price
      parameters:
        - name: accountid
          in: query
          description: |-
            id of account  
                        
            The following operators are accepted:

            None
          required: true
          schema:
            type: string
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
  /ssl/product_type:
    get:
      tags:
        - SSL
      summary: Receive information about valid product_type
      description: |-
        All GET parameters are strings.  
      consumes:
        - application/json
      produces:
        - application/json
      operationId: SSLGet_product_type
      responses:
        '200':
          description: processed successfully  
        '400':
          description: bad request
        '401':
          description: unauthorized
        '403':
          description: forbidden
        '409':
          description: conflict
        '415':
          description: unsupported media type
        '429':
          description: too many requests
        '500':
          description: internal server error
components:
  schemas:
    Application:
      type: object
      properties:
        accountid:
          type: integer
          example: 12345
        application_type:
          type: string
          example: registration
          enum:
            - registration
            - renew
        object:
          type: string
          example: ssl
          enum:
            - ssl
        product_type:
          type: string
          example: letsencrypt_standard
          enum:
            - letsencrypt_standard
            - psca_plusserver_network
            - psca_plusserver_sap
        san:
          type: string
          example: www.häuser.de
        sanace:
          type: string
          example: xn--huser-gra.de
        validity_days:
          type: integer
          example: 7
        key_size:
          type: integer
          example: 2048
        sslid:
          type: integer
          example: 42
    Contact:
      type: object
      properties:
        accountid:
          type: integer
          example: 12345
    ContactPatch:
      type: object
      properties:
        contactid:
          type: integer
          example: 1234
    ContactPatchPath:
      type: object
      properties:
        email:
          type: string
          example: hostmaster@plusserver.com
    IVPost:
      type: object
      properties:
        accountid:
          type: integer
          example: 12345
        verification_type:
          type: string
          example: email
          enum:
            - email
            - data
        verify_email:
          type: string
          example: hostmaster@plusserver.com
        text_name:
          type: string
          example: email_verification_denic
        text_environment_vars:
          type: object
          example: 
            key1: "Value 1"
            key2: "Value 2"
    Redirect:
      type: object
      properties:
        accountid:
          type: integer
          example: 12345
        configuration_type:
          type: string
          example: redirect_only
          enum:
            - redirect_only
            - redirect_and_dns
            - redirect_and_dns_change_existing_record
        destination:
          type: string
          example: https://www.plusserver.com/unternehmen/ueber-uns/
        fqdn:
          type: string
          example: www.häuser.de
        fqdnace:
          type: string
          example: xn--huser-gra.de
        product_type:
          type: string
          example: standard
          enum:
            - hidden
            - rewrite
            - standard
    Dns:
      type: object
      properties:
        accountid:
          type: integer
          example: 12345
        configuration_type:
          type: string
          example: master
        customerid:
          type: integer
          example: 12345
        domain:
          type: string
          example: www.häuser.de
        domainace:
          type: string
          example: xn--huser-gra.de
        masterip:
          type: string
          example: 127.0.0.1
    IVPostPathemailresend:
      type: object
    IVPostemailresend:
      type: object
      properties:
        ivid:
          type: integer
          example: 42
    IVPostPathemailcancel:
      type: object
    IVPostemailcancel:
      type: object
      properties:
        ivid:
          type: integer
          example: 42
    IVPostdataverify:
      type: object
      properties:
        ivid:
          type: integer
          example: 42
        evidence:
          type: string
          example: idcard
    IVPostPathdataverify:
      type: object
      properties:
        evidence:
          type: string
          example: idcard
    RedirectPatch:
      type: object
      properties:
        destination:
          type: string
          example: https://www.plusserver.com/unternehmen/ueber-uns/
        product_type:
          type: string
          example: standard
          enum:
            - hidden
            - rewrite
            - standard 
        redirectid:
          type: integer
          example: 1234
    RedirectPatchPath:
      type: object
      properties:
        destination:
          type: string
          example: https://www.plusserver.com/unternehmen/ueber-uns/
        product_type:
          type: string
          example: standard
          enum:
            - hidden
            - rewrite
            - standard
    SSLPatch:
      type: object
      properties:
        autorenew:
          type: integer
          minimum: 0
          maximum: 1
          example: 1
        sslid:
          type: integer
          example: 42
    SSLPatchPath:
      type: object
      properties:
        autorenew:
          type: integer
          minimum: 0
          maximum: 1
          example: 1
    SSLPatchPathExternalManaged:
      type: object
      properties:
        cer:
          required: true
          type: string
          example: |- 
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
        intermediate_chain:
          required: true
          type: string
          example: |- 
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
    SSLPatchExternalManaged:
      type: object
      properties:
        sslid:
          type: integer
          example: 42
        cer:
          required: true
          type: string
          example: |- 
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
        intermediate_chain:
          required: true
          type: string
          example: |- 
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
    SSLPostExternalManaged:
      type: object
      properties:
        accountid:
          required: true
          type: integer
          example: 12345
        cer:
          required: true
          type: string
          example: |- 
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
        key:
          required: true
          type: string
          example: |-
            -----BEGIN PRIVATE KEY-----
            ...
            -----END PRIVATE KEY-----
        intermediate_chain:
          required: true
          type: string
          example: |- 
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
  securitySchemes:
    api_key:
      type: apiKey
      description: API key to authorize requests.
      name: X-API-Key
      in: header