openapi: 3.0.3
info:
  title: HoundER API
  version: '1.0'
  description: |
    The HoundER public API lets you programmatically read and triage findings
    discovered by HoundER: credentials, hosts, services, vulnerabilities, and
    websites. It's served at `api.hounder.io` and is currently scoped to
    findings — asset, project, and agent management are done through the
    [platform](https://platform.hounder.io) and aren't yet part of the public
    API.

    ### Filtering

    In addition to the filter parameters listed per endpoint below, list
    endpoints accept filters on most other fields of the returned resource
    (for example `hostname`, `geoIP.asn`, or `classification.cve` on
    vulnerabilities). Filters support:
    - Negation, by prefixing the value with `!` (e.g. `status=!closed`)
    - Matching multiple values, by repeating the parameter or passing a
      comma-separated list (e.g. `severity=critical,high`)
    - Comparison operators on numeric and date fields: `>`, `<`, `>=`, `<=`
      (e.g. `classification.cvssScore=>=7`)
  contact:
    name: HoundER Support
    email: support@hounder.io
servers:
  - url: https://api.hounder.io/v1
security:
  - ApiKeyAuth: []
tags:
  - name: Credentials
  - name: Hosts
  - name: Services
  - name: Vulnerabilities
  - name: Websites
paths:
  /credentials:
    get:
      tags:
        - Credentials
      summary: List credentials
      parameters:
        - $ref: '#/components/parameters/q'
        - $ref: '#/components/parameters/status'
        - $ref: '#/components/parameters/ip'
        - $ref: '#/components/parameters/hostname'
        - $ref: '#/components/parameters/credentialType'
        - $ref: '#/components/parameters/username'
        - $ref: '#/components/parameters/url'
        - $ref: '#/components/parameters/operatingSystem'
        - $ref: '#/components/parameters/stealer'
        - $ref: '#/components/parameters/stealerFamily'
        - $ref: '#/components/parameters/malwarePath'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/createdAt'
        - $ref: '#/components/parameters/detectedAt'
        - $ref: '#/components/parameters/infectedAt'
        - $ref: '#/components/parameters/updatedAt'
      responses:
        '200':
          description: >-
            A page of credentials. Usernames and passwords are masked unless the
            finding is not marked redacted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedCredentials'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /credentials/{credentialId}:
    get:
      tags:
        - Credentials
      summary: Get a credential
      parameters:
        - $ref: '#/components/parameters/credentialId'
      responses:
        '200':
          description: The credential.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    properties:
                      credential:
                        $ref: '#/components/schemas/Credential'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      tags:
        - Credentials
      summary: Update a credential's status
      description: Requires a read-write API key. Redacted credentials cannot be updated.
      parameters:
        - $ref: '#/components/parameters/credentialId'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  enum:
                    - open
                    - fp
                    - closed
      responses:
        '200':
          description: The updated credential.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    properties:
                      credential:
                        $ref: '#/components/schemas/Credential'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /hosts:
    get:
      tags:
        - Hosts
      summary: List hosts
      parameters:
        - $ref: '#/components/parameters/q'
        - $ref: '#/components/parameters/ip'
        - $ref: '#/components/parameters/hostname'
        - $ref: '#/components/parameters/asn'
        - $ref: '#/components/parameters/cityName'
        - $ref: '#/components/parameters/countryName'
        - $ref: '#/components/parameters/organizationName'
        - $ref: '#/components/parameters/source'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/createdAt'
        - $ref: '#/components/parameters/updatedAt'
      responses:
        '200':
          description: A page of hosts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedHosts'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /hosts/{hostId}:
    get:
      tags:
        - Hosts
      summary: Get a host
      parameters:
        - $ref: '#/components/parameters/hostId'
      responses:
        '200':
          description: The host.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    properties:
                      host:
                        $ref: '#/components/schemas/Host'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /services:
    get:
      tags:
        - Services
      summary: List services
      parameters:
        - $ref: '#/components/parameters/q'
        - $ref: '#/components/parameters/ip'
        - $ref: '#/components/parameters/hostname'
        - $ref: '#/components/parameters/port'
        - $ref: '#/components/parameters/asn'
        - $ref: '#/components/parameters/cityName'
        - $ref: '#/components/parameters/countryName'
        - $ref: '#/components/parameters/organizationName'
        - $ref: '#/components/parameters/source'
        - $ref: '#/components/parameters/scanId'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/createdAt'
        - $ref: '#/components/parameters/updatedAt'
      responses:
        '200':
          description: A page of services.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedServices'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /services/{serviceId}:
    get:
      tags:
        - Services
      summary: Get a service
      parameters:
        - $ref: '#/components/parameters/serviceId'
      responses:
        '200':
          description: The service.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    properties:
                      service:
                        $ref: '#/components/schemas/Service'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /vulnerabilities:
    get:
      tags:
        - Vulnerabilities
      summary: List vulnerabilities
      parameters:
        - $ref: '#/components/parameters/q'
        - $ref: '#/components/parameters/status'
        - $ref: '#/components/parameters/severity'
        - $ref: '#/components/parameters/ip'
        - $ref: '#/components/parameters/host'
        - $ref: '#/components/parameters/port'
        - $ref: '#/components/parameters/asn'
        - $ref: '#/components/parameters/cityName'
        - $ref: '#/components/parameters/countryName'
        - $ref: '#/components/parameters/organizationName'
        - $ref: '#/components/parameters/engine'
        - $ref: '#/components/parameters/scanId'
        - $ref: '#/components/parameters/vulnerabilityName'
        - $ref: '#/components/parameters/tags'
        - $ref: '#/components/parameters/templateId'
        - $ref: '#/components/parameters/cve'
        - $ref: '#/components/parameters/cwe'
        - $ref: '#/components/parameters/cpe'
        - $ref: '#/components/parameters/cvssScore'
        - $ref: '#/components/parameters/epssScore'
        - $ref: '#/components/parameters/epssPercentile'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/createdAt'
        - $ref: '#/components/parameters/updatedAt'
      responses:
        '200':
          description: A page of vulnerabilities.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedVulnerabilities'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /vulnerabilities/{vulnId}:
    get:
      tags:
        - Vulnerabilities
      summary: Get a vulnerability
      parameters:
        - $ref: '#/components/parameters/vulnId'
      responses:
        '200':
          description: The vulnerability.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    properties:
                      vulnerability:
                        $ref: '#/components/schemas/Vulnerability'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      tags:
        - Vulnerabilities
      summary: Update a vulnerability's severity or status
      description: Requires a read-write API key.
      parameters:
        - $ref: '#/components/parameters/vulnId'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                severity:
                  type: string
                  enum:
                    - critical
                    - high
                    - medium
                    - low
                    - info
                    - unknown
                status:
                  type: string
                  enum:
                    - open
                    - fp
                    - closed
      responses:
        '200':
          description: The updated vulnerability.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    properties:
                      vulnerability:
                        $ref: '#/components/schemas/Vulnerability'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /websites:
    get:
      tags:
        - Websites
      summary: List websites
      parameters:
        - $ref: '#/components/parameters/q'
        - $ref: '#/components/parameters/ip'
        - $ref: '#/components/parameters/hostname'
        - $ref: '#/components/parameters/port'
        - $ref: '#/components/parameters/url'
        - $ref: '#/components/parameters/asn'
        - $ref: '#/components/parameters/cityName'
        - $ref: '#/components/parameters/countryName'
        - $ref: '#/components/parameters/organizationName'
        - $ref: '#/components/parameters/htmlTitle'
        - $ref: '#/components/parameters/httpStatusCode'
        - $ref: '#/components/parameters/webServer'
        - $ref: '#/components/parameters/webTechnologies'
        - $ref: '#/components/parameters/sni'
        - $ref: '#/components/parameters/subjectDn'
        - $ref: '#/components/parameters/issuerDn'
        - $ref: '#/components/parameters/subjectAltNames'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/createdAt'
        - $ref: '#/components/parameters/updatedAt'
      responses:
        '200':
          description: A page of websites.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedWebsites'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /websites/{websiteId}:
    get:
      tags:
        - Websites
      summary: Get a website
      parameters:
        - $ref: '#/components/parameters/websiteId'
      responses:
        '200':
          description: The website.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    properties:
                      website:
                        $ref: '#/components/schemas/Website'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: |
        A HoundER API key, generated from **Organization → API Keys** in the
        platform. Keys look like `H-ER.<20-character-id>.<secret>` — send the
        full value as-is in the `X-API-Key` header. The secret is only shown
        once, at creation time. Keys are created either **read-only** (GET
        requests only) or **read-write** (GET, PATCH, POST, DELETE).
  parameters:
    q:
      name: q
      in: query
      description: Free-text search.
      schema:
        type: string
    status:
      name: status
      in: query
      description: >-
        Filter by status. Prefix with `!` to negate. Repeat the parameter to
        match multiple values.
      schema:
        type: string
        enum:
          - open
          - closed
          - fp
    severity:
      name: severity
      in: query
      description: >-
        Filter by severity. Prefix with `!` to negate. Repeat the parameter to
        match multiple values.
      schema:
        type: string
        enum:
          - critical
          - high
          - medium
          - low
          - info
          - unknown
    ip:
      name: ip
      in: query
      description: Filter by IP address.
      schema:
        type: string
    hostname:
      name: hostname
      in: query
      description: Filter by hostname.
      schema:
        type: string
    host:
      name: host
      in: query
      description: Filter by hostname.
      schema:
        type: string
    port:
      name: port
      in: query
      description: Filter by port number.
      schema:
        type: string
    asn:
      name: geoIP.asn
      in: query
      description: Filter by autonomous system number.
      schema:
        type: integer
    cityName:
      name: geoIP.cityName
      in: query
      description: Filter by city name.
      schema:
        type: string
    countryName:
      name: geoIP.countryName
      in: query
      description: Filter by country name.
      schema:
        type: string
    organizationName:
      name: geoIP.organization
      in: query
      description: Filter by the network organization (from GeoIP data).
      schema:
        type: string
    source:
      name: source
      in: query
      description: Filter by discovery source.
      schema:
        type: string
    engine:
      name: engine
      in: query
      description: >-
        Filter by detection engine. Use `hagent` for agent-detected findings, or
        `!hagent` for externally-detected findings.
      schema:
        type: string
    scanId:
      name: tasks
      in: query
      description: Filter by the ID of the scan that discovered the finding.
      schema:
        type: string
    credentialType:
      name: type
      in: query
      description: >-
        Filter by credential type. Prefix with `!` to negate. Repeat the
        parameter to match multiple values.
      schema:
        type: string
        enum:
          - client
          - employee
          - third_party
          - user
    username:
      name: username
      in: query
      description: Filter by username.
      schema:
        type: string
    url:
      name: url
      in: query
      description: Filter by URL.
      schema:
        type: string
    operatingSystem:
      name: os
      in: query
      description: Filter by the infected host's operating system.
      schema:
        type: string
    stealer:
      name: stealer
      in: query
      description: Filter by infostealer malware name.
      schema:
        type: string
    stealerFamily:
      name: stealerFamily
      in: query
      description: Filter by infostealer malware family.
      schema:
        type: string
    malwarePath:
      name: malwarePath
      in: query
      description: Filter by the malware's file path on the infected host.
      schema:
        type: string
    infectedAt:
      name: infectedAt
      in: query
      description: >-
        Filter by infection date. Supports comparison prefixes: `>`, `<`, `>=`,
        `<=`.
      schema:
        type: string
        format: date-time
    vulnerabilityName:
      name: name
      in: query
      description: Filter by vulnerability name.
      schema:
        type: string
    tags:
      name: tags
      in: query
      description: >-
        Filter by vulnerability tag. Repeat the parameter to match multiple
        values.
      schema:
        type: string
    templateId:
      name: templateID
      in: query
      description: >-
        Filter by the ID of the detection template/check that raised the
        finding.
      schema:
        type: string
    cve:
      name: classification.cve
      in: query
      description: Filter by CVE identifier.
      schema:
        type: string
    cwe:
      name: classification.cwe
      in: query
      description: Filter by CWE identifier.
      schema:
        type: string
    cpe:
      name: classification.cpe
      in: query
      description: Filter by CPE.
      schema:
        type: string
    cvssScore:
      name: classification.cvssScore
      in: query
      description: >-
        Filter by CVSS score. Supports comparison prefixes: `>`, `<`, `>=`,
        `<=`.
      schema:
        type: number
    epssScore:
      name: classification.epssScore
      in: query
      description: >-
        Filter by EPSS score. Supports comparison prefixes: `>`, `<`, `>=`,
        `<=`.
      schema:
        type: number
    epssPercentile:
      name: classification.epssPercentile
      in: query
      description: >-
        Filter by EPSS percentile. Supports comparison prefixes: `>`, `<`, `>=`,
        `<=`.
      schema:
        type: number
    htmlTitle:
      name: htmlTitle
      in: query
      description: Filter by the page's HTML title.
      schema:
        type: string
    httpStatusCode:
      name: httpResponseStatusCode
      in: query
      description: >-
        Filter by HTTP response status code. Supports comparison prefixes: `>`,
        `<`, `>=`, `<=`.
      schema:
        type: integer
    webServer:
      name: webServer
      in: query
      description: Filter by the web server header value.
      schema:
        type: string
    webTechnologies:
      name: webTechnologies
      in: query
      description: Filter by detected web technology.
      schema:
        type: string
    sni:
      name: tlsInfo.sni
      in: query
      description: Filter by the TLS certificate's server name indication.
      schema:
        type: string
    subjectDn:
      name: tlsInfo.subjectDistinguishedName
      in: query
      description: Filter by the TLS certificate's subject distinguished name.
      schema:
        type: string
    issuerDn:
      name: tlsInfo.issuerDistinguishedName
      in: query
      description: Filter by the TLS certificate's issuer distinguished name.
      schema:
        type: string
    subjectAltNames:
      name: tlsInfo.subjectAlternativeNames
      in: query
      description: Filter by one of the TLS certificate's subject alternative names.
      schema:
        type: string
    page:
      name: page
      in: query
      schema:
        type: integer
        minimum: 1
        default: 1
    limit:
      name: limit
      in: query
      schema:
        type: integer
        minimum: 0
        maximum: 100
        default: 10
    createdAt:
      name: createdAt
      in: query
      description: >-
        Filter by creation date. Supports comparison prefixes: `>`, `<`, `>=`,
        `<=`.
      schema:
        type: string
        format: date-time
    detectedAt:
      name: detectedAt
      in: query
      description: >-
        Filter by detection date. Supports comparison prefixes: `>`, `<`, `>=`,
        `<=`.
      schema:
        type: string
        format: date-time
    updatedAt:
      name: updatedAt
      in: query
      description: >-
        Filter by last-updated date. Supports comparison prefixes: `>`, `<`,
        `>=`, `<=`.
      schema:
        type: string
        format: date-time
    credentialId:
      name: credentialId
      in: path
      required: true
      schema:
        type: string
    hostId:
      name: hostId
      in: path
      required: true
      schema:
        type: string
    serviceId:
      name: serviceId
      in: path
      required: true
      schema:
        type: string
    vulnId:
      name: vulnId
      in: path
      required: true
      schema:
        type: string
    websiteId:
      name: websiteId
      in: path
      required: true
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                example: error
              message:
                type: string
                example: Unauthorized
    NotFound:
      description: No finding with that identifier.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                example: fail
              data:
                type: object
  schemas:
    PaginationMeta:
      type: object
      properties:
        totalResults:
          type: integer
        limit:
          type: integer
        page:
          type: integer
        totalPages:
          type: integer
        hasPrevPage:
          type: boolean
        hasNextPage:
          type: boolean
        prevPage:
          type: integer
          nullable: true
        nextPage:
          type: integer
          nullable: true
    Comment:
      type: object
      properties:
        author:
          type: string
          format: email
        text:
          type: string
        createdAt:
          type: string
          format: date-time
    GeoIP:
      type: object
      properties:
        asn:
          type: integer
        organization:
          type: string
        countryISOCode:
          type: string
        countryName:
          type: string
        cityName:
          type: string
        location:
          type: object
          properties:
            longitude:
              type: number
            latitude:
              type: number
    Credential:
      type: object
      properties:
        credentialId:
          type: string
        asset:
          type: string
        hostname:
          type: string
        ip:
          type: string
        os:
          type: string
          description: The infected host's operating system.
        type:
          type: string
          enum:
            - client
            - employee
            - third_party
            - user
        stealer:
          type: string
          description: Infostealer malware name.
        stealerFamily:
          type: string
        malwarePath:
          type: string
          description: The malware's file path on the infected host.
        url:
          type: string
        username:
          type: string
          nullable: true
          description: Masked (e.g. `joh***@example.com`) unless the finding is unredacted.
        password:
          type: string
          nullable: true
          description: Always null in API responses when the finding is redacted.
        status:
          type: string
          enum:
            - open
            - fp
            - closed
        redacted:
          type: boolean
        comments:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        detectedAt:
          type: string
          format: date-time
        infectedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Host:
      type: object
      properties:
        hostId:
          type: string
        hostname:
          type: string
        ip:
          type: string
        source:
          type: string
        geoIP:
          $ref: '#/components/schemas/GeoIP'
        comments:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Service:
      type: object
      properties:
        serviceId:
          type: string
        hostname:
          type: string
        ip:
          type: string
        port:
          type: integer
        protocol:
          type: string
        source:
          type: string
        geoIP:
          $ref: '#/components/schemas/GeoIP'
        comments:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Vulnerability:
      type: object
      properties:
        vulnId:
          type: string
        name:
          type: string
        severity:
          type: string
          enum:
            - critical
            - high
            - medium
            - low
            - info
            - unknown
        priority:
          type: integer
        status:
          type: string
          enum:
            - open
            - fp
            - closed
        engine:
          type: string
          description: Detection engine, e.g. `hagent` for agent-detected findings.
        host:
          type: string
        ip:
          type: string
        port:
          type: string
        geoIP:
          $ref: '#/components/schemas/GeoIP'
        templateID:
          type: string
          description: ID of the detection template/check that raised the finding.
        classification:
          type: object
          properties:
            cpe:
              type: string
            cve:
              type: array
              items:
                type: string
            cvssMetrics:
              type: string
            cvssScore:
              type: number
            cwe:
              type: array
              items:
                type: string
            epssScore:
              type: number
            epssPercentile:
              type: number
        tags:
          type: array
          items:
            type: string
        comments:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Website:
      type: object
      properties:
        websiteId:
          type: string
        url:
          type: string
        hostname:
          type: string
        ip:
          type: string
        port:
          type: string
        geoIP:
          $ref: '#/components/schemas/GeoIP'
        webServer:
          type: string
        webTechnologies:
          type: array
          items:
            type: string
        htmlTitle:
          type: string
        httpResponseStatusCode:
          type: integer
        tlsInfo:
          type: object
          properties:
            sni:
              type: string
            subjectDistinguishedName:
              type: string
            issuerDistinguishedName:
              type: string
            subjectAlternativeNames:
              type: array
              items:
                type: string
        comments:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    PaginatedCredentials:
      allOf:
        - type: object
          properties:
            status:
              type: string
              example: success
            data:
              allOf:
                - $ref: '#/components/schemas/PaginationMeta'
                - type: object
                  properties:
                    credentials:
                      type: array
                      items:
                        $ref: '#/components/schemas/Credential'
    PaginatedHosts:
      type: object
      properties:
        status:
          type: string
          example: success
        data:
          allOf:
            - $ref: '#/components/schemas/PaginationMeta'
            - type: object
              properties:
                hosts:
                  type: array
                  items:
                    $ref: '#/components/schemas/Host'
    PaginatedServices:
      type: object
      properties:
        status:
          type: string
          example: success
        data:
          allOf:
            - $ref: '#/components/schemas/PaginationMeta'
            - type: object
              properties:
                services:
                  type: array
                  items:
                    $ref: '#/components/schemas/Service'
    PaginatedVulnerabilities:
      type: object
      properties:
        status:
          type: string
          example: success
        data:
          allOf:
            - $ref: '#/components/schemas/PaginationMeta'
            - type: object
              properties:
                vulnerabilities:
                  type: array
                  items:
                    $ref: '#/components/schemas/Vulnerability'
    PaginatedWebsites:
      type: object
      properties:
        status:
          type: string
          example: success
        data:
          allOf:
            - $ref: '#/components/schemas/PaginationMeta'
            - type: object
              properties:
                websites:
                  type: array
                  items:
                    $ref: '#/components/schemas/Website'
