info:
  version: v1
  title: Ethiack API
  termsOfService: https://ethiack.com/terms
  contact:
    name: Support
    email: support@ethiack.com
servers:
- url: https://api.ethiack.com
  description: Ethiack API production server
paths:
  /v1/:
    get:
      summary: API version
      description: Retrieves the current API version.
      tags:
      - General
      responses:
        '200':
          description: Details about the current API version.
          content:
            application/json:
              schema:
                type: object
                properties:
                  version:
                    type: string
  /v1/me:
    get:
      summary: Current User information
      description: Fetches the information of the currently authenticated user.
      tags:
      - General
      security:
      - http: []
      responses:
        '200':
          description: The user's information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
  /v1/assets/:
    get:
      summary: List Assets
      description: Retrieves a list of assets based on filter criteria.
      tags:
      - Assets
      security:
      - http: []
      parameters:
      - in: query
        name: asset_id
        description: Filter assets by its unique identified (ID)
        schema:
          type: integer
      - in: query
        name: organization_id
        description: Filter assets by the associated Organization's unique identifier
          (ID)
        schema:
          type: integer
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of assets per page
        schema:
          type: integer
      responses:
        '200':
          description: Assets list
          content:
            application/json:
              schema: &id012
                $ref: '#/components/schemas/AssetList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: &id001
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
    post:
      summary: Add Asset
      description: Adds a new asset with the provided asset details.
      tags:
      - Assets
      security:
      - http: []
      requestBody:
        description: Asset data required to create a new asset
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddAsset'
      responses:
        '201':
          description: Successfully added the asset
          content:
            application/json:
              schema: &id002
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          description: Bad request due to invalid input data or missing organization
            ID
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '409':
          description: Conflict - Asset already exists
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to create the asset
          content:
            application/json:
              schema: *id001
  /v1/assets/{asset_id}:
    get:
      summary: Get Asset
      description: Fetches a detailed view of a single asset by its unique identifier.
      tags:
      - Assets
      security:
      - http: []
      parameters:
      - in: path
        name: asset_id
        schema:
          type: integer
        required: true
        description: Unique identifier (ID) of the asset
      responses:
        '200':
          description: The requested asset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetDetails'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found -Asset not found
          content:
            application/json:
              schema: *id001
    patch:
      summary: Update Asset
      description: Updates an asset with the provided asset details.
      tags:
      - Assets
      security:
      - http: []
      parameters:
      - in: path
        name: asset_id
        schema:
          type: integer
        required: true
        description: Unique identifier of the asset to be updated
      requestBody:
        description: Asset data to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAsset'
      responses:
        '200':
          description: Asset updated successfully
          content:
            application/json:
              schema: *id002
        '400':
          description: Bad request due to invalid input data
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to update the asset
          content:
            application/json:
              schema: *id001
    delete:
      summary: Delete Asset
      description: Deletes an asset by its unique identifier.
      tags:
      - Assets
      security:
      - http: []
      parameters:
      - in: path
        name: asset_id
        schema:
          type: integer
        required: true
        description: Unique identifier of the asset to be deleted
      responses:
        '200':
          description: Asset deleted successfully.
          content:
            application/json:
              schema: *id002
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Asset not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to delete asset
          content:
            application/json:
              schema: *id001
  /v1/domains/:
    get:
      summary: List Domains
      description: Fetches a list of user-accessible domains with support for filtering.
      tags:
      - Domains
      security:
      - http: []
      parameters:
      - in: query
        name: domain_id
        description: Filter domains by their unique identifier
        schema:
          type: integer
      - in: query
        name: value
        description: Filter domains by their value
        schema:
          type: string
      - in: query
        name: organization_id
        description: Filter domains by organization ID
        schema:
          type: integer
      - in: query
        name: verified
        description: Filter domains by verification status
        schema:
          type: boolean
      - in: query
        name: page
        schema:
          type: integer
        description: Page number
      - in: query
        name: per_page
        description: Number of domains per page
        schema:
          type: integer
      responses:
        '200':
          description: A list of user-accessible domains matching the filter criteria
          content:
            application/json:
              schema: &id008
                $ref: '#/components/schemas/DomainList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
    post:
      summary: Add Domain
      description: Adds a new domain with the provided value and organization ID.
      tags:
      - Domains
      security:
      - http: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddDomain'
      responses:
        '201':
          description: Domain added successfully
          content:
            application/json:
              schema: *id002
        '400':
          description: Bad Request - Invalid input data
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Associated resource not found
          content:
            application/json:
              schema: *id001
        '409':
          description: Conflict - Domain already exists
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to create domain
          content:
            application/json:
              schema: *id001
  /v1/domains/{domain_id}/:
    get:
      summary: Get Domain
      description: Fetches a detailed view of a domain by its unique identifier.
      tags:
      - Domains
      security:
      - http: []
      parameters:
      - in: path
        name: domain_id
        required: true
        schema:
          type: integer
        description: Unique identifier of the domain to be retrieved
      responses:
        '200':
          description: A detailed view of the requested domain
          content:
            application/json:
              schema: &id009
                $ref: '#/components/schemas/Domain'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Domain not found
          content:
            application/json:
              schema: *id001
  /v1/domains/{domain_id}:
    delete:
      summary: Delete Domain
      description: Deletes a domain by its unique identifier.
      tags:
      - Domains
      security:
      - http: []
      parameters:
      - in: path
        name: domain_id
        required: true
        schema:
          type: integer
        description: Unique identifier of the domain to be deleted
      responses:
        '200':
          description: Domain deleted successfully
          content:
            application/json:
              schema: *id002
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Domain not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to delete domain
          content:
            application/json:
              schema: *id001
  /v1/domains/{domain_id}/verify:
    post:
      summary: Verify Domain ownership
      description: Verifies domain ownership through DNS TXT record validation.
      tags:
      - Domains
      security:
      - http: []
      parameters:
      - in: path
        name: domain_id
        required: true
        schema:
          type: integer
        description: Unique identifier of the domain to be verified.
      responses:
        '200':
          description: Domain verification successful
          content:
            application/json:
              schema: *id002
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Domain not found
          content:
            application/json:
              schema: *id001
        '422':
          description: Unprocessable Entity - Verification failed
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to verify domain
          content:
            application/json:
              schema: *id001
  /v1/events/:
    get:
      summary: List Events
      description: Fetches a list of events based on filter criteria, such as running
        status and organization ID
      tags:
      - Events
      security:
      - http: []
      parameters:
      - in: query
        name: running
        description: Filter events by their running status
        schema:
          type: boolean
      - in: query
        name: organization_id
        description: Filter events by organization ID
        schema:
          type: integer
      - in: query
        name: finished
        description: Filter events by their finished status
        schema:
          type: boolean
      - in: query
        name: page
        schema:
          type: integer
        description: Page number
      - in: query
        name: per_page
        description: Number of events per page
        schema:
          type: integer
      responses:
        '200':
          description: Event list
          content:
            application/json:
              schema: &id010
                $ref: '#/components/schemas/EventList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
    post:
      summary: Create machine Event
      description: 'Create a new machine event with the provided event details.

        > **Note:**  This operation can only be performed by integrators.

        '
      tags:
      - Events
      security:
      - http: []
      requestBody:
        description: Event data required to create a new machine event
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateIntegratorMachineEvent'
      responses:
        '201':
          description: Event created
          content:
            application/json:
              schema: *id002
        '400':
          description: Bad request - Invalid request parameters or logic preventing
            the event from being created
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Associated resource not found
          content:
            application/json:
              schema: *id001
        '409':
          description: Conflict - Organization already has a machine event in running
            or draft status.
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to create the event
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/:
    get:
      summary: Get Event
      description: Fetches detailed information about an event based on its unique
        slug
      tags:
      - Events
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event to retrieve
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Detailed information about the event
          content:
            application/json:
              schema: &id011
                $ref: '#/components/schemas/Event'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Event not found
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/start:
    post:
      summary: Start Event
      description: Initiates an event based on its slug. This operation can only be
        performed by authorized user types and requires the event to be in a startable
        state.
      tags:
      - Events
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event to start
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The event was successfully started
          content:
            application/json:
              schema: *id002
        '400':
          description: Bad request - Invalid request parameters or logic preventing
            the event from starting
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Event not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to start the event
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/stop:
    post:
      summary: Stop Event
      description: Stops an ongoing event based on its slug. This operation can only
        be performed by authorized user types and requires the event to be in a stoppable
        state.
      tags:
      - Events
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event to stop.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The event was successfully stopped
          content:
            application/json:
              schema: *id002
        '400':
          description: Bad request - Invalid request parameters or logic preventing
            the event from stopping
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Event not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to start the event
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/findings/:
    get:
      summary: List Event Findings
      description: Fetches a list of findings related to an event identified by its
        slug.
      tags:
      - Event Findings
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event for which findings are to be retrieved
        required: true
        schema:
          type: string
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of findings per page
        schema:
          type: integer
      responses:
        '200':
          description: A list of findings associated with the event
          content:
            application/json:
              schema: &id004
                $ref: '#/components/schemas/FindingList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
    post:
      summary: Submit Event Finding
      description: Allows hackers to submit findings. If successful, returns the ID
        of the created finding.
      tags:
      - Event Findings
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event for which the finding is being submitted
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FindingSubmissionSchema'
      responses:
        '200':
          description: Finding submitted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FindingSubmissionResultSchema'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Event finding not found
          content:
            application/json:
              schema: *id001
        '406':
          description: Not Acceptable - Invalid values provided
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to submit an event finding
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/findings/{finding_id}:
    get:
      summary: Get Event Finding
      description: Fetches detailed information about a specific finding related to
        an event, identified by the event's slug and the finding's unique identifier.
      tags:
      - Event Findings
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event associated with the finding
        required: true
        schema:
          type: string
      - in: path
        name: finding_id
        description: The unique identifier of the finding to retrieve
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Detailed information about the specific finding
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Finding'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested event finding or an associated resource
            was not found
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/findings/{finding_id}/retest/:
    get:
      summary: Get Retest Information
      description: 'Retrieves the status of retest job of a specific finding.

        > **Info**: Retesting is used to update the status of a finding, enabling
        the

        > user to check if the finding is still valid or has been resolved.

        '
      tags:
      - Event Findings
      security:
      - http: []
      parameters:
      - in: path
        name: finding_id
        required: true
        description: The ID of the finding to retrieve retest information for
        schema:
          type: integer
      - in: path
        name: event_slug
        required: true
        description: The slug of the event
        schema:
          type: string
      responses:
        '200':
          description: 'The retrieved retest information, if available, including
            the retest status

            and the retest job ID

            '
          content:
            application/json:
              schema: &id005
                $ref: '#/components/schemas/FindingRetestInfo'
        '400':
          description: Bad Request - Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - An associated resource - such as the requested
            event, retest job information, or finding - was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      summary: Start Retest
      description: 'Start a retest for a specific finding to check if the finding
        is

        still valid or has been resolved. The retest will be performed

        asynchronously. The retest status can be checked using the

        **`GET /v1/events/{event_slug}/findings/{finding_id}/retest`** endpoint.

        > **Info**: Retesting is used to update the status of a finding, enabling
        the

        > user to check if the finding is still valid or has been resolved.

        '
      tags:
      - Event Findings
      security:
      - http: []
      parameters:
      - in: path
        name: finding_id
        required: true
        description: The ID of the finding to retest
        schema:
          type: integer
      - in: path
        name: event_slug
        required: true
        description: The slug of the event
        schema:
          type: string
      responses:
        '200':
          description: 'Retest started successfully. The response will contain the
            ID of the retest

            job. It''s status can then be checked using the appropriate endpoint

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          description: Bad Request - Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - An associated resource - such as the requested
            event or finding - was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: 'Conflict - A retest job already exists for the specified finding
            or the

            finding is not in a re-testable state

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/events/{event_slug}/recons/:
    get:
      summary: List Event Recons
      description: 'Fetches a list of recons related to an event identified by the
        event''s slug.

        > **Note:**  This operation can only be performed by integrators.

        '
      tags:
      - Event Recons
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        required: true
        schema:
          type: string
        description: The slug of the event for which recons are to be retrieved.
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of recons per page
        schema:
          type: integer
      responses:
        '200':
          description: A list of recons associated with the event
          content:
            application/json:
              schema: &id003
                $ref: '#/components/schemas/ReconList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
    post:
      summary: Launch Event Recon
      description: 'Initiates a reconnaissance job for an event identified by its
        slug.

        > **Note:**  This operation can only be performed by integrators.

        '
      tags:
      - Event Recons
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        required: true
        schema:
          type: string
        description: The slug of the event for which the recon is to be launched
      responses:
        '201':
          description: Recon successfully launched
          content:
            application/json:
              schema: *id002
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested recon or an associated resource were
            not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to launch a recon job
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/recons/{recon_id}:
    get:
      summary: Get Event Recon
      description: 'Fetches detailed information about a specific recon associated
        with an event,

        identified by the event''s slug and the recon''s unique identifier.

        > **Note:**  This operation can only be performed by integrators.

        '
      tags:
      - Event Recons
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        required: true
        schema:
          type: string
        description: The slug of the event associated with the recon.
      - in: path
        name: recon_id
        required: true
        schema:
          type: integer
        description: The unique identifier of the recon to retrieve.
      responses:
        '200':
          description: Detailed information about the specific recon
          content:
            application/json:
              schema: *id003
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested recon or an associated resource was
            not found
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/reports/:
    get:
      summary: List Event Reports
      description: Retrieves a list of reports associated with a specified event.
      tags:
      - Event Reports
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event whose reports are to be listed
        required: true
        schema:
          type: string
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of reports per page
        schema:
          type: integer
      responses:
        '200':
          description: A list of reports for the specified event
          content:
            application/json:
              schema: &id013
                $ref: '#/components/schemas/ReportList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
    post:
      summary: Create Event Report
      description: Creates a report based on the specified details for the event.
      tags:
      - Event Reports
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event associated with the report
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateReport'
      responses:
        '202':
          description: Report creation initiated
          content:
            application/json:
              schema: *id002
        '400':
          description: Bad Request - Invalid input values provided
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
        '406':
          description: Not Acceptable - Invalid input values provided
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Unable to create the report
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/reports/{report_id}:
    get:
      summary: Get Event Report
      description: Fetches detailed information about a specific report associated
        with a specified event.
      tags:
      - Event Reports
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event associated with the report
        required: true
        schema:
          type: string
      - in: path
        name: report_id
        schema:
          type: integer
        required: true
        description: The unique identifier of the report
      responses:
        '200':
          description: Detailed information about the specific report.
          content:
            application/json:
              schema: &id014
                $ref: '#/components/schemas/Report'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested report or an associated resource
            was not found
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/reports/{report_id}/download:
    get:
      summary: Download Event Report
      description: Provides a direct download URL or redirects to a download URL for
        a specific report.
      tags:
      - Event Reports
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event associated with the report
        required: true
        schema:
          type: string
      - in: path
        name: report_id
        schema:
          type: integer
        required: true
        description: The unique identifier of the report
      responses:
        '302':
          description: Redirect to the download URL for the report.
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested report or an associated resource
            was not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Unable to generate a download URL.
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/scope/:
    get:
      summary: Get Event Scope
      description: Fetches the scope details of an event, including assets that are
        in-scope and out-of-scope. The result is paginated individually for each list.
      tags:
      - Event Scope
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event whose scope is being retrieved
        required: true
        schema:
          type: string
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of assets per list and per page
        schema:
          type: integer
      responses:
        '200':
          description: Event Scope details, including in-scope and out-of-scope assets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventScope'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
    patch:
      summary: Update Event Asset
      description: Modifies which assets are considered in-scope and out-of-scope
        for a specific event, based on provided asset IDs.
      tags:
      - Event Scope
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event whose scope is being updated
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchEventScope'
      responses:
        '200':
          description: Event Scope details, including in-scope and out-of-scope assets
          content:
            application/json:
              schema: *id002
        '400':
          description: Bad Request - Invalid input values provided
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failure in processing the scope update
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/scope/assets/:
    get:
      summary: List Event Assets
      description: Retrieves all assets associated with a specific event's scope,
        with pagination and optional filtering.
      tags:
      - Event Scope
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event whose assets are being queried.
        schema:
          type: string
        required: true
      - in: query
        name: in_scope
        description: Filter assets by in-scope status
        schema:
          type: boolean
      - in: query
        name: asset_id
        description: Filter assets by ID
        schema:
          type: integer
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of assets per page
        schema:
          type: integer
      responses:
        '200':
          description: List of assets associated with the event.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventAssetList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
    post:
      summary: Add Asset to Event
      description: Adds an existing asset to a specific event's scope.
      tags:
      - Event Scope
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event where the asset will be added.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddEventAsset'
      responses:
        '201':
          description: Asset added successfully
          content:
            application/json:
              schema: *id002
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Error during asset addition
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/scope/assets/{asset_id}:
    get:
      summary: Get Event Asset
      description: Fetches detailed information about a specific asset within an event's
        scope.
      tags:
      - Event Scope
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event
        required: true
        schema:
          type: string
      - in: path
        name: asset_id
        description: The unique identifier of the asset
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Information about the requested event asset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventAsset'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested event asset or an associated resource
            was not found
          content:
            application/json:
              schema: *id001
    delete:
      summary: Delete Event Asset
      description: Removes a specified asset from an event's scope.
      tags:
      - Event Scope
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event.
        required: true
        schema:
          type: string
      - in: path
        name: asset_id
        description: The unique identifier of the asset to be removed.
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Asset deleted successfully.
          content:
            application/json:
              schema: *id002
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Error during asset deletion
          content:
            application/json:
              schema: *id001
    patch:
      summary: Update Event Asset
      description: Updates specific details of an asset within an event's scope.
      tags:
      - Event Scope
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event
        required: true
        schema:
          type: string
      - in: path
        name: asset_id
        description: The unique identifier of the asset
        required: true
        schema:
          type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchEventAsset'
      responses:
        '200':
          description: Asset updated successfully
          content:
            application/json:
              schema: *id002
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested event asset or an associated resource
            was not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Error during asset update
          content:
            application/json:
              schema: *id001
  /v1/events/{event_slug}/scope/urls/:
    get:
      summary: List Event URLs In Scope
      description: Retrieves all URLs in scope associated with a specific event.
      tags:
      - Event Scope
      security:
      - http: []
      parameters:
      - in: path
        name: event_slug
        description: The slug of the event whose assets are being queried.
        schema:
          type: string
        required: true
      - in: query
        name: in_scope
        description: Whether to include in-scope urls.
        schema:
          type: boolean
        default: true
      - in: query
        name: out_of_scope
        description: Whether to include out-of-scope (i.e., not in-scope) urls.
        schema:
          type: boolean
        default: false
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of assets per page
        schema:
          type: integer
      responses:
        '200':
          description: List of URLs associated with the event.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventScopeUrlList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            event - was not found
          content:
            application/json:
              schema: *id001
  /v1/findings/:
    get:
      summary: List Findings
      description: Fetches a list of findings accessible to the authenticated user.
      tags:
      - Findings
      security:
      - http: []
      parameters:
      - in: query
        name: finding_id
        description: Filter findings by ID
        schema:
          type: integer
      - in: query
        name: event_slug
        description: Filter findings by associated event slug
        schema:
          type: string
      - in: query
        name: organization_id
        description: Filter findings by organization ID
        schema:
          type: string
      - in: query
        name: asset_id
        description: Filter findings by asset ID
        schema:
          type: string
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of findings per page
        schema:
          type: integer
      responses:
        '200':
          description: The list of user-accessible findings
          content:
            application/json:
              schema: *id004
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
  /v1/findings/{finding_id}/:
    get:
      summary: Get Finding
      description: Fetches detailed information about a specific finding based on
        its ID.
      tags:
      - Findings
      security:
      - http: []
      parameters:
      - in: path
        name: finding_id
        description: The unique identifier of the finding to retrieve
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Requested finding information
          content:
            application/json:
              schema: *id004
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Finding not found
          content:
            application/json:
              schema: *id001
  /v1/findings/{finding_id}/status:
    post:
      summary: Update Findings Status
      description: Allows organizations to update the status of their findings.
      tags:
      - Findings
      security:
      - http: []
      parameters:
      - in: path
        name: finding_id
        description: The unique identifier of the finding to be updated
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FindingStatusUpdateSchema'
      responses:
        '200':
          description: Finding status updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FindingStatusUpdateResultSchema'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Finding not found
          content:
            application/json:
              schema: *id001
        '406':
          description: Not Acceptable - Invalid status provided
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Finding status update error
          content:
            application/json:
              schema: *id001
  /v1/findings/{finding_id}/retest/:
    get:
      summary: Get Retest Information
      description: 'Retrieves the status of retest job of a specific finding.

        > **Info**: Retesting is used to update the status of a finding, enabling
        the

        > user to check if the finding is still valid or has been resolved.

        '
      tags:
      - Findings
      security:
      - http: []
      parameters:
      - in: path
        name: finding_id
        required: true
        description: The ID of the finding to retrieve retest information for
        schema:
          type: integer
      responses:
        '200':
          description: 'The retrieved retest information, if available, including
            the retest status

            and the retest job ID

            '
          content:
            application/json:
              schema: *id005
        '400':
          description: Bad Request - Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - An associated resource - such as the requested
            finding or retest job information - was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      summary: Start Retest
      description: 'Start a retest for a specific finding to check if the finding
        is

        still valid or has been resolved. The retest will be performed

        asynchronously. The retest status can be checked using the

        **`GET /v1/findings/{finding_id}/retest`** endpoint.

        > **Info**: Retesting is used to update the status of a finding, enabling
        the

        > user to check if the finding is still valid or has been resolved.

        '
      tags:
      - Findings
      security:
      - http: []
      parameters:
      - in: path
        name: finding_id
        required: true
        description: The ID of the finding to start a retest for
        schema:
          type: integer
      responses:
        '200':
          description: 'Retest started successfully. The response will contain the
            ID of the retest

            job. It''s status can then be checked using the appropriate endpoint

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          description: Bad Request - Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - An associated resource - such as the requested
            finding - was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: 'Conflict - A retest job already exists for the specified finding
            or the

            finding is not in a re-testable state

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/jobs/check:
    post:
      summary: Check target URL
      description: Checks if a given URL is valid and if a job can be launched.
      tags:
      - CI/CD Jobs
      security:
      - http: []
      requestBody:
        required: true
        content:
          application/json:
            schema: &id006
              $ref: '#/components/schemas/Service'
      responses:
        '200':
          description: URL is valid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckResponse'
        '404':
          description: Associated asset not found (e.g., no associated organization
            or active machine event).
          content:
            application/json:
              schema: *id001
        '422':
          description: Invalid launch (e.g., requested URL is not permissible or the
            organization has no run minutes left).
          content:
            application/json:
              schema: *id001
  /v1/jobs/launch:
    post:
      summary: Launch Job
      description: Launches a CI/CD job for the provided service.
      tags:
      - CI/CD Jobs
      security:
      - http: []
      requestBody:
        content:
          application/json:
            schema: *id006
      responses:
        '200':
          description: Job launched
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchJobResponse'
        '404':
          description: Associated asset not found (e.g, no associated organization
            and/or active machine event).
          content:
            application/json:
              schema: *id001
        '422':
          description: Invalid launch (e.g, the target is not valid or the organization
            has no run minutes left).
          content:
            application/json:
              schema: *id001
  /v1/jobs/{job_uuid}/status:
    get:
      summary: Get Job status
      description: Retrieves the status of a CI/CD job.
      tags:
      - CI/CD Jobs
      security:
      - http: []
      parameters:
      - in: path
        name: job_uuid
        description: UUID of the job.
        schema:
          type: string
        required: true
      responses:
        '200':
          description: Job status retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
        '404':
          description: Associated asset not found (e.g., no target job).
          content:
            application/json:
              schema: *id001
  /v1/jobs/{job_uuid}/cancel:
    post:
      summary: Cancel Job
      description: Cancels a currently pending or running CI/CD job.
      tags:
      - CI/CD Jobs
      security:
      - http: []
      parameters:
      - in: path
        name: job_uuid
        description: UUID of the job
        schema:
          type: string
        required: true
      responses:
        '200':
          description: Job successfully cancelled or removed from queue.
          content:
            application/json:
              schema: *id002
        '404':
          description: Associated asset not found (e.g, no job or associated organization).
          content:
            application/json:
              schema: *id001
        '424':
          description: Invalid target (e.g., the job is not running or queued).
          content:
            application/json:
              schema: *id001
        '500':
          description: Failed to cancel job.
          content:
            application/json:
              schema: *id001
  /v1/jobs/:
    get:
      summary: List Jobs
      description: Lists all CI/CD jobs associated with the current user.
      tags:
      - CI/CD Jobs
      security:
      - http: []
      responses:
        '200':
          description: Jobs listed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListJobsResponse'
        '404':
          description: Associated asset not found (e.g, no associated organization).
          content:
            application/json:
              schema: *id001
  /v1/jobs/{job_uuid}:
    get:
      summary: Get Job information
      description: Retrieves information about a CI/CD job.
      tags:
      - CI/CD Jobs
      security:
      - http: []
      parameters:
      - in: path
        name: job_uuid
        description: UUID of the job.
        schema:
          type: string
        required: true
      responses:
        '200':
          description: Job information retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobInfoResponse'
        '404':
          description: Associated asset not found (e.g, no target job and/or associated
            organization).
          content:
            application/json:
              schema: *id001
  /v1/jobs/{job_uuid}/success:
    get:
      summary: Check Job success
      description: Checks if a CI/CD job was successful
      tags:
      - CI/CD Jobs
      security:
      - http: []
      parameters:
      - in: path
        name: job_uuid
        description: UUID of the job.
        required: true
        schema:
          type: string
      - in: query
        name: severity
        description: Minimum failing severity of the findings
        required: false
        schema:
          type: string
          enum:
          - none
          - low
          - medium
          - high
          - critical
          - cosmic
          default: medium
      - in: query
        name: fail
        description: Whether to return a failing status code if the job wasn't successful
        required: false
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Job success checked.
          content:
            application/json:
              schema: *id002
        '202':
          description: Job is not finished.
          content:
            application/json:
              schema: *id002
        '404':
          description: Associated asset not found (e.g, no target job and/or associated
            organization).
          content:
            application/json:
              schema: *id001
        '424':
          description: Vulnerabilities were found or the job was canceled. Only applicable
            if the 'fail' query parameter is set to true.
          content:
            application/json:
              schema: *id001
        '500':
          description: The job failed. Only applies if the 'fail' query parameter
            is set to true.
          content:
            application/json:
              schema: *id001
  /v1/organizations/:
    get:
      summary: List Organizations
      description: Fetches a list of user-accessible organizations, with support for
        filtering and pagination.
      tags:
      - Organizations
      security:
      - http: []
      responses:
        '200':
          description: The list of user-accessible organizations
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationList'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
    post:
      summary: Create Organization
      description: 'Creates a new organization with the provided information.

        > **Note:**  This operation can only be performed by integrators.

        '
      tags:
      - Organizations
      security:
      - http: []
      requestBody:
        description: Data required to create a new organization.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrganization'
      responses:
        '201':
          description: Organization created successfully
          content:
            application/json:
              schema: *id002
        '400':
          description: Invalid input - The data provided in the request body is not
            valid
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - A related resource - such as the associated organization
            - not found
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Unable to create the organization
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/:
    get:
      summary: Get Organization
      description: Fetches information about a specific organization based on its
        ID.
      tags:
      - Organizations
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve.
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Requested organization information
          content:
            application/json:
              schema: &id007
                $ref: '#/components/schemas/Organization'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Organization not found
          content:
            application/json:
              schema: *id001
    delete:
      summary: Delete Organization
      description: 'Deletes a specific organization based on its ID.

        > **Note:**  This operation can only be performed by integrators.

        '
      tags:
      - Organizations
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to delete.
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Requested organization information
          content:
            application/json:
              schema: *id007
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - Organization not found
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/domains/:
    get:
      summary: List Organization Domains
      description: Fetches a list of user-accessible organization domains, with support
        for filtering and pagination.
      tags:
      - Organization Domains
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve domains
          for.
        required: true
        schema:
          type: integer
      - in: query
        name: value
        description: Filter domains by their value
        schema:
          type: string
      - in: query
        name: verified
        description: Filter domains by verification status
        schema:
          type: boolean
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of domains per page
        schema:
          type: integer
      responses:
        '200':
          description: A list of user-accessible domains for the matching organization
          content:
            application/json:
              schema: *id008
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            organization - was not found
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/domains/{domain_id}:
    get:
      summary: Get Organization Domain
      description: Fetches information about a specific domain associated with the
        specified organization.
      tags:
      - Organization Domains
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve the domain
          for
        required: true
        schema:
          type: integer
      - in: path
        name: domain_id
        description: The unique identifier of the domain to retrieve
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Requested domain information
          content:
            application/json:
              schema: *id009
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested domain or an associated resource
            was not found
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/events/:
    get:
      summary: List Organization Events
      description: Fetches a list of user-accessible events for the specified organization,
        with support for pagination.
      tags:
      - Organization Events
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve events
          for.
        required: true
        schema:
          type: integer
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of events per page
        schema:
          type: integer
      responses:
        '200':
          description: A list of user-accessible events for the matching organization
          content:
            application/json:
              schema: *id010
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            organization - was not found
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/events/{event_slug}:
    get:
      summary: Get Organization Event
      description: Fetches information about a specific event associated with the
        specified organization.
      tags:
      - Organization Events
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve the event
          for
        required: true
        schema:
          type: integer
      - in: path
        name: event_slug
        description: The unique identifier of the event to retrieve
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Requested event information
          content:
            application/json:
              schema: *id011
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested event or an associated resource was
            not found
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/assets/:
    get:
      summary: List Organization Assets
      description: Fetches a list of user-accessible assets for the specified organization,
        with support for pagination.
      tags:
      - Organization Events
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve the event
          for
        required: true
        schema:
          type: integer
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of assets per page
        schema:
          type: integer
      responses:
        '200':
          description: A list of user-accessible assets for the matching organization
          content:
            application/json:
              schema: *id012
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            organization - was not found
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/assets/{asset_id}:
    get:
      summary: Get Organization Asset
      description: Fetches information about a specific asset associated with the
        specified organization.
      tags:
      - Organization Events
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve the asset
          for.
        required: true
        schema:
          type: integer
      - in: path
        name: asset_id
        description: The unique identifier of the asset to retrieve.
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Requested asset information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Asset'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested asset or an associated resource was
            not found
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/reports/:
    get:
      summary: Get Organization Reports
      description: Fetches a list of user-accessible reports for the specified organization,
        with support for filtering and pagination.
      tags:
      - Organization Reports
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve reports
          for
        required: true
        schema:
          type: integer
      - in: query
        name: report_id
        description: Filter reports by their ID
        schema:
          type: integer
      - in: query
        name: event_slug
        description: Filter reports by associated event slug
        schema:
          type: string
      - in: query
        name: page
        description: Page number
        schema:
          type: integer
      - in: query
        name: per_page
        description: Number of reports per page
        schema:
          type: integer
      responses:
        '200':
          description: A list of user-accessible reports for the matching organization
          content:
            application/json:
              schema: *id013
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - An associated resource - such as the requested
            organization - was not found
          content:
            application/json:
              schema: *id001
  /v1/organizations/{organization_id}/reports/{report_id}:
    get:
      summary: Get Organization Report
      description: Fetches information about a specific report associated with the
        specified organization.
      tags:
      - Organization Reports
      security:
      - http: []
      parameters:
      - in: path
        name: organization_id
        description: The unique identifier of the organization to retrieve the report
          for.
        required: true
        schema:
          type: integer
      - in: path
        name: report_id
        description: The unique identifier of the report to retrieve
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Requested report information
          content:
            application/json:
              schema: *id014
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to perform this action
          content:
            application/json:
              schema: *id001
        '404':
          description: Not Found - The requested report or an associated resource
            was not found
          content:
            application/json:
              schema: *id001
  /v1/reports/:
    get:
      summary: List Reports
      description: Fetches a list of user-accessible reports, with support for filtering
        and pagination.
      tags:
      - Reports
      security:
      - http: []
      parameters:
      - in: query
        name: report_id
        description: The unique identifier of the report to retrieve
        schema:
          type: integer
      - in: query
        name: event_slug
        description: The slug of the event to retrieve reports for
        schema:
          type: string
      - in: query
        name: organization_id
        description: The unique identifier of the organization to retrieve reports
          for
        schema:
          type: integer
      - in: query
        name: page
        description: The page number to retrieve
        schema:
          type: integer
      - in: query
        name: per_page
        description: The number of reports to retrieve per page
        schema:
          type: integer
      responses:
        '200':
          description: The list of user-accessible reports
          content:
            application/json:
              schema: *id013
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to access this resource
          content:
            application/json:
              schema: *id001
  /v1/reports/{report_id}/:
    get:
      summary: Get Report
      description: Fetches a specific user-accessible report based on its unique identifier.
      tags:
      - Reports
      security:
      - http: []
      parameters:
      - in: path
        name: report_id
        description: The unique identifier of the report to retrieve
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The requested report
          content:
            application/json:
              schema: *id014
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to access this resource
          content:
            application/json:
              schema: *id001
        '404':
          description: Report not found - No report could be found corresponding to
            the provided identifier
          content:
            application/json:
              schema: *id001
  /v1/reports/{report_id}/download:
    get:
      summary: Download Report
      description: Initiates the download of a specific user-accessible report based
        on its unique identifier.
      tags:
      - Reports
      security:
      - http: []
      parameters:
      - in: path
        name: report_id
        description: The unique identifier of the report to download
        required: true
        schema:
          type: integer
      responses:
        '302':
          description: Redirect to the download URL
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User does not have permission to access this resource
          content:
            application/json:
              schema: *id001
        '404':
          description: Report not found - No report could be found corresponding to
            the provided identifier
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to provide the download URL
          content:
            application/json:
              schema: *id001
  /v1/settings/default-event-duration/:
    get:
      summary: Get Default Event Duration
      description: 'Get the current default machine event duration for the authenticated

        integrator partner.

        '
      tags:
      - Settings
      - Integrator
      security:
      - http: []
      responses:
        '200':
          description: Current default duration retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DefaultDurationResponse'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: Forbidden - User is not an integrator partner
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to retrieve settings
          content:
            application/json:
              schema: *id001
    put:
      summary: Update Default Event Duration
      description: 'Update the default machine event duration for the authenticated

        integrator partner. Requires the appropriate role and subscription permissions.

        '
      tags:
      - Settings
      - Integrator
      security:
      - http: []
      requestBody:
        description: New duration settings
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDurationRequest'
      responses:
        '200':
          description: Duration updated successfully
          content:
            application/json:
              schema: *id002
        '400':
          description: Bad Request - Invalid duration value
          content:
            application/json:
              schema: *id001
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema: *id001
        '403':
          description: 'Forbidden - One of the following:

            - User is not an integrator partner

            - User lacks required role (ADMIN, OWNER, or TECHNICAL_MANAGER)

            - Subscription doesn''t allow editing default duration

            '
          content:
            application/json:
              schema: *id001
        '500':
          description: Internal Server Error - Failed to update settings
          content:
            application/json:
              schema: *id001
