Doppel scan API

The scan API from Doppel — 2 operation(s) for scan.

OpenAPI Specification

doppel-scan-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 1.0.0
  title: Doppel alerts scan API
  description: APIs to interface with Doppel's core system for social engineering defense — Brand Protection alerts, URL scanning, reports, protected assets, and Human Risk Management campaigns.
  contact:
    name: Doppel API Support
    url: https://doppel.readme.io/
servers:
- url: https://api.doppel.com/v1
tags:
- name: scan
paths:
  /scan:
    post:
      description: Submit a URL for analysis to determine if it contains potentially suspicious or malicious content. Doppel will analyze the submitted URL and categorize its suspiciousness on a scale of low, medium, and high. Based on the suspiciousness of the URL, an alert can be created in our system, facilitating further triage actions.
      summary: Submit Scan Url
      operationId: scan
      tags:
      - scan
      x-google-backend:
        address: https://external-api-gateway-725058953679.us-west1.run.app
        jwt_audience: https://external-api-gateway-725058953679.us-west1.run.app
        path_translation: APPEND_PATH_TO_ADDRESS
        deadline: 30
      parameters:
      - $ref: '#/components/parameters/XOrganizationCodeHeader'
      - name: Content-Type
        in: header
        required: true
        description: ''
        schema:
          type: string
          enum:
          - application/json
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - url
              properties:
                url:
                  type: string
                  description: URL to scan
                  format: uri
                  example: https://example.com
                associated_urls:
                  type: array
                  description: URLs associated with the main URL
                  items:
                    type: string
                    format: uri
                  example:
                  - https://associated1.com
                  - https://associated2.com
        required: true
      responses:
        '201':
          description: Scan for URL created successfully
          headers: {}
          content:
            application/json:
              schema:
                type: object
                properties:
                  scan_id:
                    type: string
                    format: uuid
                    description: ID of the created scan
        '400':
          description: Invalid input
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - api_key: []
        user_api_key: []
      x-google-quota:
        metricCosts:
          submit-scan-request: 1
  /scan/result:
    get:
      description: Get the suspiciousness result of a scan given the submitted scan's ID.
      summary: Get Scan Result
      operationId: get_scan_result
      tags:
      - scan
      x-google-backend:
        address: https://external-api-gateway-725058953679.us-west1.run.app
        jwt_audience: https://external-api-gateway-725058953679.us-west1.run.app
        path_translation: APPEND_PATH_TO_ADDRESS
        deadline: 30
      parameters:
      - $ref: '#/components/parameters/XOrganizationCodeHeader'
      - name: scan_id
        in: query
        required: true
        description: ID of the scan to retrieve results for
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successfully retrieved scan results
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                    - PENDING
                    - COMPLETED
                    description: Current status of the scan
                  url:
                    type: string
                    description: URL that was submitted to be scanned for suspiciousness
                  scan_id:
                    type: string
                    format: uuid
                    description: ID of the scan
                  results:
                    type: array
                    description: Array of scan results (empty if status is PENDING)
                    items:
                      type: object
                      properties:
                        suspiciousness:
                          type: string
                          description: Suspiciousness of the scan result
                          enum:
                          - low
                          - medium
                          - high
                          - na
                        category:
                          type: string
                          description: Scan Type - what type of scan was performed
                          enum:
                          - phishing
                        scan_data:
                          type: object
                          description: Additional data about the scan result
                          additionalProperties: true
                        created_at:
                          type: string
                          format: date-time
                          description: Timestamp when the scan result was created
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Scan not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - api_key: []
        user_api_key: []
      x-google-quota:
        metricCosts:
          get-scan-result-request: 1
components:
  schemas:
    ErrorResponse:
      title: ErrorResponse
      description: Standard error response returned for all non-2xx responses. Contains a single `message` field with a human-readable error description.
      type: object
      required:
      - message
      properties:
        message:
          type: string
          description: Human-readable error description.
          example: This is an error message
  securitySchemes:
    api_key:
      type: apiKey
      name: x-api-key
      in: header
      description: API key from Doppel Vision API settings. Required for gateway authentication and quota.
    user_api_key:
      type: apiKey
      name: x-user-api-key
      in: header
      description: User API key from Doppel Vision API settings. Required together with x-api-key for authenticated requests.
x-readme:
  parameter-ordering:
  - path
  - header
  - query
  - body
  - cookie
  - form