openapi: 3.0.1
info:
  title: API Gateway
  version: v1.0
servers:
  - url: https://api.pubtest.nic.it
paths:
  /v1/contract:
    get:
      tags:
        - Customer and Registrar
      summary: Get contract information
      operationId: getContract
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contract'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/customer:
    get:
      tags:
        - Customer and Registrar
      summary: Get customer information
      operationId: getCustomer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/customer/eInvoicing:
    put:
      tags:
        - Customer and Registrar
      summary: Update of the electronic invoicing data, available only for private italian customers
      operationId: updateEInvoicing
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerEInvoicingRequest'
        required: true
      responses:
        '204':
          description: Updated
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/emails:
    get:
      tags:
        - Customer and Registrar
      summary: Get registrar e-mail addresses
      operationId: getRegistrarEmails
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailsRegistrar'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
    put:
      tags:
        - Customer and Registrar
      summary: Update registrar e-mail addresses
      operationId: updateRegistrarEmails
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailsRegistrar'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailsRegistrar'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/gdpr/template/{language}:
    get:
      tags:
        - Customer and Registrar
      summary: Get GDPR template by language
      operationId: getGDPRTemplate
      parameters:
        - name: language
          in: path
          required: true
          schema:
            type: string
            enum:
              - it
              - en
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GDPRTemplate'
        '400':
          description: Invalid language
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/gdpr:
    get:
      tags:
        - Customer and Registrar
      summary: Get registrar GDPR data
      operationId: getGDPR
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GDPRData'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: GDPR data not found for registrar
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
      security:
        - registrar_authentication: []
    put:
      tags:
        - Customer and Registrar
      summary: Create or update registrar GDPR data
      operationId: createOrUpdateGDPR
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GDPRRequest'
        required: true
      responses:
        '200':
          description: Updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GDPRData'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GDPRData'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/gdpr/confirm:
    put:
      tags:
        - Customer and Registrar
      summary: Confirm registrar GDPR data
      description: Confirm registrar GDPR data (only lastupdate is updated)
      operationId: confirmGDPR
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GDPRData'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/headQuarter:
    get:
      tags:
        - Customer and Registrar
      summary: Get contract headquarter address
      operationId: getHeadQuarter
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HeadQuarter'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
    put:
      tags:
        - Customer and Registrar
      summary: Update contract headquarter address
      operationId: updateHeadQuarter
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HeadQuarter'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HeadQuarter'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/registrar:
    get:
      tags:
        - Customer and Registrar
      summary: Get registrar data
      operationId: getRegistrar
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Registrar'
        '401':
          description: Unauthorized
      security:
        - registrar_authentication: []
  /v1/registrar/publicInfo:
    get:
      tags:
        - Customer and Registrar
      summary: Get registrar public information
      operationId: getRegistrarPublicInfo
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistrarPublicInfo'
        '401':
          description: Unauthorized
      security:
        - registrar_authentication: []
    put:
      tags:
        - Customer and Registrar
      summary: Update registrar public information
      operationId: updateRegistrarPublicInfo
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegistrarPublicInfoRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistrarPublicInfo'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/registrar/events:
    get:
      tags:
        - Customer and Registrar
      summary: Registrar events search
      operationId: getRegistrarEvents
      parameters:
        - name: type
          in: query
          description: |
            Search by event type.

            Supported operators: eq (default), ne, in, notIn
          schema:
            type: string
        - name: created
          in: query
          description: |-
            Search by creation date

            Supported operators: eq, ne, gt, lt, ge, le, between
            . The created parameter is multiple and can be specified multiple times
          schema:
            type: string
        - name: page
          description: Required page number (default 0)
          in: query
          schema:
            type: integer
            default: 0
            minimum: 0
        - name: size
          description: Required page size (default 20)
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
        - name: sort
          in: query
          description: |
            Order field. Order direction default is ascending (asc)
            . The 'sort' parameter is multiple and can be repeated multiple times
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedRegistrarEvent'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/registrar/contacts:
    get:
      tags:
        - Customer and Registrar
      summary: Registrar contacts list
      operationId: getRegistrarContactsList
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RegistrarContact'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
    post:
      tags:
        - Customer and Registrar
      summary: Registrar contact create
      operationId: createRegistrarContact
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegistrarContactRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistrarContact'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/registrar/contacts/{registrarContactId}:
    get:
      tags:
        - Customer and Registrar
      summary: Get Registrar contact by id
      operationId: getRegistrarContactById
      parameters:
        - name: registrarContactId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistrarContact'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Registrar contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
      security:
        - registrar_authentication: []
    put:
      tags:
        - Customer and Registrar
      summary: Update Registrar contact
      operationId: udpateRegistrarContact
      parameters:
        - name: registrarContactId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegistrarContactRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistrarContact'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Registrar contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
      security:
        - registrar_authentication: []
    delete:
      tags:
        - Customer and Registrar
      summary: Delete Registrar contact by id
      operationId: deleteRegistrarContactById
      parameters:
        - name: registrarContactId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: No Content
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Contact not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
      security:
        - registrar_authentication: []
  /v1/credit:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get registrar current credit value
      operationId: getCredit
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Credit'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/credit/untilDate:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get registrar credit value on a date
      description: Get credit value on the indicated date (included). For example, if you specify the date of '2024-01-09', the credit will be calculated taking into account all variations up to and including '2024-01-09 23:59:59'
      operationId: getCreditUntilDate
      parameters:
        - name: date
          in: query
          description: Date in format YYYY-mm-dd ('2024-01-09')
          required: true
          schema:
            type: string
            format: date
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditUntilDate'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/credit/warnThreshold:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get the credit threshold set by registrar
      operationId: getCreditWarnThreshold
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditWarnThreshold'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
    put:
      tags:
        - Invoices, Payments and Credit
      summary: Update the registrar credit threshold
      operationId: updateCreditWarnThreshold
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreditWarnThreshold'
        required: true
      responses:
        '204':
          description: No Content
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/payments:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Payments search
      operationId: searchPayments
      parameters:
        - name: amount
          in: query
          description: |
            Search by total amount

            Supported operators: eq (default), ne, gt, lt, ge, le, in, notIn, between
          schema:
            type: string
        - name: type
          in: query
          description: |
            Search by payment type, values: bank, creditCard, registry, contractTransfer

            Supported operators: eq (default), ne, in, notIn
          schema:
            type: string
        - name: status
          in: query
          description: |
            Search by payment status, values:  submitted, approved, suspended, rejected

            Supported operators: eq (default), ne, in, notIn
          schema:
            type: string
        - name: created
          in: query
          description: |
            Search by creation date

            Supported operators: eq (default), ne, gt, lt, ge, le, between
          schema:
            type: string
        - name: page
          in: query
          description: Page index (0..N)
          schema:
            type: integer
            default: 0
        - name: size
          in: query
          description: Page size
          schema:
            type: integer
            default: 20
        - name: sort
          in: query
          description: |
            Order field. Order direction default is ascending (asc)
            . The 'sort' parameter is multiple and can be repeated multiple times
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedPayment'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/payments/bank:
    post:
      tags:
        - Invoices, Payments and Credit
      summary: Create bank payment
      operationId: createBankPayment
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BankPaymentCreate'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payment'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/payments/{paymentId}:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get payment by id
      operationId: getPayment
      parameters:
        - name: paymentId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payment'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Payment not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/payments/{paymentId}/report:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get payment report by id
      operationId: getPaymentReport
      parameters:
        - name: paymentId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentReport'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Payment or report not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/payments/{paymentId}/report/domains:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get payment domains operations
      operationId: getPaymentReportDomains
      parameters:
        - name: paymentId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            text/csv:
              schema:
                type: string
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Payment or report not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/payments/{paymentId}/invoice:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get invoice by payment id
      operationId: getPaymentInvoice
      parameters:
        - name: paymentId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Payment not found or invoice not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/invoices:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Search invoices
      operationId: searchInvoices
      parameters:
        - name: paymentId
          in: query
          description: |
            Search by payment id.
            Supported operators: eq (default), ne, in, notIn
          schema:
            type: string
        - name: invoiceNumber
          in: query
          description: |
            Search by invoice number
            Supported operators: eq (default), ne, in, notIn, isNotNull, isNotNull
          schema:
            type: string
        - name: totalAmount
          in: query
          description: |
            Search by invoice total amount

            Supported operators: eq (default), ne, gt, lt, ge, le, between
          schema:
            type: string
        - name: documentDate
          in: query
          description: |
            Search by invoice date

            Supported operators: eq (default), ne, gt, lt, ge, le, between
          schema:
            type: string
        - name: page
          in: query
          description: Page index(0..N)
          schema:
            type: integer
            default: 0
        - name: size
          in: query
          description: Page size
          schema:
            type: integer
            default: 20
        - name: sort
          in: query
          description: |
            Order field. Order direction default is ascending (asc)
            . The 'sort' parameter is multiple and can be repeated multiple times
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedInvoice'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/invoices/{invoiceId}:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get invoice by id
      operationId: getInvoice
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Invoice not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/invoices/{invoiceId}/pdf:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get invoice PDF by id
      operationId: getInvoicePdf
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/pdf:
              schema:
                type: array
                items:
                  type: string
                  format: byte
        '400':
          description: Invalid request
          content:
            application/pdf:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Invoice not found
          content:
            application/pdf:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
    head:
      tags:
        - Invoices, Payments and Credit
      summary: Check invoice PDF availability
      operationId: invoiceHasPdf
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Invoice not found or PDF not available
      security:
        - registrar_authentication: []
  /v1/invoices/{invoiceId}/payment:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get Payment by invoice id
      operationId: getInvoicePayment
      parameters:
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payment'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Invoice not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/payments/creditCard/transactions:
    post:
      tags:
        - Invoices, Payments and Credit
      summary: Create new credit card transaction
      operationId: createCreditCardTransaction
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreditCardTransactionRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditCardTransaction'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '502':
          description: Error contacting credit card gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/payments/creditCard/transactions/{transactionId}:
    get:
      tags:
        - Invoices, Payments and Credit
      summary: Get credit card transaction by id
      operationId: getCreditCardTransaction
      parameters:
        - name: transactionId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditCardTransaction'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Transaction not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/ipAddresses:
    get:
      tags:
        - Security
      summary: Get enabled ip addresses for a service
      operationId: getIPAddress
      parameters:
        - name: service
          in: query
          description: |
            Search by service name
          schema:
            type: string
            enum:
              - epp-server
              - das
        - name: userId
          in: query
          description: |+
            Search by user id

            Supported operators: eq (default), ne, in, notIn

          schema:
            type: string
        - name: ipAddress
          in: query
          description: |+
            Search by ip addresses

            Supported operators: eq (default), ne, in, notIn

          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/IpAddressUserRegistrar'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
    post:
      tags:
        - Security
      summary: Create IP address for service/user
      operationId: createIPAddress
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IpAddressCreate'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/IpAddressUserRegistrar'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/ipAddresses/{ipAddressId}:
    delete:
      tags:
        - Security
      summary: Delete IP address for service/user by id
      operationId: deleteIPAddress
      parameters:
        - name: ipAddressId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: No Content
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: IP Address not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/user:
    get:
      tags:
        - Security
      summary: Get authenticated user data
      operationId: getSelfUser
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/user/groups:
    get:
      tags:
        - Security
      summary: Get authenticated user groups
      operationId: getSelfGroups
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/users:
    get:
      tags:
        - Security
      summary: Search users
      operationId: getUsers
      parameters:
        - name: username
          in: query
          description: |+
            Search by username

            Supported operators: eq (default), ne, in, notIn

          schema:
            type: string
        - name: name
          in: query
          description: |+
            Search by user's given name

            Supported operators: eq (default), ne, in, notIn, contains, startsWith, endsWith

          schema:
            type: string
        - name: lastName
          in: query
          description: |+
            Search by user's lastname

            Supported operators: eq (default), ne, in, notIn, contains, startsWith, endsWith

          schema:
            type: string
        - name: email
          in: query
          description: |+
            Search by users by e-mail address

            Supported operators: eq (default), ne, in, notIn

          schema:
            type: string
            format: email
        - name: group
          in: query
          description: |+
            Search by group

            Supported operators: none

          schema:
            type: string
        - name: created
          in: query
          description: |+
            Search by creation date.

            Supported operators: eq (default), ne, in, notIn, ge, gt, le, lt, between

          schema:
            type: string
        - name: lastupdate
          in: query
          description: |+
            Search by last modification date.

            Supported operators: eq (default), ne, in, notIn, ge, gt, le, lt, between

          schema:
            type: string
        - name: lastPasswordChange
          in: query
          description: |+
            Search by last password change date.

            Supported operators: eq (default), ne, in, notIn, ge, gt, le, lt, between

          schema:
            type: string
        - name: page
          description: Required page number (default 0)
          in: query
          schema:
            type: integer
            default: 0
            minimum: 0
        - name: size
          description: Required page size (default 20)
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedResourcesRegistrarUser'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
    post:
      tags:
        - Security
      summary: Create registrar user
      operationId: createUser
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserCreate'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/users/{userId}:
    get:
      tags:
        - Security
      summary: Get user by id
      operationId: getUserById
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
    delete:
      tags:
        - Security
      summary: Delete user by id
      operationId: deleteUser
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: No Content
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/users/{userId}/groups:
    get:
      tags:
        - Security
      summary: Get user groups
      operationId: getGroupsByUserId
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
    put:
      tags:
        - Security
      summary: Update user groups
      operationId: updateGroups
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              uniqueItems: true
              type: array
              items:
                type: string
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/passwordRequirements:
    get:
      tags:
        - Security
      summary: Get password requirements
      operationId: getPasswordRequirements
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasswordSettings'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/clients:
    get:
      tags:
        - Security
      summary: List registrar clients
      operationId: getClients
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Client'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
    post:
      tags:
        - Security
      summary: Create a client
      operationId: createClient
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '409':
          description: Richiesta in conflitto con esistenti
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/clients/{clientId}/generateKeystore:
    post:
      tags:
        - Security
      summary: Generate client keystore
      operationId: generateClientKeystore
      parameters:
        - name: clientId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientKeystoreGenerationRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/octet-stream: {}
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Client not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Incompatibile client status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/clients/{clientId}:
    get:
      tags:
        - Security
      summary: Get client by id
      operationId: getClientById
      parameters:
        - name: clientId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Client not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
    delete:
      tags:
        - Security
      summary: Delete a client
      operationId: deleteClient
      parameters:
        - name: clientId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Client not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/domains:
    get:
      tags:
        - Domains
      summary: Search domains
      operationId: searchDomains
      parameters:
        - name: view
          in: query
          description: 'Add more information to results. Supported values comma separated: registrant, admin, techs, hosts, dsRecords, newHosts, newDsRecords, signed'
          required: false
          schema:
            type: string
            description: 'Add more information to results. Supported values comma separated: registrant, admin, techs, hosts, dsRecords, newHosts, newDsRecords, signed'
        - name: domain
          in: query
          description: |
            Search by domain name (only ascii supported)

            Supported operators: eq (default), startsWith
          schema:
            type: string
        - name: created
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: lastupdate
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: expire
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: status
          in: query
          description: |
            Supported operators: eq (default), ne
          schema:
            type: string
        - name: hostname
          in: query
          description: |
            No operator supported
          schema:
            type: string
        - name: signed
          in: query
          schema:
            type: boolean
        - name: page
          in: query
          schema:
            type: integer
            default: 0
        - name: size
          in: query
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDomain'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/domains/{domainId}:
    get:
      tags:
        - Domains
      summary: Find registered domain by id
      operationId: getDomainById
      parameters:
        - name: domainId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: view
          in: query
          description: 'Add more information to results. Supported values comma separated: registrant, admin, techs, hosts, dsRecords, newHosts, newDsRecords, signed'
          required: false
          schema:
            type: string
            description: 'Add more information to results. Supported values comma separated: registrant, admin, techs, hosts, dsRecords, newHosts, newDsRecords, signed'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Domain'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Domain not found
          content:
            application/json:
              schema:
                type: string
      security:
        - registrar_authentication: []
  /v1/domains/{domainId}/events:
    get:
      tags:
        - Domains
      summary: Get domain events
      operationId: getDomainEvents
      parameters:
        - name: domainId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDomainEvents'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Domain not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/domains/findByName/{domainName}:
    get:
      tags:
        - Domains
      summary: Find registered domain by name. Domain name can be ascii or idn
      operationId: getDomainByName
      parameters:
        - name: domainName
          in: path
          required: true
          schema:
            type: string
        - name: view
          in: query
          description: 'Add more information to results. Supported values comma separated: registrant, admin, techs, hosts, dsRecords, newHosts, newDsRecords, signed'
          required: false
          schema:
            type: string
            description: 'Add more information to results. Supported values comma separated: registrant, admin, techs, hosts, dsRecords, newHosts, newDsRecords, signed'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Domain'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Domain not found
          content:
            application/json:
              schema:
                type: string
      security:
        - registrar_authentication: []
  /v1/domains/export/all:
    get:
      tags:
        - Domains
      summary: Export all registered domains
      operationId: exportAllDomains
      parameters:
        - name: options
          in: query
          description: 'Add more information to results. Supported values comma separated: domainDetail, registrant, admin, hosts'
          required: false
          schema:
            type: string
            description: 'Add more information to results. Supported values comma separated: domainDetail, registrant, admin, hosts'
      responses:
        '200':
          description: OK
          content:
            text/csv:
              schema:
                type: string
            application/jsonl:
              schema:
                type: string
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/domains/count:
    get:
      tags:
        - Domains
      summary: Count domains search results
      operationId: countDomains
      parameters:
        - name: view
          in: query
          description: 'Add more information to results. Supported values comma separated: registrant, admin, techs, hosts, dsRecords, newHosts, newDsRecords, signed'
          required: false
          schema:
            type: string
            description: 'Add more information to results. Supported values comma separated: registrant, admin, techs, hosts, dsRecords, newHosts, newDsRecords, signed'
        - name: domain
          in: query
          description: |
            Search by domain name (only ascii supported)

            Supported operators: eq (default), startsWith
          schema:
            type: string
        - name: created
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: lastupdate
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: expire
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: status
          in: query
          description: |
            Supported operators: eq (default), ne
          schema:
            type: string
        - name: hostname
          in: query
          description: |
            No operator supported
          schema:
            type: string
        - name: signed
          in: query
          schema:
            type: boolean
        - name: page
          in: query
          schema:
            type: integer
            default: 0
        - name: size
          in: query
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/domains/idnConverter:
    get:
      tags:
        - Domains
      summary: Convert domain name to punycode or unicode format
      operationId: domainIDNConverter
      parameters:
        - name: domain
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IDNConversion'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/contacts:
    get:
      tags:
        - Domains
      summary: Search contacts
      operationId: searchContacts
      parameters:
        - name: org
          in: query
          description: |
            Search by org using full-text search. No operators supported
          schema:
            type: string
        - name: name
          in: query
          description: |
            Search by org using full-text search. No operators supported
          schema:
            type: string
        - name: contactId
          in: query
          description: |
            No operators supported
          schema:
            type: string
        - name: email
          in: query
          description: |
            No operators supported
          schema:
            type: string
            format: email
        - name: city
          in: query
          description: |
            No operators supported
          schema:
            type: string
        - name: state
          in: query
          description: |
            Supported operators: eq (default), ne
          schema:
            type: string
        - name: country
          in: query
          description: |
            Supported operators: eq (default), ne
          schema:
            type: string
        - name: regcode
          in: query
          description: |
            No operators supported
          schema:
            type: string
        - name: nationality
          in: query
          description: |
            Supported operators: eq (default), ne
          schema:
            type: string
        - name: ipaCode
          in: query
          description: |
            No operator supported
          schema:
            type: string
        - name: uoCode
          in: query
          description: |
            No operator supported
          schema:
            type: string
        - name: schoolCode
          in: query
          description: |
            No operator supported
          schema:
            type: string
        - name: registrantTye
          in: query
          description: |
            No operators supported
          schema:
            type: number
        - name: linked
          in: query
          schema:
            type: boolean
        - name: created
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: lastupdate
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: page
          in: query
          schema:
            type: integer
            default: 0
        - name: size
          in: query
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedContact'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/contacts/{id}:
    get:
      tags:
        - Domains
      summary: Find contact by id
      operationId: getContactById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                type: string
      security:
        - registrar_authentication: []
  /v1/contacts/findByContactId/{contactId}:
    get:
      tags:
        - Domains
      summary: Find contact by contact-id assigned by the registrar
      operationId: getContactByContactId
      parameters:
        - name: contactId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                type: string
      security:
        - registrar_authentication: []
  /v1/contacts/export/registrants:
    get:
      tags:
        - Domains
      summary: Export all linked registrants
      operationId: exportRegistrants
      responses:
        '200':
          description: OK
          content:
            text/csv:
              schema:
                type: string
            application/jsonl:
              schema:
                type: string
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/contacts/count:
    get:
      tags:
        - Domains
      summary: Count contacts search results
      operationId: countContacts
      parameters:
        - name: org
          in: query
          description: |
            Search by org using full-text search. No operators supported
          schema:
            type: string
        - name: contactId
          in: query
          description: |
            No operators supported
          schema:
            type: string
        - name: email
          in: query
          description: |
            No operators supported
          schema:
            type: string
            format: email
        - name: city
          in: query
          description: |
            No operators supported
          schema:
            type: string
        - name: state
          in: query
          description: |
            Supported operators: eq (default), ne
          schema:
            type: string
        - name: country
          in: query
          description: |
            Supported operators: eq (default), ne
          schema:
            type: string
        - name: regcode
          in: query
          description: |
            No operators supported
          schema:
            type: string
        - name: nationality
          in: query
          description: |
            Supported operators: eq (default), ne
          schema:
            type: string
        - name: ipaCode
          in: query
          description: |
            Supported operators: eq (default), ne, isNull, isNotNull
          schema:
            type: string
        - name: uoCode
          in: query
          description: |
            Supported operators: eq (default), ne, isNull, isNotNull
          schema:
            type: string
        - name: schoolCode
          in: query
          description: |
            Supported operators: eq (default), ne, isNull, isNotNull
          schema:
            type: string
        - name: registrantTye
          in: query
          description: |
            No operators supported
          schema:
            type: number
        - name: linked
          in: query
          schema:
            type: boolean
        - name: created
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: lastupdate
          in: query
          description: |
            Supported operators: eq (default), ne, ge, gt, le, lt
          schema:
            type: string
        - name: page
          in: query
          schema:
            type: integer
            default: 0
        - name: size
          in: query
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
  /v1/domains/bulkTransfers/{bulkTransferId}:
    get:
      tags:
        - Bulk Transfer
      summary: Get a bulk transfer request by id
      operationId: getBulkTransferById
      parameters:
        - name: bulkTransferId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkTransfer'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: ''
          content: {}
        '404':
          description: Bulk Transfer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/domains/bulkTransfers:
    get:
      tags:
        - Bulk Transfer
      summary: Search bulk transfers requests
      operationId: searchBulkTransfers
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedBulkTransfer'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: ''
          content: {}
      security:
        - registrar_authentication: []
    post:
      tags:
        - Domains
      summary: Create a new bulk transfer request
      operationId: createBulkTransfer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkTransferCreate'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkTransfer'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Bulk transfer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/domains/bulkTransfers/{bulkTransferId}/events:
    get:
      tags:
        - Bulk Transfer
      summary: Get list of events for a bulk transfer
      operationId: getBulkTransferEventsById
      parameters:
        - name: bulkTransferId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedBulkTransferEvent'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: ''
          content: {}
        '404':
          description: Bulk Transfer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/domains/bulkTransfers/{bulkTransferId}/domains:
    get:
      tags:
        - Bulk Transfer
      summary: Get list of domains in the bulk transfer request by bulk transfer id
      operationId: getBulkTransferDomainsById
      parameters:
        - name: bulkTransferId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedBulkTransferDomain'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: ''
          content: {}
        '404':
          description: Bulk transfer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/domains/bulkTransfers/{bulkTransferId}/cancel:
    put:
      tags:
        - Bulk Transfer
      summary: Cancel a bulk transfer request by id
      operationId: cancelBulkTransfer
      parameters:
        - name: bulkTransferId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Bulk transfer cancelled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkTransfer'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Bulk transfer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/domains/bulkTransfers/{bulkTransferId}/approve:
    put:
      tags:
        - Bulk Transfer
      summary: Approve a bulk transfer request by id
      operationId: approveBulkTransfer
      parameters:
        - name: bulkTransferId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkTransferApprove'
        required: true
      responses:
        '200':
          description: Bulk transfer approved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkTransfer'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Bulk transfer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/domains/bulkTransfers/{bulkTransferId}/pdf-data:
    get:
      tags:
        - Bulk Transfer
      summary: Get a bulk transfer pdf data
      operationId: getBulkTransferPdfData
      parameters:
        - name: bulkTransferId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkTransferPdfDocumentData'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
        '403':
          description: ''
          content: {}
        '404':
          description: Bulk Transfer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - registrar_authentication: []
  /v1/darwin/contactUpdates:
    get:
      tags:
        - Darwin
      summary: List of ContactUpdate for a Darwin request
      operationId: getDarwinContactUpdatesList
      parameters:
        - name: requestId
          in: query
          required: true
          schema:
            format: int64
            type: integer
          example: 34
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DarwinContactUpdate'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Darwin request not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
    post:
      tags:
        - Darwin
      summary: Create a Darwin ContactUpdate for a request
      operationId: createDarwinContactUpdate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DarwinContactUpdate'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinContactUpdate'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Darwin request not found
        '409':
          description: Request status not compatibile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contactUpdates/current:
    get:
      tags:
        - Darwin
      summary: Get current (last inserted) ContactUpdate for a Darwin request
      operationId: getDarwinCurrentContactUpdate
      parameters:
        - name: requestId
          in: query
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinContactUpdate'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Darwin request or contact update not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contactUpdates/validate:
    post:
      tags:
        - Darwin
      summary: Validate Darwin ContactUpdate data
      operationId: validateDarwinContactUpdate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DarwinContactUpdate'
      responses:
        '204':
          description: OK
        '400':
          description: Invalid request or invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Darwin request or contact update not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contactUpdates/{contactUpdateId}:
    get:
      tags:
        - Darwin
      summary: Get a Darwin ContactUpdate by id
      operationId: getDarwinContactUpdateById
      parameters:
        - name: contactUpdateId
          in: path
          description: ContactUpdate Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinContactUpdate'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Darwin request or contact update not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contacts:
    get:
      tags:
        - Darwin
      summary: Search Darwin contacts
      operationId: searchDarwinContacts
      parameters:
        - name: action
          in: query
          schema:
            enum:
              - todo
              - hold
              - delete
            type: string
        - name: dbnaId
          in: query
          schema:
            format: int64
            type: integer
        - name: page
          in: query
          schema:
            format: int32
            default: 0
            type: integer
        - name: registrarContactId
          in: query
          schema:
            description: Find by contactId assigned by the Registrar
            type: string
        - name: requestId
          in: query
          schema:
            format: int64
            type: integer
        - name: size
          in: query
          schema:
            format: int32
            default: 20
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDarwinContact'
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contacts/changeAction/request/{requestId}:
    put:
      tags:
        - Darwin
      summary: Update Darwin all contact action for a request
      operationId: updateDarwinActionForAllContactsByRequestId
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DarwinContactActionUpdate'
      responses:
        '200':
          description: OK
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Darwin request not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contacts/count:
    get:
      tags:
        - Darwin
      summary: Count search results for Darwin contacts
      operationId: countDarwinContacts
      parameters:
        - name: action
          in: query
          schema:
            $ref: '#/components/schemas/DarwinContactAction'
        - name: dbnaId
          in: query
          schema:
            format: int64
            type: integer
        - name: registrarContactId
          in: query
          schema:
            description: Find by contactId assigned by the Registrar
            type: string
        - name: requestId
          in: query
          schema:
            format: int64
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contacts/{contactId}:
    get:
      tags:
        - Darwin
      summary: Get Darwin contact by id
      operationId: getDarwinContactById
      parameters:
        - name: contactId
          in: path
          description: Contact Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinContact'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Contact not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
    patch:
      tags:
        - Darwin
      summary: Update Darwin contact action
      operationId: updateDarwinContactActionById
      parameters:
        - name: contactId
          in: path
          description: Contact Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DarwinContactActionUpdate'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinContact'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Contact not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contacts/{contactId}/anomalies:
    get:
      tags:
        - Darwin
      summary: Get Darwin contact anomalies
      operationId: getDarwinContactAnomaliesById
      parameters:
        - name: contactId
          in: path
          description: Contact Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
        - name: all
          in: query
          description: True to get general and specific to contact anomalie
          required: false
          schema:
            type: boolean
          example: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DarwinAnomaly'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Contact not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/contacts/{contactId}/dbna:
    get:
      tags:
        - Darwin
      summary: Get DBNA contact data
      operationId: getDarwinDBNAContactById
      parameters:
        - name: contactId
          in: path
          description: Contact Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: DBNA contact not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/documents:
    get:
      tags:
        - Darwin
      summary: Search Darwin documents
      operationId: searchDarwinDocuments
      parameters:
        - name: documentType
          in: query
          schema:
            $ref: '#/components/schemas/DarwinDocumentType'
        - name: page
          in: query
          schema:
            format: int32
            default: 0
            type: integer
        - name: requestId
          in: query
          schema:
            format: int64
            type: integer
        - name: size
          in: query
          schema:
            format: int32
            default: 20
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDarwinDocument'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
    put:
      tags:
        - Darwin
      summary: Create Darwin documents for a request
      operationId: createDarwinDocumentForRequest
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - document
                - file
              properties:
                document:
                  type: object
                  required:
                    - requestId
                    - documentType
                  properties:
                    requestId:
                      format: int64
                      type: integer
                    documentType:
                      $ref: '#/components/schemas/DarwinDocumentType'
                    note:
                      type: string
                file:
                  type: string
                  format: binary
                  description: Document file. Only PDF and JPEG files are accepted.
            encoding:
              document:
                contentType: application/json
              file:
                contentType: application/pdf, image/jpeg
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinDocument'
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Darwin request not found
        '413':
          description: Request entity too large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/documents/count:
    get:
      tags:
        - Darwin
      summary: Count Darwin documents search results
      operationId: countDarwinDocuments
      parameters:
        - name: documentType
          in: query
          schema:
            $ref: '#/components/schemas/DarwinDocumentType'
        - name: requestId
          in: query
          schema:
            format: int64
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/documents/{documentId}:
    get:
      tags:
        - Darwin
      summary: Get a Darwin document by id
      operationId: getDarwinDocumentById
      parameters:
        - name: documentId
          in: path
          description: Document Id
          required: true
          schema:
            type: string
          example: abc-123
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinDocument'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Document not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
    delete:
      tags:
        - Darwin
      summary: Delete a Darwin document by id
      operationId: deleteDarwinDocumentById
      parameters:
        - name: documentId
          in: path
          description: Document Id
          required: true
          schema:
            type: string
          example: abc-123
      responses:
        '204':
          description: Deleted
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Document not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/documents/{documentId}/download:
    get:
      tags:
        - Darwin
      summary: Download Darwin document binary content by id
      operationId: downloadDarwinDocumentById
      parameters:
        - name: documentId
          in: path
          description: Document Id
          required: true
          schema:
            type: string
          example: abc-123
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Document not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/domains:
    get:
      tags:
        - Darwin
      summary: Search Darwin domains
      operationId: searchDarwinDomains
      parameters:
        - name: contactId
          in: query
          schema:
            format: int64
            type: integer
        - name: dbnaId
          in: query
          schema:
            format: int64
            type: integer
        - name: domain
          in: query
          schema:
            type: string
        - name: page
          in: query
          schema:
            format: int32
            default: 0
            type: integer
        - name: registrarContactId
          in: query
          schema:
            description: Find by contactId assigned by the Registrar
            type: string
        - name: requestId
          in: query
          schema:
            format: int64
            type: integer
        - name: size
          in: query
          schema:
            format: int32
            default: 20
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDarwinDomain'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/domains/count:
    get:
      tags:
        - Darwin
      summary: Count Darwin domains search results
      operationId: countDarwinDomains
      parameters:
        - name: contactId
          in: query
          schema:
            format: int64
            type: integer
        - name: dbnaId
          in: query
          schema:
            format: int64
            type: integer
        - name: domain
          in: query
          schema:
            type: string
        - name: registrarContactId
          in: query
          schema:
            description: Find by contactId assigned by the Registrar
            type: string
        - name: requestId
          in: query
          schema:
            format: int64
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/domains/{id}:
    get:
      tags:
        - Darwin
      summary: Get Darwin domain by id
      operationId: getDarwinDomainById
      parameters:
        - name: id
          in: path
          description: Domain Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinDomain'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Domain not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/domains/{id}/dbna:
    get:
      tags:
        - Darwin
      summary: Get DBNA domain data
      operationId: getDBNADomainByDarwinDomainId
      parameters:
        - name: id
          in: path
          description: Darwin domain Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Domain'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Domain not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/events:
    get:
      tags:
        - Darwin
      summary: Search Darwin events
      operationId: findDarwinEvents
      parameters:
        - name: page
          in: query
          schema:
            format: int32
            default: 0
            type: integer
        - name: requestId
          in: query
          required: true
          schema:
            format: int64
            type: integer
        - name: size
          in: query
          schema:
            format: int32
            default: 20
            type: integer
        - name: type
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDarwinEvent'
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/events/count:
    get:
      tags:
        - Darwin
      summary: Count Darwin events search results
      operationId: countDarwinEvents
      parameters:
        - name: requestId
          in: query
          required: true
          schema:
            format: int64
            type: integer
        - name: type
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests:
    get:
      tags:
        - Darwin
      summary: Search Darwin requests
      operationId: searchDarwinRequests
      parameters:
        - name: page
          in: query
          schema:
            format: int32
            default: 0
            type: integer
        - name: referenceContactOrg
          in: query
          schema:
            description: Find by contact org (startsWith)
            type: string
        - name: referenceContactRegcode
          in: query
          schema:
            type: string
        - name: registrarAssignation
          in: query
          schema:
            $ref: '#/components/schemas/DarwinUserAssignation'
        - name: size
          in: query
          schema:
            format: int32
            default: 20
            type: integer
        - name: status
          in: query
          schema:
            $ref: '#/components/schemas/DarwinRequestStatus'
        - name: view
          in: query
          description: 'Add more information to results. Valid values (comma separated) are: referenceContact and expirationDays'
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDarwinRequest'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests/count:
    get:
      tags:
        - Darwin
      summary: Count Darwin requests search results
      operationId: countDarwinRequests
      parameters:
        - name: referenceContactOrg
          in: query
          schema:
            description: Find by contact org (startsWith)
            type: string
        - name: referenceContactRegcode
          in: query
          schema:
            type: string
        - name: registrarAssignation
          in: query
          schema:
            $ref: '#/components/schemas/DarwinUserAssignation'
        - name: status
          in: query
          schema:
            $ref: '#/components/schemas/DarwinRequestStatus'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests/expiring:
    get:
      tags:
        - Darwin
      summary: Search/List Darwin expiring requests
      operationId: searchDarwinExpiringRequests
      parameters:
        - name: days
          in: query
          description: Days to expiration
          required: true
          schema:
            format: int32
            default: '7'
            type: integer
          example: 10
        - name: page
          in: query
          schema:
            format: int32
            default: 0
            type: integer
        - name: referenceContactOrg
          in: query
          schema:
            description: Find by contact org (startsWith)
            type: string
        - name: referenceContactRegcode
          in: query
          schema:
            type: string
        - name: registrarAssignation
          in: query
          schema:
            $ref: '#/components/schemas/DarwinUserAssignation'
        - name: size
          in: query
          schema:
            format: int32
            default: 20
            type: integer
        - name: view
          in: query
          description: 'Add more information to results. Valid values (comma separated) are: referenceContact and expirationDays'
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDarwinRequest'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests/expiring/count:
    get:
      tags:
        - Darwin
      summary: Count Darwin expiring requests
      operationId: countDarwinExpiringRequests
      parameters:
        - name: days
          in: query
          description: Days to expiration
          required: true
          schema:
            format: int32
            default: '7'
            type: integer
          example: 10
        - name: referenceContactOrg
          in: query
          schema:
            description: Find by contact org (startsWith)
            type: string
        - name: referenceContactRegcode
          in: query
          schema:
            type: string
        - name: registrarAssignation
          in: query
          schema:
            $ref: '#/components/schemas/DarwinUserAssignation'
      responses:
        '200':
          description: Ritorna numero richieste in scadenza
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests/{requestId}:
    get:
      tags:
        - Darwin
      summary: Get Darwin request by id
      operationId: getDarwinRequestById
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
        - name: view
          in: query
          description: 'Add more information to result. Valid values (comma separated) are: referenceContact and expirationDays'
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Request not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests/{requestId}/anomalies:
    get:
      tags:
        - Darwin
      summary: Get Darwin request anomalies
      operationId: getDarwinAnomaliesByRequestId
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DarwinAnomaly'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Request not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests/{requestId}/assignToMe:
    post:
      tags:
        - Darwin
      summary: Assign a Darwin request to the authenticated user
      operationId: assignDarwinRequestToMe
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '204':
          description: OK
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '409':
          description: Request already assigned or request status not compatibile
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
  /v1/darwin/requests/{requestId}/assignToUser:
    post:
      tags:
        - Darwin
      summary: Assign the Darwin request to a user
      operationId: assignDarwinRequestToUser
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DarwinUserAssignationRequest'
      responses:
        '204':
          description: OK
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '409':
          description: Request status not compatible or request already assigned to the same user
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
  /v1/darwin/requests/{requestId}/assignationRelease:
    post:
      tags:
        - Darwin
      summary: Release Darwin request assignation
      operationId: releaseAssignationForDarwinRequest
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '204':
          description: OK
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '409':
          description: Request not assigned or request status not compatible
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
  /v1/darwin/requests/{requestId}/expirationDays:
    get:
      tags:
        - Darwin
      summary: Get the number of days to expiration for a Darwin request
      operationId: getDarwinExpirationDaysByRequestId
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Request not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests/{requestId}/process:
    post:
      tags:
        - Darwin
      summary: Process Darwin request
      operationId: processDarwinRequestByRequestId
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinRequest'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseLegacy'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Request not found
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
  /v1/darwin/requests/{requestId}/referenceContact:
    get:
      tags:
        - Darwin
      summary: Get chosen contact data for a Darwin request
      operationId: getDarwinReferenceContactByRequestId
      parameters:
        - name: requestId
          in: path
          description: Request Id
          required: true
          schema:
            format: int64
            type: integer
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DarwinReferenceContact'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Invalid Request
      security:
        - registrar_authentication: []
          SecurityScheme:
            - admin
            - domain
            - darwin
