Doppel protected-assets API

The protected-assets API from Doppel — 3 operation(s) for protected-assets.

OpenAPI Specification

doppel-protected-assets-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 1.0.0
  title: Doppel alerts protected-assets 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: protected-assets
paths:
  /protected-asset:
    post:
      description: Create a new protected asset for one or more brands. Protected assets are URLs, handles, or identifiers that your organization wants to monitor for unauthorized use. The asset must be unique per organization, and the brands must belong to your organization.
      summary: Create Protected Asset
      operationId: create-protected-asset
      tags:
      - protected-assets
      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:
              $ref: '#/components/schemas/CreateProtectedAssetRequest'
        required: true
      responses:
        '201':
          description: Protected asset created successfully
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateProtectedAssetResponse'
        '400':
          description: Invalid request parameters
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Brand(s) not found
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Asset already exists but is archived
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation error - invalid request body (e.g., missing required fields, invalid format)
          headers: {}
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: array
                    items:
                      type: object
        '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: []
  /protected-asset/{id}:
    delete:
      x-google-quota:
        metricCosts:
          delete-protected-asset-request: 1
      description: Delete a protected asset. This removes the asset from your organization's protected assets list, meaning it will no longer suppress alerts for matching content.
      summary: Delete Protected Asset
      operationId: delete-protected-asset
      tags:
      - protected-assets
      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: id
        in: path
        required: true
        description: The unique identifier (UUID) of the protected asset to delete
        schema:
          type: string
      responses:
        '200':
          description: Protected asset deleted successfully
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteProtectedAssetResponse'
        '400':
          description: Invalid request parameters (e.g., invalid UUID format)
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Protected asset not found or does not belong to your organization
          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: []
  /protected-assets:
    get:
      description: List protected assets for the authenticated organization. Filter by platform and/or brand IDs/brand names, with pagination support. Protected assets are URLs, handles, or identifiers that your organization wants to monitor for unauthorized use across various platforms.
      summary: List Protected Assets
      operationId: list-protected-assets
      tags:
      - protected-assets
      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
      parameters:
      - $ref: '#/components/parameters/XOrganizationCodeHeader'
      - name: platform_name
        in: query
        description: Filter by platform (e.g., linkedin, facebook, twitter, domains, instagram)
        required: false
        schema:
          type: string
          enum:
          - domains
          - twitter
          - facebook
          - instagram
          - youtube
          - tiktok
          - linkedin
          - reddit
          - github
          - telegram
          - discord
          - pinterest
          - snapchat
          - whatsapp
          - medium
          - tumblr
          - twitch
          - spotify
          - threads
          - bluesky
          - truth_social
          - weibo
          - wechat
          - apple_app_store
          - google_play_store
          - amazon
          - ebay
          - alibaba
          - etsy
          - walmart
          - shopee
          - facebook_marketplace
          - coinbase
          - binance
          - opensea
          - email
          - darkweb
          - telco
          - google_ads
          - facebook_ads
          - bing_ads
      - name: brand_ids
        in: query
        description: Filter by multiple brand IDs (comma-separated, max 100)
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
          maxItems: 100
      - name: brand_names
        in: query
        description: Filter by multiple brand names (comma-separated, case-insensitive, max 100)
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
          maxItems: 100
      - name: limit
        in: query
        description: Maximum number of results to return
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 1000
          default: 100
      - name: offset
        in: query
        description: Number of results to skip for pagination
        required: false
        schema:
          type: integer
          minimum: 0
          default: 0
      responses:
        '200':
          description: Successfully retrieved protected assets
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListProtectedAssetsResponse'
        '400':
          description: Invalid request parameters
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation error - invalid query parameters (e.g., invalid enum value, out of range)
          headers: {}
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: array
                    items:
                      type: object
        '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: []
components:
  schemas:
    CreateProtectedAssetResponse:
      title: CreateProtectedAssetResponse
      description: Response model for created protected asset
      type: object
      required:
      - data
      - message
      properties:
        data:
          $ref: '#/components/schemas/ProtectedAssetResponse'
        message:
          type: string
          description: Success message
          example: Protected asset created successfully
    ListProtectedAssetsResponse:
      title: ListProtectedAssetsResponse
      description: Response model for list of protected assets
      type: object
      required:
      - data
      - count
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ProtectedAssetResponse'
        count:
          type: integer
          description: Total number of protected assets returned
    ProtectedAssetResponse:
      title: ProtectedAssetResponse
      description: Response model for a single protected asset
      type: object
      required:
      - id
      - brand_ids
      - asset_value
      - created_at
      properties:
        id:
          type: string
          description: Unique identifier for the protected asset
        brand_ids:
          type: array
          items:
            type: string
          description: List of brand IDs associated with this protected asset
        platform:
          type: string
          description: Specific platform (e.g., linkedin, facebook, twitter, domains, instagram). Shown as "Type" in the Doppel dashboard.
          enum:
          - domains
          - twitter
          - facebook
          - instagram
          - youtube
          - tiktok
          - linkedin
          - reddit
          - github
          - telegram
          - discord
          - pinterest
          - snapchat
          - whatsapp
          - medium
          - tumblr
          - twitch
          - spotify
          - threads
          - bluesky
          - truth_social
          - weibo
          - wechat
          - apple_app_store
          - google_play_store
          - amazon
          - ebay
          - alibaba
          - etsy
          - walmart
          - shopee
          - facebook_marketplace
          - coinbase
          - binance
          - opensea
          - email
          - darkweb
          - telco
          - google_ads
          - facebook_ads
          - bing_ads
        asset_value:
          type: string
          description: The protected asset value (URL, handle, identifier, etc.)
        created_at:
          type: string
          format: date-time
          description: Timestamp when the asset was created
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the asset was last updated
        updated_by:
          type: string
          description: User who last updated the asset. Changes made by Doppel on your behalf are shown as "Doppel". Null when the last editor is unknown.
    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
    CreateProtectedAssetRequest:
      title: CreateProtectedAssetRequest
      description: Request model for creating a protected asset
      type: object
      required:
      - brand_ids
      - asset_value
      properties:
        brand_ids:
          type: array
          items:
            type: string
            format: uuid
          minItems: 1
          maxItems: 100
          description: List of brand IDs to associate with asset (1-100 brand IDs)
          example:
          - 123e4567-e89b-12d3-a456-426614174000
        asset_value:
          type: string
          description: The protected asset value (URL, handle, identifier, etc.)
          example: https://linkedin.com/company/example
    DeleteProtectedAssetResponse:
      title: DeleteProtectedAssetResponse
      description: Response model for deleted protected asset
      type: object
      required:
      - id
      - message
      properties:
        id:
          type: string
          description: ID of the deleted protected asset
          example: 123e4567-e89b-12d3-a456-426614174000
        message:
          type: string
          description: Success message
          example: Protected asset deleted successfully
  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