openapi: 3.0.2
components:
  schemas:
    User:
      properties:
        name:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The full name of the user
          title: Name
        username:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The username of the user
          title: Username
        country:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The country of the user
          title: Country
        picture:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: URL to the user's profile picture
          title: Picture
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The unique identifier of the user, if applicable
          title: Id
      title: User
      type: object
    Asset:
      description: Asset model
      properties:
        id:
          description: The unique identifier of the asset
          title: Id
          type: integer
        value:
          description: The value of the asset
          title: Value
          type: string
        type:
          description: The type of the asset
          title: Type
          type: string
        tier:
          anyOf:
          - $ref: '#/components/schemas/AssetTiers'
          - type: 'null'
          default: null
          description: The tier of the asset
        organization_id:
          description: The identifier of the organization
          title: Organization Id
          type: integer
        private:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the asset is private or not
          title: Private
      required:
      - id
      - value
      - type
      - organization_id
      title: Asset
      type: object
    AssetTiers:
      description: An enumeration of the possible tiers of an asset.
      enum:
      - low
      - medium
      - high
      title: AssetTiers
      type: string
    AssetList:
      description: Asset list model
      properties:
        assets:
          description: A list of Asset objects
          items:
            $ref: '#/components/schemas/Asset'
          title: Assets
          type: array
      required:
      - assets
      title: AssetList
      type: object
    ErrorResponse:
      properties:
        code:
          description: The HTTP status code
          title: Code
          type: integer
        name:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The name or summary of the error
          title: Name
        description:
          description: The description of the error
          title: Description
          type: string
        success:
          default: false
          description: Whether the request was successful
          title: Success
          type: boolean
      required:
      - code
      - description
      title: ErrorResponse
      type: object
    Finding:
      description: Finding model
      properties:
        id:
          description: The unique identifier of the finding
          title: Id
          type: integer
        title:
          description: The title of the finding
          title: Title
          type: string
        md:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The details of the finding in markdown format
          title: Md
        html:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The details of the finding in HTML format
          title: Html
        asset_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The identifier of the asset associated with the finding
          title: Asset Id
        asset_value:
          description: The value of the asset associated with the finding
          title: Asset Value
          type: string
        status:
          anyOf:
          - type: integer
          - type: string
          description: The status of the finding
          title: Status
        previous_status:
          anyOf:
          - type: integer
          - type: string
          - type: 'null'
          default: null
          description: The previous status of the finding
          title: Previous Status
        requested_score:
          anyOf:
          - type: number
          - type: 'null'
          default: null
          description: The requested score of the finding
          title: Requested Score
        event_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The identifier of the event associated with the finding
          title: Event Id
        severity:
          $ref: '#/components/schemas/FindingSeverityEnum'
          description: The severity of the finding
        priority:
          description: The priority value of the finding
          title: Priority
          type: number
        score:
          anyOf:
          - type: number
          - type: 'null'
          default: null
          description: The score of the finding
          title: Score
        cve:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The CVE associated with the finding
          title: Cve
        cvss_vector:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The CVSS vector associated with the finding
          title: Cvss Vector
        created:
          description: The date and time the finding was created
          format: date-time
          title: Created
          type: string
      required:
      - id
      - title
      - asset_value
      - status
      - severity
      - priority
      - created
      title: Finding
      type: object
    FindingList:
      properties:
        findings:
          description: A list of Finding objects
          items:
            $ref: '#/components/schemas/Finding'
          title: Findings
          type: array
      required:
      - findings
      title: FindingList
      type: object
    FindingSeverityEnum:
      enum:
      - none
      - low
      - medium
      - high
      - critical
      - cosmic
      title: FindingSeverityEnum
      type: string
    Technology:
      properties:
        id:
          description: The identifier of the technology
          title: Id
          type: integer
        name:
          description: The name of the technology
          title: Name
          type: string
        vendor:
          description: The vendor of the technology
          title: Vendor
          type: string
        version:
          description: The version of the technology
          title: Version
          type: string
        os:
          description: The OS of the technology
          title: Os
          type: string
      required:
      - id
      - name
      - vendor
      - version
      - os
      title: Technology
      type: object
    AssetDetails:
      properties:
        id:
          description: The unique identifier of the asset
          title: Id
          type: integer
        value:
          description: The value of the asset
          title: Value
          type: string
        type:
          description: The type of the asset
          title: Type
          type: string
        tier:
          anyOf:
          - $ref: '#/components/schemas/AssetTiers'
          - type: 'null'
          default: null
          description: The tier of the asset
        organization_id:
          description: The identifier of the organization
          title: Organization Id
          type: integer
        private:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the asset is private or not
          title: Private
        organization_name:
          description: The name of the organization
          title: Organization Name
          type: string
        risk_score:
          description: The risk level of the asset
          title: Risk Score
          type: string
        ip:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The ip adress of the asset
          title: Ip
        tld:
          description: Whether the asset is a top level domain or not
          title: Tld
          type: boolean
        services:
          description: List of the services of the asset
          items:
            type: string
          title: Services
          type: array
        ports:
          description: List of the ports used by the asset
          items:
            type: integer
          title: Ports
          type: array
        technologies:
          description: List of the technologies of the asset
          items:
            $ref: '#/components/schemas/Technology'
          title: Technologies
          type: array
        created:
          description: The date and time the asset was created
          format: date-time
          title: Created
          type: string
        n_findings:
          description: The number of findings of the asset
          title: N Findings
          type: integer
        findings:
          $ref: '#/components/schemas/FindingList'
          description: The findings of the asset
      required:
      - id
      - value
      - type
      - organization_id
      - organization_name
      - risk_score
      - tld
      - services
      - ports
      - technologies
      - created
      - n_findings
      - findings
      title: AssetDetails
      type: object
    ImplementedAssetTypes:
      enum:
      - domain
      - ip
      title: ImplementedAssetTypes
      type: string
    AddAsset:
      description: Add asset model
      properties:
        organization_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The identifier of the organization associated with the asset
          title: Organization Id
        asset_value:
          description: The value of the asset
          title: Asset Value
          type: string
        asset_type:
          $ref: '#/components/schemas/ImplementedAssetTypes'
          description: The type of the asset
        beacon_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The beacon identifier associated with the asset
          title: Beacon Id
        tier:
          anyOf:
          - $ref: '#/components/schemas/AssetTiers'
          - type: 'null'
          default: null
          description: The tier of the asset
      required:
      - asset_value
      - asset_type
      title: AddAsset
      type: object
    SuccessResponse:
      properties:
        code:
          description: The HTTP status code
          title: Code
          type: integer
        description:
          description: The description of the response
          title: Description
          type: string
        id:
          anyOf:
          - type: integer
          - type: string
          - type: 'null'
          default: null
          description: The unique identifier of the created or modified resource
          title: Id
        success:
          anyOf:
          - type: boolean
          - type: 'null'
          default: true
          description: Whether the request was successful
          title: Success
      required:
      - code
      - description
      title: SuccessResponse
      type: object
    UpdateAsset:
      description: Update asset model
      properties:
        tier:
          anyOf:
          - $ref: '#/components/schemas/AssetTiers'
          - type: 'null'
          default: null
          description: The tier of the asset
      title: UpdateAsset
      type: object
    Domain:
      description: Domain model
      properties:
        id:
          description: The unique identifier of the domain
          title: Id
          type: integer
        value:
          description: The value of the domain
          title: Value
          type: string
        organization_id:
          description: The identifier of the organization that owns the domain
          title: Organization Id
          type: integer
        verified:
          description: Whether the domain is verified or not
          title: Verified
          type: boolean
        verification_token:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The token used to verify the domain
          title: Verification Token
        verification_txt_record:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The TXT record string used to verify the domain
          title: Verification Txt Record
      required:
      - id
      - value
      - organization_id
      - verified
      title: Domain
      type: object
    DomainList:
      properties:
        domains:
          description: A list of Domain objects
          items:
            $ref: '#/components/schemas/Domain'
          title: Domains
          type: array
      required:
      - domains
      title: DomainList
      type: object
    AddDomain:
      properties:
        value:
          description: The value of the domain
          title: Value
          type: string
        organization_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The identifier of the organization that owns the domain
          title: Organization Id
      required:
      - value
      title: AddDomain
      type: object
    Event:
      description: Event model
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The unique identifier of the event
          title: Id
        name:
          description: The name of the event
          title: Name
          type: string
        slug:
          description: The slug of the event
          title: Slug
          type: string
        organization_id:
          description: The identifier of the organization that owns the event
          title: Organization Id
          type: integer
        event_type:
          anyOf:
          - type: integer
          - type: string
          description: The event type
          title: Event Type
        event_category:
          anyOf:
          - type: integer
          - type: string
          description: The event category
          title: Event Category
        dimension:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The dimension of the event
          title: Dimension
        latitude:
          anyOf:
          - type: number
          - type: 'null'
          default: null
          description: The latitude of the location of event
          title: Latitude
        longitude:
          anyOf:
          - type: number
          - type: 'null'
          default: null
          description: The longitude of location of the event
          title: Longitude
        start_date:
          description: The date and time the event starts
          format: date-time
          title: Start Date
          type: string
        end_date:
          description: The date and time the event ends
          format: date-time
          title: End Date
          type: string
        status:
          $ref: '#/components/schemas/EventStatusEnum'
          description: The status of the event
        dimension_type:
          anyOf:
          - type: integer
          - type: string
          - type: 'null'
          default: null
          description: The dimension type of the event
          title: Dimension Type
        picture:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The picture of the event
          title: Picture
      required:
      - name
      - slug
      - organization_id
      - event_type
      - event_category
      - start_date
      - end_date
      - status
      title: Event
      type: object
    EventStatusEnum:
      description: An enumeration of the possible statuses of an event.
      enum:
      - paused
      - scheduled
      - pending
      - running
      - retesting
      - finished
      - draft
      title: EventStatusEnum
      type: string
    EventList:
      properties:
        events:
          description: A list of Event objects
          items:
            $ref: '#/components/schemas/Event'
          title: Events
          type: array
      required:
      - events
      title: EventList
      type: object
    CreateIntegratorMachineEvent:
      properties:
        organization_id:
          description: The identifier of the organization that owns the event
          title: Organization Id
          type: integer
        add_assets:
          default: true
          description: Whether to automatically add existing assets to the event
          title: Add Assets
          type: boolean
        launch_recon:
          default: true
          description: Whether to automatically launch a recon job for the event
          title: Launch Recon
          type: boolean
        end_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: Optional end date for the event in ISO 8601 format (e.g., '2024-12-31T23:59:59Z'
            or '2024-12-31T23:59:59+00:00'). Must be timezone-aware and in the future
          title: End Date
      required:
      - organization_id
      title: CreateIntegratorMachineEvent
      type: object
    FindingSubmissionSchema:
      properties:
        asset:
          description: Asset identifier
          title: Asset
          type: string
        severity:
          description: Finding severity
          title: Severity
          type: string
        cwe:
          description: CWE identifier
          title: Cwe
          type: integer
        cve:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: CVE identifier
          title: Cve
        score:
          anyOf:
          - type: number
          - type: 'null'
          default: null
          description: CVSS score
          title: Score
        cvss_vector:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: CVSS vector
          title: Cvss Vector
        title:
          description: Finding title
          title: Title
          type: string
        markdown:
          description: Finding description in markdown
          title: Markdown
          type: string
        attachments:
          description: List of attachment IDs
          items:
            type: integer
          title: Attachments
          type: array
      required:
      - asset
      - severity
      - cwe
      - title
      - markdown
      title: FindingSubmissionSchema
      type: object
    FindingSubmissionResultSchema:
      properties:
        result:
          description: Operation result status
          title: Result
          type: string
        finding_id:
          description: ID of the created finding
          title: Finding Id
          type: string
      required:
      - result
      - finding_id
      title: FindingSubmissionResultSchema
      type: object
    FindingRetestStatusEnum:
      description: An enumeration of the possible statuses of an event
      enum:
      - pending
      - in_progress
      - finished
      - error
      - canceled
      title: FindingRetestStatusEnum
      type: string
    FindingRetestInfo:
      description: 'Finding retest info model


        The finding retest info model is used to represent the information about a
        retest

        job for a finding. The model includes the date and time the retest job was
        created,

        the date and time the retest job was started, the date and time the retest
        job was

        finished, the status of the retest job, and the UUID of the retest job.'
      properties:
        created:
          description: The date and time the retest job was created
          format: date-time
          title: Created
          type: string
        started:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date and time the retest job was started
          title: Started
        finished:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          description: The date and time the retest job was finished
          title: Finished
        status:
          $ref: '#/components/schemas/FindingRetestStatusEnum'
          description: The status of the retest job
        uuid:
          description: The UUID of the retest job
          title: Uuid
          type: string
      required:
      - created
      - started
      - finished
      - status
      - uuid
      title: FindingRetestInfo
      type: object
    Recon:
      properties:
        id:
          description: The unique identifier of the recon job
          title: Id
          type: integer
        event_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The identifier of the event associated with the recon job
          title: Event Id
        status:
          $ref: '#/components/schemas/ReconStatusEnum'
          description: The status of the recon job
        created:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: The date and time the recon job was created
          title: Created
        start_time:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: The date and time the recon job started
          title: Start Time
        finish_time:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: The date and time the recon job finished
          title: Finish Time
      required:
      - id
      - status
      title: Recon
      type: object
    ReconStatusEnum:
      description: An enumeration of the possible statuses of a recon job.
      enum:
      - pending
      - in_progress
      - finished
      - error
      - canceled
      title: ReconStatusEnum
      type: string
    ReconList:
      properties:
        recons:
          description: A list of Recon objects
          items:
            $ref: '#/components/schemas/Recon'
          title: Recons
          type: array
      required:
      - recons
      title: ReconList
      type: object
    Report:
      description: Report model
      properties:
        id:
          description: The unique identifier of the report
          title: Id
          type: integer
        generation_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: The date and time the report was generated
          title: Generation Date
        start_date:
          description: The start datetime in ISO 8601 format for the scope of the
            report
          format: date-time
          title: Start Date
          type: string
        end_date:
          description: The end datetime in ISO 8601 format for the scope of the report
          format: date-time
          title: End Date
          type: string
        created:
          description: The datetime the report was created
          format: date-time
          title: Created
          type: string
        options:
          additionalProperties: true
          description: The provided options for the report generation
          title: Options
          type: object
        event_id:
          description: The ID of the event associated with the report
          title: Event Id
          type: integer
        error:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The error message if the report generation failed
          title: Error
      required:
      - id
      - start_date
      - end_date
      - created
      - options
      - event_id
      title: Report
      type: object
    ReportList:
      description: Report list model
      properties:
        reports:
          description: A list of Report objects
          items:
            $ref: '#/components/schemas/Report'
          title: Reports
          type: array
      required:
      - reports
      title: ReportList
      type: object
    ReportFindingStatusEnum:
      enum:
      - fixed
      - triaged
      - informative
      title: ReportFindingStatusEnum
      type: string
    ReportTypeEnum:
      enum:
      - executive
      - technical
      - csv
      - asset_inventory
      - customer_facing
      title: ReportTypeEnum
      type: string
    CreateReport:
      description: Information needed to request a report.
      properties:
        type:
          $ref: '#/components/schemas/ReportTypeEnum'
          description: The type of the report
        start_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: The start datetime in ISO 8601 format for the scope of the
            report
          title: Start Date
        end_date:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: The end datetime in ISO 8601 format for the scope of the report
          title: End Date
        minimum_severity:
          anyOf:
          - $ref: '#/components/schemas/FindingSeverityEnum'
          - type: 'null'
          default: null
          description: The minimum severity of findings to include in technical reports
        include_status:
          anyOf:
          - items:
              $ref: '#/components/schemas/ReportFindingStatusEnum'
            type: array
          - type: 'null'
          default: null
          description: The list of findings status to include in technical reports
          title: Include Status
        tz:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The timezone to use for the report
          title: Tz
      required:
      - type
      title: CreateReport
      type: object
    Beacon:
      description: Beacon model
      properties:
        id:
          description: The unique identifier of the beacon
          title: Id
          type: integer
        name:
          description: The name of the beacon
          title: Name
          type: string
        client_config_urls:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: null
          description: The client configuration URLs of the beacon
          title: Client Config Urls
      required:
      - id
      - name
      title: Beacon
      type: object
    EventAsset:
      description: Event asset model
      properties:
        id:
          description: The unique identifier of the asset
          title: Id
          type: integer
        value:
          description: The value of the asset
          title: Value
          type: string
        type:
          description: The type of the asset
          title: Type
          type: string
        in_scope:
          description: Whether the asset is in scope
          title: In Scope
          type: boolean
        private:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the asset is private
          title: Private
        description:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Additional description of the asset
          title: Description
        wildcard:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the asset is a wildcard
          title: Wildcard
        beacon_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The beacon identifier associated with the asset
          title: Beacon Id
        attachment_url:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The URL of the attachment associated with the asset, if any
          title: Attachment Url
      required:
      - id
      - value
      - type
      - in_scope
      title: EventAsset
      type: object
    EventAssetList:
      properties:
        assets:
          description: A list of EventAsset objects
          items:
            $ref: '#/components/schemas/EventAsset'
          title: Assets
          type: array
      required:
      - assets
      title: EventAssetList
      type: object
    EventScope:
      properties:
        in_scope:
          $ref: '#/components/schemas/EventAssetList'
          description: Assets associated with the event which are in scope
        out_of_scope:
          $ref: '#/components/schemas/EventAssetList'
          description: Assets associated with the event which are out of scope
        beacons:
          anyOf:
          - items:
              $ref: '#/components/schemas/Beacon'
            type: array
          - type: 'null'
          default: null
          description: Beacons associated with the event
          title: Beacons
      required:
      - in_scope
      - out_of_scope
      title: EventScope
      type: object
    PatchEventScope:
      properties:
        in_scope:
          default: []
          description: IDs of the Assets to switch to in scope
          items:
            type: integer
          title: In Scope
          type: array
          uniqueItems: true
        out_of_scope:
          default: []
          description: IDs of the Assets to switch to out of scope
          items:
            type: integer
          title: Out Of Scope
          type: array
          uniqueItems: true
      title: PatchEventScope
      type: object
    AddEventAsset:
      properties:
        asset_id:
          description: The identifier of the asset to add to the event
          title: Asset Id
          type: integer
        in_scope:
          default: false
          description: Whether the asset is in scope
          title: In Scope
          type: boolean
        wildcard:
          default: false
          description: Whether to add the asset as a wildcard
          title: Wildcard
          type: boolean
        description:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Additional description of the asset
          title: Description
      required:
      - asset_id
      title: AddEventAsset
      type: object
    PatchEventAsset:
      properties:
        in_scope:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the asset is in scope
          title: In Scope
        description:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Additional description of the asset
          title: Description
        wildcard:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the asset is a wildcard
          title: Wildcard
      title: PatchEventAsset
      type: object
    EventScopeUrlList:
      description: Event scope URL list schema
      properties:
        urls:
          description: A list of URL objects
          items:
            type: string
          title: Urls
          type: array
      required:
      - urls
      title: EventScopeUrlList
      type: object
    FindingStatusUpdateSchema:
      properties:
        status:
          description: New status value for the finding
          title: Status
          type: integer
      required:
      - status
      title: FindingStatusUpdateSchema
      type: object
    FindingStatusUpdateResultSchema:
      properties:
        result:
          description: Operation result status
          title: Result
          type: string
        finding_id:
          description: ID of the updated finding
          title: Finding Id
          type: string
      required:
      - result
      - finding_id
      title: FindingStatusUpdateResultSchema
      type: object
    Service:
      description: Service model
      properties:
        url:
          description: URL of the service
          title: Url
          type: string
        beacon_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Beacon ID of the service
          title: Beacon Id
        event_slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Event slug of the service
          title: Event Slug
      required:
      - url
      title: Service
      type: object
    CheckResponse:
      description: Response object for job validity
      properties:
        url:
          description: URL of the service
          title: Url
          type: string
        beacon_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Beacon ID of the service
          title: Beacon Id
        event_slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Event slug of the service
          title: Event Slug
        valid:
          description: Validity of the provided target
          title: Valid
          type: boolean
      required:
      - url
      - valid
      title: CheckResponse
      type: object
    LaunchJobResponse:
      description: Response object for job launch
      properties:
        url:
          description: URL of the target service
          title: Url
          type: string
        uuid:
          description: UUID of the launched job
          title: Uuid
          type: string
      required:
      - url
      - uuid
      title: LaunchJobResponse
      type: object
    Status:
      description: Response object for job status
      properties:
        status:
          description: Status of the job
          enum:
          - pending
          - in_progress
          - finished
          - error
          - canceled
          title: Status
          type: string
      required:
      - status
      title: Status
      type: object
    Job:
      description: Job model
      properties:
        status:
          description: Status of the job
          enum:
          - pending
          - in_progress
          - finished
          - error
          - canceled
          title: Status
          type: string
        uuid:
          description: UUID of the job
          title: Uuid
          type: string
        url:
          description: URL of the target service
          title: Url
          type: string
        beacon_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Beacon ID of the target service
          title: Beacon Id
        created:
          description: Created date of the job
          format: date-time
          title: Created
          type: string
        started:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: Started date of the job
          title: Started
        finished:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: Finished date of the job
          title: Finished
      required:
      - status
      - uuid
      - url
      - created
      title: Job
      type: object
    ListJobsResponse:
      description: Response object for job listing
      properties:
        jobs:
          description: List of jobs
          items:
            $ref: '#/components/schemas/Job'
          title: Jobs
          type: array
      required:
      - jobs
      title: ListJobsResponse
      type: object
    JobFindings:
      description: Completed job model
      properties:
        status:
          description: Status of the job
          enum:
          - pending
          - in_progress
          - finished
          - error
          - canceled
          title: Status
          type: string
        uuid:
          description: UUID of the job
          title: Uuid
          type: string
        url:
          description: URL of the target service
          title: Url
          type: string
        beacon_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Beacon ID of the target service
          title: Beacon Id
        created:
          description: Created date of the job
          format: date-time
          title: Created
          type: string
        started:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: Started date of the job
          title: Started
        finished:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          default: null
          description: Finished date of the job
          title: Finished
        findings:
          description: Findings of the job
          items:
            $ref: '#/components/schemas/Finding'
          title: Findings
          type: array
      required:
      - status
      - uuid
      - url
      - created
      - findings
      title: JobFindings
      type: object
    JobInfoResponse:
      description: Response object for job information
      properties:
        job:
          $ref: '#/components/schemas/JobFindings'
          description: Job Information
      required:
      - job
      title: JobInfoResponse
      type: object
    Organization:
      description: Organization model
      properties:
        id:
          description: The unique identifier of the organization
          title: Id
          type: integer
        name:
          description: The name of the organization
          title: Name
          type: string
      required:
      - id
      - name
      title: Organization
      type: object
    OrganizationList:
      properties:
        organizations:
          description: A list of Organization objects
          items:
            $ref: '#/components/schemas/Organization'
          title: Organizations
          type: array
      required:
      - organizations
      title: OrganizationList
      type: object
    CreateOrganization:
      properties:
        name:
          description: The name of the organization
          title: Name
          type: string
        assets_limit:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: The asset limit of the organization.
          title: Assets Limit
      required:
      - name
      title: CreateOrganization
      type: object
    DefaultDurationResponse:
      description: Response model for getting default event duration.
      properties:
        duration:
          description: Duration value
          example: 30
          title: Duration
          type: integer
        unit:
          const: days
          description: Duration unit (currently only 'days' supported)
          example: days
          title: Unit
          type: string
      required:
      - duration
      - unit
      title: DefaultDurationResponse
      type: object
    UpdateDurationRequest:
      description: Request model for updating default event duration.
      properties:
        duration:
          description: Duration value
          example: 60
          exclusiveMinimum: 0
          title: Duration
          type: integer
        unit:
          const: days
          description: Duration unit (currently only 'days' supported)
          example: days
          title: Unit
          type: string
      required:
      - duration
      - unit
      title: UpdateDurationRequest
      type: object
  securitySchemes:
    http:
      type: http
      scheme: basic
      description: Go to https://portal.ethiack.com/settings/api and generate your
        API keys. Simply use `username=key, password=secret`.