components:
  securitySchemes:
    registrar_authentication:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://auth.pubtest.nic.it/auth/realms/registrar/protocol/openid-connect/auth
          tokenUrl: https://auth.pubtest.nic.it/auth/realms/registrar/protocol/openid-connect/token
          scopes:
            security: security scope
            domain: domain scope
            darwin: darwin scope
            billing: billing scope
  schemas:
    Registrar:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        voiceCode:
          type: string
        status:
          type: string
          enum:
            - active
            - deleted
            - suspended
        statusDate:
          type: string
          format: date-time
        created:
          type: string
          format: date-time
        lastupdate:
          type: string
          format: date-time
    Customer:
      type: object
      properties:
        id:
          type: integer
          format: int64
        org:
          type: string
        type:
          type: string
          enum:
            - PRIVATE
            - PUBLIC
        rea:
          type: string
        splitPayment:
          type: boolean
        voice:
          type: string
        fax:
          type: string
        status:
          type: string
          enum:
            - active
            - deleted
            - suspended
        statusDate:
          type: string
          format: date-time
        accreditationDate:
          type: string
          format: date-time
        dnsSecAccreditationDate:
          type: string
          format: date-time
        created:
          type: string
          format: date-time
        lastupdate:
          type: string
          format: date-time
        vatNumber:
          type: string
        fiscalCode:
          type: string
        eInvoicingCode:
          type: string
        eInvoicingPec:
          type: string
          format: email
        address:
          $ref: '#/components/schemas/Address'
    CustomerEInvoicingRequest:
      type: object
      properties:
        eInvoicingCode:
          description: 7 characters code for italian private customers
          type: string
        eInvoicingPec:
          type: string
          format: email
    Contract:
      type: object
      properties:
        id:
          type: integer
          format: int64
        protNum:
          type: string
        protDate:
          type: string
          format: date
        admin:
          type: string
        adminCF:
          type: string
        pec:
          type: string
          format: email
        email:
          type: string
          format: email
        coc:
          type: boolean
        logo:
          type: boolean
        web:
          type: string
        expireDate:
          type: string
          format: date
        created:
          type: string
          format: date-time
        lastupdate:
          type: string
          format: date-time
    Address:
      required:
        - city
        - country
        - postalcode
        - state
        - street
      type: object
      properties:
        street:
          maxLength: 255
          minLength: 0
          type: string
        city:
          maxLength: 64
          minLength: 0
          type: string
        state:
          maxLength: 64
          minLength: 0
          type: string
        postalcode:
          maxLength: 16
          minLength: 0
          type: string
        country:
          maxLength: 2
          minLength: 2
          type: string
    RegistrarPublicInfoRequest:
      required:
        - address
        - eduLogo
        - email
        - govLogo
        - voice
        - web
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        voice:
          maxLength: 32
          minLength: 0
          type: string
        fax:
          maxLength: 32
          minLength: 0
          type: string
        email:
          maxLength: 64
          minLength: 0
          type: string
          format: email
        web:
          maxLength: 128
          minLength: 0
          type: string
        eduLogo:
          type: boolean
        govLogo:
          type: boolean
    RegistrarPublicInfo:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        voice:
          type: string
        fax:
          type: string
        email:
          type: string
          format: email
        web:
          type: string
        eduLogo:
          type: boolean
        govLogo:
          type: boolean
    HeadQuarter:
      required:
        - address
        - voice
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        voice:
          type: string
        fax:
          type: string
    EmailNotification:
      required:
        - email
        - type
      type: object
      properties:
        type:
          type: string
          enum:
            - billing
            - operations
        email:
          type: string
          format: email
    EmailsRegistrar:
      required:
        - emails
        - language
      type: object
      properties:
        language:
          type: string
          enum:
            - it
            - en
        emails:
          type: array
          items:
            $ref: '#/components/schemas/EmailNotification'
    RegistrarContactPhone:
      required:
        - number
        - type
      type: object
      properties:
        number:
          type: string
          example: '+39.05012345678'
        type:
          type: string
          enum:
            - phone
            - fax
            - mobile
    RegistrarContactRequest:
      required:
        - email
        - mailinglistReg2reg
        - name
        - phones
        - type
      type: object
      properties:
        type:
          type: string
          enum:
            - admin
            - billing
            - tech
        name:
          type: string
        org:
          type: string
        address:
          $ref: '#/components/schemas/Address'
        phones:
          maxItems: 4
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/RegistrarContactPhone'
        email:
          type: string
        mailinglistReg2reg:
          type: boolean
    RegistrarContact:
      type: object
      properties:
        id:
          type: integer
          format: int64
        type:
          type: string
          enum:
            - admin
            - billing
            - tech
        name:
          type: string
          example: Giulio Cesare
        org:
          type: string
          example: Registro .it
        address:
          $ref: '#/components/schemas/Address'
        phones:
          type: array
          items:
            $ref: '#/components/schemas/RegistrarContactPhone'
        email:
          type: string
          example: hostmaster@nic.it
        mailinglistReg2reg:
          type: boolean
        created:
          type: string
          format: date-time
        lastupdate:
          type: string
          format: date-time
    GDPRTemplate:
      required:
        - baseGiuridica
        - categorie
        - finalita
        - modalita
        - terminiCancellazione
      type: object
      properties:
        categorie:
          type: string
        baseGiuridica:
          type: string
        finalita:
          type: string
        terminiCancellazione:
          type: string
        modalita:
          type: string
    GDPRRequest:
      required:
        - language
        - sicurezza
      type: object
      properties:
        language:
          type: string
          enum:
            - it
            - en
        rpdNome:
          maxLength: 64
          minLength: 2
          type: string
        rpdEmail:
          maxLength: 128
          minLength: 5
          type: string
          format: email
        categorieAltro:
          maxLength: 2147483647
          minLength: 2
          type: string
        sicurezza:
          type: string
        modalitaAltro:
          maxLength: 2147483647
          minLength: 2
          type: string
    GDPRData:
      type: object
      properties:
        language:
          type: string
          enum:
            - it
            - en
        rpdNome:
          type: string
        rpdEmail:
          type: string
          format: email
        categorie:
          type: string
        categorieAltro:
          type: string
        baseGiuridica:
          type: string
        finalita:
          type: string
        sicurezza:
          type: string
        terminiCancellazione:
          type: string
        modalita:
          type: string
        modalitaAltro:
          type: string
        created:
          type: string
          format: date-time
        lastupdate:
          type: string
          format: date-time
    PageInfo:
      type: object
      required:
        - number
        - size
      properties:
        number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        totalElements:
          type: integer
          format: int64
        totalPages:
          type: integer
          format: int64
    PagedRegistrarEvent:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/RegistrarEvent'
        page:
          $ref: '#/components/schemas/PageInfo'
    RegistrarEventReference:
      required:
        - id
        - type
      type: object
      properties:
        type:
          type: string
        id:
          type: string
    RegistrarEvent:
      type: object
      properties:
        type:
          type: string
          enum:
            - registrarStatusChangeToActive
            - registrarStatusChangeToSuspended
            - registrarStatusChangeToDeleted
            - paymentSubmitted
            - paymentApproved
            - paymentRejected
            - registrarPasswordChange
            - creditStatusChangeToNormal
            - creditStatusChangeToLow
            - creditStatusChangeToOutOfFunds
            - newInvoice
            - registrarTransfer
            - registrarRename
            - penalty
        description:
          type: string
        reference:
          $ref: '#/components/schemas/RegistrarEventReference'
        created:
          type: string
          format: date-time
    Credit:
      type: object
      properties:
        credit:
          type: number
        threshold:
          type: number
        lastupdate:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - normalBalance
            - lowCredit
            - outOfFunds
    CreditUntilDate:
      type: object
      properties:
        credit:
          type: number
    CreditWarnThreshold:
      required:
        - threshold
      type: object
      properties:
        threshold:
          minimum: 0
          type: number
    BankPaymentCreate:
      required:
        - amount
        - bankPayment
      type: object
      properties:
        amount:
          type: number
          example: 200
        bankPayment:
          $ref: '#/components/schemas/BankPaymentInfo'
    BankPaymentInfo:
      required:
        - applicant
        - applicantRole
        - bankName
        - branchName
        - european
        - paymentDate
        - transactionId
        - valueDate
      type: object
      properties:
        european:
          type: boolean
          example: true
        applicant:
          type: string
          example: Giulio Cesare
        applicantRole:
          type: string
          example: admin
          enum:
            - admin
            - deputy
        bankName:
          type: string
          example: Una Banca
        branchName:
          type: string
          example: Online
        paymentDate:
          type: string
          format: date
          example: '2024-05-06'
        valueDate:
          type: string
          format: date
          example: '2024-05-07'
        transactionId:
          type: string
          example: '123456'
    CreditCardPaymentInfo:
      required:
        - service
        - transactionId
      type: object
      properties:
        transactionId:
          type: string
        service:
          type: string
          enum:
            - bnlPositivity
            - phey
      description: Credit card payment information, available only if payment type is 'creditCard'
    ContractTransferPaymentInfo:
      type: object
      properties:
        sourceRegistrar:
          type: string
        sourceCustomerOrg:
          type: string
      description: Contract transfer payment information, available only if payment type is 'contractTransfer'
    Payment:
      type: object
      properties:
        id:
          type: integer
          description: Payment id
          format: int64
        amount:
          type: number
          description: Payment total amount
        debitedAmount:
          type: number
          description: Debited amount, only if 'approved'
        previousResidual:
          type: number
          description: Previous payment residual, only if 'approved'
        finalResidual:
          type: number
          description: Final payment residual, available only if the payment is exhausted
        type:
          type: string
          enum:
            - bank
            - creditCard
            - registry
            - contractTransfer
        status:
          type: string
          enum:
            - submitted
            - approved
            - suspended
            - rejected
        statusDate:
          type: string
          format: date-time
        lastupdate:
          type: string
          format: date-time
        created:
          type: string
          format: date-time
        bankPayment:
          $ref: '#/components/schemas/BankPaymentInfo'
        creditCardTransaction:
          $ref: '#/components/schemas/CreditCardPaymentInfo'
        contractTransferPayment:
          $ref: '#/components/schemas/ContractTransferPaymentInfo'
    PaymentReport:
      type: object
      properties:
        amount:
          type: number
        previousResidual:
          type: number
        finalResidual:
          type: number
        stampDuty:
          type: number
        domainsOperations:
          type: array
          items:
            $ref: '#/components/schemas/PaymentReportDomainOperation'
        bulkTransfersOperations:
          type: array
          items:
            $ref: '#/components/schemas/PaymentReportBulkTransferOperation'
        penaltiesOperations:
          type: array
          items:
            $ref: '#/components/schemas/PaymentReportPenaltyOperation'
        lastupdate:
          type: string
          format: date-time
    PaymentReportBulkTransferOperation:
      type: object
      properties:
        bulkTransferId:
          type: integer
          format: int64
        amount:
          type: number
    PaymentReportDomainOperation:
      type: object
      properties:
        operation:
          type: string
        quantity:
          type: integer
          format: int32
        operationCost:
          type: number
        amount:
          type: number
    PaymentReportPenaltyOperation:
      type: object
      properties:
        penaltyId:
          type: integer
          format: int64
        amount:
          type: number
    Invoice:
      type: object
      properties:
        id:
          type: integer
          format: int64
        fiscalYear:
          type: integer
          format: int32
        invoiceNumber:
          type: integer
          format: int64
        totalAmount:
          type: number
        taxAmount:
          type: number
        taxRate:
          type: string
        invoiceDate:
          type: string
          format: date
    PagedPayment:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/Payment'
        page:
          $ref: '#/components/schemas/PageInfo'
    PagedInvoice:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/Invoice'
        page:
          $ref: '#/components/schemas/PageInfo'
    CreditCardTransactionRequest:
      required:
        - amount
        - language
        - redirectFailureUrl
        - redirectSuccessUrl
      type: object
      properties:
        language:
          type: string
          enum:
            - it
            - en
        amount:
          minimum: 0
          exclusiveMinimum: true
          type: number
        redirectSuccessUrl:
          type: string
        redirectFailureUrl:
          type: string
    CreditCardInfo:
      type: object
      properties:
        brand:
          type: string
        number:
          type: string
        expire:
          type: string
        name:
          type: string
    CreditCardTransaction:
      type: object
      properties:
        id:
          type: string
        gatewayId:
          type: string
        amount:
          type: string
        language:
          type: string
        status:
          type: string
        paymentId:
          type: integer
          format: int64
        response:
          $ref: '#/components/schemas/CreditCardTransactionResponse'
        created:
          type: string
          format: date-time
    CreditCardTransactionResponse:
      type: object
      properties:
        description:
          type: string
        transactionDate:
          type: string
          format: date-time
        creditCard:
          $ref: '#/components/schemas/CreditCardInfo'
    UserCreate:
      type: object
      properties:
        username:
          type: string
        name:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        password:
          type: string
    User:
      type: object
      properties:
        id:
          type: integer
          format: int64
        username:
          type: string
        name:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        created:
          type: string
          format: date-time
        lastupdate:
          type: string
          format: date-time
        lastPasswordChange:
          type: string
          format: date-time
    IpAddressCreate:
      required:
        - ipAddress
        - service
        - userId
      type: object
      properties:
        ipAddress:
          type: string
          format: ipv4
        service:
          type: string
          enum:
            - epp-server
            - das
        userId:
          type: integer
          format: int64
    IpAddressUserRegistrar:
      type: object
      properties:
        id:
          type: integer
          format: int64
        userId:
          type: integer
          format: int64
        ipAddress:
          type: string
        ipVersion:
          type: string
          enum:
            - IPv4
            - IPv6
        created:
          type: string
          format: date-time
    PagedResourcesRegistrarUser:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/User'
        page:
          $ref: '#/components/schemas/PageInfo'
    PasswordSettings:
      type: object
      properties:
        minLength:
          maximum: 40
          minimum: 1
          type: integer
          format: int32
        maxLength:
          maximum: 40
          minimum: 1
          type: integer
          format: int32
        upperCaseCharacters:
          minimum: 0
          type: integer
          format: int32
        lowerCaseCharacters:
          minimum: 0
          type: integer
          format: int32
        digits:
          minimum: 0
          type: integer
          format: int32
        specialCharacters:
          minimum: 0
          type: integer
          format: int32
        whiteSpaces:
          type: boolean
        notEqualsLastPassword:
          type: boolean
    ClientRequest:
      type: object
      properties:
        userId:
          type: integer
          format: int64
        expire:
          type: string
          format: date
        roles:
          type: array
          items:
            type: string
          maxItems: 20
          minItems: 0
          uniqueItems: true
      required:
        - userId
        - expire
        - roles
    Client:
      type: object
      properties:
        clientId:
          type: string
        roles:
          type: array
          items:
            type: string
          uniqueItems: true
        userId:
          type: integer
          format: int64
        status:
          type: string
          enum:
            - active
            - pending
            - deleting
        expire:
          type: string
          format: date-time
        keystoreGenerated:
          type: string
          format: date-time
        created:
          type: string
          format: date-time
    ClientKeystoreGenerationRequest:
      type: object
      properties:
        storePassword:
          type: string
          maxLength: 32
          minLength: 8
      required:
        - storePassword
    DarwinContactAction:
      enum:
        - todo
        - hold
        - delete
      type: string
    DarwinAnomaly:
      required:
        - field
        - codes
      type: object
      properties:
        field:
          maxLength: 64
          minLength: 1
          type: string
        contacts:
          uniqueItems: true
          type: array
          items:
            type: string
        codes:
          minItems: 1
          uniqueItems: true
          type: array
          items:
            type: integer
    DarwinUserAssignation:
      enum:
        - all
        - assigned
        - unassigned
        - assignedToMe
      type: string
    DarwinContact:
      type: object
      properties:
        id:
          format: int64
          description: Darwin contact id
          type: integer
        dbnaId:
          format: int64
          description: DBNA contact id
          type: integer
        requestId:
          format: int64
          type: integer
        registrarContactId:
          description: Contact id assigned by the Registrar
          type: string
        action:
          type: string
          allOf:
            - $ref: '#/components/schemas/DarwinContactAction'
        status:
          type: string
          allOf:
            - $ref: '#/components/schemas/DarwinContactStatus'
        reference:
          description: True if the contact is the reference contact
          type: boolean
    DarwinContactActionUpdate:
      type: object
      properties:
        action:
          $ref: '#/components/schemas/DarwinContactAction'
    DarwinContactStatus:
      enum:
        - submitted
        - rejected
        - locked
        - processed
      type: string
    DarwinContactUpdate:
      required:
        - id
        - requestId
        - contactData
        - created
      type: object
      properties:
        id:
          format: int64
          type: integer
          readOnly: true
        requestId:
          format: int64
          type: integer
        message:
          description: Optional message
          type: string
        contactData:
          type: object
          allOf:
            - $ref: '#/components/schemas/DarwinContactUpdateData'
        created:
          type: string
          format: date-time
          example: '2022-03-10T12:15:50+01:00'
          readOnly: true
    DarwinContactUpdateData:
      required:
        - name
        - org
        - streets
        - city
        - state
        - postalCode
        - voice
        - email
        - registrant
      type: object
      properties:
        name:
          type: string
        org:
          type: string
        streets:
          maxItems: 3
          minItems: 1
          type: array
          items:
            type: string
        city:
          type: string
        state:
          type: string
        postalCode:
          type: string
        country:
          description: Non può essere modificato dal Registrar
          type: string
        voice:
          type: string
        fax:
          type: string
        email:
          type: string
          format: email
        consentForPublish:
          type: boolean
        registrant:
          $ref: '#/components/schemas/DarwinContactUpdateRegistrantData'
    DarwinContactUpdateRegistrantData:
      required:
        - regcode
      type: object
      properties:
        regcode:
          type: string
        nationality:
          type: string
          readOnly: true
        entityType:
          type: integer
          minimum: 1
          maximum: 7
          readOnly: true
    DarwinDocument:
      type: object
      properties:
        id:
          type: string
        requestId:
          format: int64
          type: integer
        fileName:
          type: string
        fileSize:
          format: int64
          type: integer
        documentType:
          type: string
          allOf:
            - $ref: '#/components/schemas/DarwinDocumentType'
        fileType:
          type: string
          allOf:
            - $ref: '#/components/schemas/DarwinFileType'
        note:
          type: string
        created:
          type: string
          format: date-time
          example: '2022-03-10T12:15:50+01:00'
    DarwinDocumentType:
      description: Tipologie di documento
      enum:
        - IC
        - PASS
        - FC
        - CHAMBER
        - DEED
        - CERT
        - OTHER
      type: string
    DarwinDomain:
      type: object
      properties:
        id:
          format: int64
          description: Darwin domain id
          type: integer
        dbnaId:
          format: int64
          description: DBNA domain id
          type: integer
        domain:
          type: string
        registrarContactId:
          type: string
        requestId:
          format: int64
          type: integer
        contactId:
          format: int64
          description: Darwin contactId for the domain registrant
          type: integer
        status:
          type: string
          allOf:
            - $ref: '#/components/schemas/DarwinDomainStatus'
    DarwinDomainStatus:
      description: Stati possibili dei domini
      enum:
        - locked
        - incompatible
        - rejected
        - processed
      type: string
    DarwinEventType:
      enum:
        - submitted
        - rejected
        - toPending
        - registrarUpdated
        - registrarUpdateRejected
        - registrarUpdateApproved
        - toProcessing
        - expired
        - completed
        - expiredCompleted
        - updatedRequiredDocuments
        - cancelled
        - cancelledCompleted
        - registryUpdated
        - registrarUserAssignation
        - registrarUserRelease
        - registryUserAssignation
        - registryUserRelease
      type: string
    DarwinFileType:
      enum:
        - pdf
        - jpg
      type: string
    PagedDarwinContact:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/DarwinContact'
        page:
          $ref: '#/components/schemas/PageInfo'
    PagedDarwinDocument:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/DarwinDocument'
        page:
          $ref: '#/components/schemas/PageInfo'
    PagedDarwinDomain:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/DarwinDomain'
        page:
          $ref: '#/components/schemas/PageInfo'
    PagedDarwinEvent:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/DarwinEvent'
        page:
          $ref: '#/components/schemas/PageInfo'
    PagedDarwinRequest:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/DarwinRequest'
        page:
          $ref: '#/components/schemas/PageInfo'
    DarwinReferenceContact:
      description: Chosen contact data
      required:
        - registrarContactId
      type: object
      properties:
        contactId:
          format: int64
          description: Darwin contact id
          type: integer
        requestId:
          format: int64
          type: integer
          example: 1
        registrarContactId:
          description: DBNA contact id assigned by the Registrar
          type: string
          example: CCTL2
        dbnaId:
          format: int64
          description: DBNA numeric contact id
          type: integer
          example: 1020304
        org:
          type: string
          example: Registro .it
        regcode:
          type: string
          example: '001122334455'
    DarwinEvent:
      type: object
      properties:
        requestId:
          format: int64
          type: integer
        type:
          $ref: '#/components/schemas/DarwinEventType'
        user:
          type: string
        message:
          type: string
        created:
          type: string
          format: date-time
          example: '2022-03-10T12:15:50+01:00'
    DarwinRequest:
      required:
        - id
        - registrarId
        - status
        - statusDate
      type: object
      properties:
        id:
          format: int64
          type: integer
        registrarId:
          format: int64
          type: integer
        status:
          type: string
          allOf:
            - $ref: '#/components/schemas/DarwinRequestStatus'
        statusDate:
          type: string
          format: date-time
          example: '2022-03-10T12:15:50+01:00'
        note:
          type: string
        referenceContact:
          type: object
          allOf:
            - $ref: '#/components/schemas/DarwinReferenceContact'
        requiredDocuments:
          type: object
          allOf:
            - $ref: '#/components/schemas/DarwinRequiredDocument'
        created:
          type: string
          format: date-time
          example: '2022-03-10T12:15:50+01:00'
        registrarUser:
          type: object
          allOf:
            - $ref: '#/components/schemas/DarwinUser'
        expirationDays:
          format: int64
          type: integer
    DarwinRequestStatus:
      enum:
        - submitted
        - pending
        - rejected
        - registrarUpdated
        - processing
        - processingExpired
        - expired
        - completed
        - processingCancelled
        - cancelled
      type: string
    DarwinRequiredDocument:
      type: object
      properties:
        documents:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/DarwinDocumentType'
        other:
          type: string
    DarwinUser:
      required:
        - username
      type: object
      properties:
        id:
          format: int64
          type: integer
        username:
          description: Username
          type: string
        name:
          type: string
    DarwinUserAssignationRequest:
      required:
        - userId
      type: object
      properties:
        userId:
          format: int64
          type: integer
    Contact:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 1234
        name:
          type: string
          example: Giulio Cesare
        org:
          type: string
          example: Registro .it
        contactId:
          type: string
          example: GC0001
        consentForPublish:
          type: boolean
          example: true
        created:
          type: string
          format: date-time
          example: '2023-05-06T13:14:10+02:00'
        lastupdate:
          type: string
          format: date-time
          example: '2024-04-16T11:24:20+02:00'
        email:
          type: string
          format: email
          example: test@nic.it
        voice:
          type: string
          example: '+39.0503151111'
        fax:
          type: string
        streets:
          type: array
          items:
            type: string
            example: Via G. Moruzzi 1
        city:
          type: string
          example: Pisa
        postalCode:
          type: string
          example: '56124'
        state:
          type: string
          example: PI
        country:
          type: string
          example: it
        registrant:
          $ref: '#/components/schemas/RegistrantData'
        status:
          type: string
          example: ok / linked
        linked:
          type: boolean
          example: true
    RegistrantData:
      type: object
      properties:
        regcode:
          type: string
          example: '001122334455'
        schoolCode:
          type: string
        nationality:
          type: string
          example: it
        entityType:
          type: integer
          format: int32
          minimum: 1
          maximum: 7
          example: 2
        gov:
          $ref: '#/components/schemas/GovInfo'
    Domain:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 1234
        domain:
          type: string
          example: nic.it
        domainIDN:
          type: string
        status:
          type: string
          example: ok / autoRenewPeriod
        signed:
          type: boolean
          example: true
        registrantId:
          type: integer
          format: int64
          example: 12345
        adminId:
          type: integer
          format: int64
          example: 123456
        created:
          type: string
          format: date-time
          example: '2024-04-16T11:24:20+02:00'
        lastupdate:
          type: string
          format: date-time
          example: '2024-04-16T11:24:20+02:00'
        expire:
          type: string
          format: date-time
          example: '2025-04-16T23:59:59+02:00'
        registered:
          type: boolean
          example: true
        registrant:
          $ref: '#/components/schemas/Contact'
        admin:
          $ref: '#/components/schemas/Contact'
        techs:
          type: array
          items:
            $ref: '#/components/schemas/Contact'
        hosts:
          type: array
          items:
            $ref: '#/components/schemas/Host'
        newHosts:
          type: array
          items:
            $ref: '#/components/schemas/Host'
        dsRecords:
          type: array
          items:
            $ref: '#/components/schemas/DSRecord'
        newDsRecords:
          type: array
          items:
            $ref: '#/components/schemas/DSRecord'
    PagedDomainEvent:
      $ref: '#/components/schemas/PagedDomainEvents'
    DomainEvent:
      type: object
      properties:
        type:
          type: string
          enum:
            - epp
            - registry
        status:
          type: string
          enum:
            - succeeded
            - failed
          example: succeeded
        created:
          type: string
          format: date-time
          example: '2024-04-16T11:24:20+02:00'
        epp:
          $ref: '#/components/schemas/EPPCommand'
        name:
          type: string
    EppDTO:
      $ref: '#/components/schemas/EPPCommand'
    EPPRequest:
      type: object
      properties:
        created:
          type: string
          format: date-time
        command:
          type: string
        clientTrId:
          type: string
    EPPResponse:
      type: object
      properties:
        created:
          type: string
          format: date-time
        code:
          type: integer
          format: int32
        codeName:
          type: string
        serverTrId:
          type: string
        reason:
          type: integer
          format: int32
        reasonName:
          type: string
        reasonMessage:
          type: string
    DSRecord:
      type: object
      properties:
        keytag:
          type: integer
          format: int32
          example: 12340
        algorithm:
          type: integer
          format: int32
          example: 10
        digestType:
          type: integer
          format: int32
          example: 2
        digest:
          type: string
          example: 125ABCD123459287ABC
    GovInfo:
      type: object
      properties:
        ipaCode:
          maxLength: 32
          minLength: 0
          type: string
        uoCode:
          maxLength: 16
          minLength: 0
          type: string
    Host:
      type: object
      properties:
        name:
          type: string
          example: dns.nic.it
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/IpAddress'
    IpAddress:
      type: object
      properties:
        address:
          type: string
          example: 192.12.192.5
        type:
          type: string
          example: v4
          enum:
            - v4
            - v6
    IDNConversion:
      type: object
      properties:
        domain:
          type: string
        domainIDN:
          type: string
    PagedDomain:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/Domain'
        page:
          $ref: '#/components/schemas/PageInfo'
    PagedContact:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/Contact'
        page:
          $ref: '#/components/schemas/PageInfo'
    BulkTransfer:
      type: object
      properties:
        id:
          type: integer
          format: int64
        source:
          $ref: '#/components/schemas/BulkTransferRegistrar'
        destination:
          $ref: '#/components/schemas/BulkTransferRegistrar'
        status:
          type: string
          enum:
            - APPROVED
            - CANCELLED
            - COMPLETED
            - DOC_OK
            - DOC_WAITING
            - EXPIRED
            - EXPIRING
            - REJECTED
            - SUBMITTED
            - VERIFIED
        approvalDate:
          type: string
          format: date-time
        created:
          type: string
          format: date-time
        lastupdate:
          type: string
          format: date-time
    BulkTransferRegistrar:
      type: object
      properties:
        applicant:
          type: string
        applicantCF:
          type: string
        admin:
          type: string
        registrar:
          type: string
    BulkTransferCreate:
      required:
        - destination
        - domains
        - source
      type: object
      properties:
        source:
          $ref: '#/components/schemas/BulkTransferCreateSourceRegistrar'
        destination:
          $ref: '#/components/schemas/BulkTransferCreateDestinationRegistrar'
        domains:
          uniqueItems: true
          type: array
          items:
            type: string
    BulkTransferCreateSourceRegistrar:
      type: object
      required:
        - applicant
        - applicantCF
      properties:
        applicant:
          type: string
        applicantCF:
          type: string
        admin:
          type: string
    BulkTransferCreateDestinationRegistrar:
      type: object
      required:
        - registrar
      properties:
        registrar:
          type: string
    BulkTransferApprove:
      required:
        - applicant
        - applicantCF
      type: object
      properties:
        applicant:
          type: string
        applicantCF:
          type: string
        admin:
          type: string
    PagedBulkTransfer:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/BulkTransfer'
        page:
          $ref: '#/components/schemas/PageInfo'
    BulkTransferEvent:
      type: object
      properties:
        type:
          type: string
          enum:
            - submitted
            - document_not_ok
            - rejected
            - approved
            - cancelled
            - completed
            - expiring
            - expired
            - verified
            - credit_refunded
            - document_ok
        description:
          type: string
        created:
          type: string
          format: date-time
    PagedBulkTransferEvent:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/BulkTransferEvent'
        page:
          $ref: '#/components/schemas/PageInfo'
    BulkTransferDomain:
      type: object
      properties:
        id:
          type: integer
          format: int64
        domain:
          type: string
        domainIDN:
          type: string
        status:
          type: string
          enum:
            - APPROVED
            - EXPIRED
            - FAILED
            - REJECTED
            - SUBMITTED
            - TRANSFERRED
            - VERIFIED
    PagedBulkTransferDomain:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/BulkTransferDomain'
        page:
          $ref: '#/components/schemas/PageInfo'
    BulkTransferPdfDocumentData:
      type: object
      properties:
        source:
          $ref: '#/components/schemas/BulkTransferPdfDocumentRegistrar'
        destination:
          $ref: '#/components/schemas/BulkTransferPdfDocumentRegistrar'
    BulkTransferPdfDocumentRegistrar:
      type: object
      properties:
        applicant:
          type: string
        applicantCF:
          type: string
        admin:
          type: string
        registrar:
          type: string
        org:
          type: string
        regcode:
          type: string
        address:
          $ref: '#/components/schemas/Address'
      required:
        - registrar
        - org
        - applicant
        - applicantCF
        - address
    CountResponse:
      type: object
      properties:
        count:
          format: int64
          type: integer
    ErrorResponseLegacy:
      description: Legacy error response with numeric code
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        errors:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/WrongValueLegacy'
    WrongValueLegacy:
      description: Legacy wrong value response with numeric code
      type: object
      properties:
        field:
          type: string
        value:
          type: object
        message:
          type: string
        code:
          type: integer
          format: int32
    ErrorResponse:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
        errors:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/WrongValue'
    WrongValue:
      type: object
      properties:
        field:
          type: string
        value:
          type: object
        message:
          type: string
        code:
          type: string
    EPPCommand:
      type: object
      properties:
        request:
          $ref: '#/components/schemas/EPPRequest'
        response:
          $ref: '#/components/schemas/EPPResponse'
    PagedDomainEvents:
      type: object
      properties:
        elements:
          type: array
          items:
            $ref: '#/components/schemas/DomainEvent'
        page:
          $ref: '#/components/schemas/PageInfo'
