DomScan Typosquatting API

Detect typosquatting and brand impersonation risks

Operations 6

GET /v1/typos Detect typosquatting threats #
GET /v1/typos/threats Run a live typosquatting threat scan #
GET /v1/typos/report Generate a brand protection report #
GET /v1/typos/quick Find registered typo domains quickly #
GET /v1/typos/permutations Generate typo permutations #
GET /v1/typos/score Calculate protection score #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/domscan-typosquatting-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

domscan-typosquatting-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DomScan Typosquatting API
  description: DomScan is a domain intelligence API providing domain analysis tools.
  version: 2.15.0
  contact:
    name: DomScan Support
    url: https://domscan.net
    email: support@domscan.net
  termsOfService: https://domscan.net/legal/terms
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
- url: https://domscan.net
  description: Production server
security:
- apiKey: []
tags:
- name: Typosquatting
  description: Detect typosquatting and brand impersonation risks
paths:
  /v1/typos:
    get:
      tags:
      - Typosquatting
      summary: Detect typosquatting threats
      description: Generate typosquatting permutations using multiple techniques (character swap, missing char, extra char, homoglyphs, etc.) and optionally check which are registered. Includes risk scoring based on similarity to original domain.
      operationId: getTyposquatting
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to analyze for typosquatting risks
        schema:
          type: string
          example: google.com
      - name: check_registered
        in: query
        description: Check if generated typos are actually registered. Disabled by default and capped for faster responses.
        schema:
          type: boolean
          default: false
      - name: limit
        in: query
        description: Maximum permutations to generate and check
        schema:
          type: integer
          default: 100
          minimum: 10
          maximum: 500
      - name: include_tld_swap
        in: query
        description: Include TLD variation permutations (e.g., .co instead of .com)
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Typosquatting analysis with risk summary
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TyposResponse'
              example:
                domain: google.com
                name: google
                tld: com
                permutations_generated: 100
                permutations_checked: 95
                registered_typos:
                - domain: gooogle.com
                  type: extra_char
                  risk: high
                  registered: true
                - domain: goggle.com
                  type: char_swap
                  risk: critical
                  registered: true
                available_typos: 50
                risk_summary:
                  critical: 2
                  high: 5
                  medium: 10
                  low: 28
                threat_level: high
                checked_at: '2024-01-15T12:00:00Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 2
        variants:
        - parameter: check_registered
          equals: true
          credits: 3
        note: 2 credits by default; 3 credits when check_registered=true.
  /v1/typos/threats:
    get:
      tags:
      - Typosquatting
      summary: Run a live typosquatting threat scan
      description: Generate up to the requested number of typo variants, then check at most 75 supported variants for live registration and DNS activity. scan_summary reports the live-check limit and whether coverage was truncated.
      operationId: analyzeTyposquattingThreats
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to analyze
        schema:
          type: string
          example: example.com
      - name: limit
        in: query
        description: Maximum variants to generate. Live registration checks are capped at 75.
        schema:
          type: integer
          minimum: 50
          maximum: 500
          default: 200
      - name: include_tld_swap
        in: query
        description: Include alternate-TLD variants
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Live typosquatting threat analysis
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TyposThreatAnalysisResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          description: Rate limit exceeded
        '500':
          description: Threat analysis failed
      x-domscan-credits:
        model: per_request
        default: 12
  /v1/typos/report:
    get:
      tags:
      - Typosquatting
      summary: Generate a brand protection report
      description: Generate up to 300 variants, live-check at most 60 supported variants, and return an executive summary, coverage metadata, defensive registration priorities, and monitoring recommendations.
      operationId: generateTyposquattingReport
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to analyze
        schema:
          type: string
          example: example.com
      responses:
        '200':
          description: Brand protection report
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandProtectionReportResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          description: Rate limit exceeded
        '500':
          description: Report generation failed
      x-domscan-credits:
        model: per_request
        default: 18
  /v1/typos/quick:
    get:
      tags:
      - Typosquatting
      summary: Find registered typo domains quickly
      description: Check a smaller typo set and return only registered variants with their permutation type and risk level.
      operationId: quickTyposquattingCheck
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to analyze
        schema:
          type: string
          example: example.com
      - name: limit
        in: query
        description: Maximum variants to check
        schema:
          type: integer
          minimum: 20
          maximum: 200
          default: 100
      responses:
        '200':
          description: Registered typo domains
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuickTyposResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          description: Rate limit exceeded
        '500':
          description: Quick threat check failed
      x-domscan-credits:
        model: per_request
        default: 6
  /v1/typos/permutations:
    get:
      tags:
      - Typosquatting
      summary: Generate typo permutations
      description: Generate typosquatting permutations without checking registration status. Faster endpoint for generating variations only, useful for proactive brand protection planning.
      operationId: getTypoPermutations
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to generate permutations for
        schema:
          type: string
          example: example.com
      - name: limit
        in: query
        description: Maximum permutations to generate
        schema:
          type: integer
          default: 200
          minimum: 10
          maximum: 1000
      - name: include_tld_swap
        in: query
        description: Include TLD variation permutations
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Generated permutations grouped by type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermutationsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 1
  /v1/typos/score:
    get:
      tags:
      - Typosquatting
      summary: Calculate protection score
      description: Calculate a typosquatting protection score for a domain. Shows how vulnerable the domain is based on name characteristics and optionally factors in registered typos.
      operationId: getProtectionScore
      parameters:
      - name: domain
        in: query
        required: true
        description: Domain to score
        schema:
          type: string
          example: example.com
      - name: check_registered
        in: query
        description: Factor in registered typos when calculating score (slower)
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: Protection score analysis
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProtectionScoreResponse'
              example:
                domain: example.com
                name: example
                tld: com
                protection:
                  score: 65
                  grade: C
                  factors:
                    length_score: 70
                    uniqueness_score: 60
                    keyboard_proximity_score: 55
                  recommendations:
                  - Consider registering common typo variations
                  - Monitor for homoglyph attacks
                checked_at: '2024-01-15T12:00:00Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-domscan-credits:
        model: per_request
        default: 1
components:
  schemas:
    TypoFamilySummary:
      type: object
      description: Additive typo family and risk rollup for generated, checked, available, and registered variants.
      properties:
        generated_by_type:
          type: object
          additionalProperties:
            type: integer
        generated_by_risk:
          type: object
          additionalProperties:
            type: integer
        registered_by_type:
          type: object
          additionalProperties:
            type: integer
        registered_by_risk:
          type: object
          additionalProperties:
            type: integer
        top_generated_family:
          type:
          - string
          - 'null'
        top_registered_family:
          type:
          - string
          - 'null'
        critical_or_high_generated_count:
          type: integer
        critical_or_high_registered_count:
          type: integer
        coverage_ratio:
          type: number
        checked_count:
          type: integer
        available_count:
          type: integer
        unknown_count:
          type: integer
        omitted_count:
          type: integer
        include_tld_swap:
          type: boolean
        requested_limit:
          type: integer
    QuickTyposResponse:
      type: object
      required:
      - domain
      - registered_typos
      - count
      - threat_level
      - checked_at
      properties:
        domain:
          type: string
        registered_typos:
          type: array
          items:
            type: object
            required:
            - domain
            - type
            - risk
            - description
            properties:
              domain:
                type: string
              type:
                type: string
              risk:
                type: string
                enum:
                - critical
                - high
                - medium
                - low
              description:
                type: string
        count:
          type: integer
        threat_level:
          type: string
          enum:
          - none
          - low
          - medium
          - high
          - critical
        coverage:
          type: object
          properties:
            requested:
              type: integer
            definitive:
              type: integer
            unknown:
              type: integer
            omitted:
              type: integer
        checked_at:
          type: string
          format: date-time
        scan_duration_ms:
          type: integer
        meta:
          type: object
    PermutationsResponse:
      type: object
      description: Typo permutations without registration check
      properties:
        domain:
          type: string
        name:
          type: string
        tld:
          type: string
        permutations_count:
          type: integer
        permutations:
          type: array
          items:
            $ref: '#/components/schemas/TypoPermutation'
        by_type:
          type: object
          description: Permutations grouped by type
        family_summary:
          $ref: '#/components/schemas/TypoFamilySummary'
        meta:
          type: object
          properties:
            generation_ms:
              type: integer
    ProtectionGapSummary:
      type: object
      description: Additive protection-gap summary by variant family, risk, and defensive TLD focus.
      properties:
        tld_tier:
          type: string
          enum:
          - high_value
          - medium_value
          - standard
        priority_families:
          type: array
          items:
            type: object
            properties:
              family:
                type: string
              generated_count:
                type: integer
              registered_count:
                type: integer
        critical_or_high_generated_count:
          type: integer
        vulnerability_count:
          type: integer
        defensive_tlds:
          type: array
          items:
            type: string
        recommendation_focus:
          type: string
    BrandProtectionReportResponse:
      type: object
      required:
      - domain
      - generated_at
      - executive_summary
      - threat_analysis
      - estimated_risk_exposure
      properties:
        domain:
          type: string
        generated_at:
          type: string
          format: date-time
        executive_summary:
          type: object
          properties:
            threat_level:
              type: string
            protection_grade:
              type: string
            active_threats:
              type: integer
            registered_typos:
              type: integer
            immediate_action_required:
              type: boolean
        threat_analysis:
          $ref: '#/components/schemas/TyposThreatAnalysisResponse'
        defensive_registration_priority:
          type: object
        monitoring_recommendations:
          type: array
          items:
            type: string
        estimated_risk_exposure:
          type: string
          enum:
          - minimal
          - low
          - moderate
          - high
          - severe
        meta:
          type: object
    TyposThreatAnalysisResponse:
      type: object
      description: Live registration and DNS analysis across generated typo variants.
      required:
      - domain
      - scan_summary
      - threat_level
      - threats
      - checked_at
      properties:
        domain:
          type: string
        name:
          type: string
        tld:
          type: string
        scan_summary:
          type: object
          required:
          - permutations_generated
          - permutations_checked
          - registered_count
          - active_threats
          - available_for_defensive
          properties:
            permutations_generated:
              type: integer
            permutations_checked:
              type: integer
            permutations_submitted:
              type: integer
            definitive_results:
              type: integer
            unknown_results:
              type: integer
            omitted_results:
              type: integer
            registered_count:
              type: integer
            active_threats:
              type: integer
            available_for_defensive:
              type: integer
            check_limit:
              type: integer
            coverage_truncated:
              type: boolean
        threat_level:
          type: string
          enum:
          - none
          - low
          - medium
          - high
          - critical
        protection_score:
          type: object
        threats:
          type: array
          items:
            $ref: '#/components/schemas/TyposThreatDomain'
        defensive_opportunities:
          type: array
          items:
            $ref: '#/components/schemas/TypoPermutation'
        risk_breakdown:
          type: object
        recommendations:
          type: array
          items:
            type: string
        checked_at:
          type: string
          format: date-time
        scan_duration_ms:
          type: integer
        meta:
          type: object
    TyposThreatDomain:
      type: object
      required:
      - domain
      - type
      - risk
      - dns_active
      - has_website
      - threat_indicators
      - threat_score
      properties:
        domain:
          type: string
        type:
          type: string
        risk:
          type: string
          enum:
          - critical
          - high
          - medium
          - low
        description:
          type: string
        dns_active:
          type: boolean
        has_website:
          type: boolean
        has_mx:
          type: boolean
        infrastructure:
          type: object
        threat_indicators:
          type: array
          items:
            type: string
        threat_score:
          type: integer
          minimum: 0
          maximum: 100
    TypoPermutation:
      type: object
      properties:
        domain:
          type: string
          description: Typo domain
        type:
          type: string
          description: Permutation type (char_swap, extra_char, etc.)
        risk:
          type: string
          enum:
          - critical
          - high
          - medium
          - low
        registered:
          type: boolean
          description: Whether the typo is registered
        checked_at:
          type: string
          format: date-time
    ErrorResponse:
      type: object
      description: Standard error response format
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Error code for programmatic handling
              example: INVALID_DOMAIN
            type:
              type: string
              enum:
              - authentication_error
              - credits_error
              - permission_error
              - not_found_error
              - conflict_error
              - rate_limit_error
              - timeout_error
              - validation_error
              - upstream_error
              - api_error
              - request_error
              description: Stable error category used by official SDK subclasses
            message:
              type: string
              description: Human-readable error message
              example: Invalid domain format
            status:
              type: integer
              minimum: 400
              maximum: 599
              description: HTTP status repeated in the JSON error for queue and log processors
            retryable:
              type: boolean
              description: Whether retrying can be appropriate after applying retry guidance
            request_id:
              type: string
              description: Request identifier matching the X-Request-Id response header
            suggestion:
              type: string
              description: Suggestion for fixing the error
            details:
              type: object
              description: Optional structured context for the error
              additionalProperties: true
            retry_after:
              type: integer
              minimum: 0
              description: Seconds to wait before retrying when the error is temporary
              example: 300
            docs_url:
              type: string
              description: Link to relevant documentation
              example: /docs#parameters
          required:
          - type
          - code
          - message
          - status
          - retryable
          - request_id
          - docs_url
    ProtectionScoreResponse:
      type: object
      description: Typosquatting protection score
      properties:
        domain:
          type: string
        name:
          type: string
        tld:
          type: string
        protection:
          type: object
          properties:
            score:
              type: integer
              minimum: 0
              maximum: 100
            grade:
              type: string
              enum:
              - A
              - B
              - C
              - D
              - F
            factors:
              type: object
            recommendations:
              type: array
              items:
                type: string
        protection_gap_summary:
          $ref: '#/components/schemas/ProtectionGapSummary'
        registered_typos_checked:
          type: integer
        availability_coverage:
          type: object
          properties:
            requested:
              type: integer
            definitive:
              type: integer
            unknown:
              type: integer
            omitted:
              type: integer
        checked_at:
          type: string
          format: date-time
    TyposResponse:
      type: object
      description: Typosquatting detection results
      properties:
        domain:
          type: string
          description: Domain analyzed
        name:
          type: string
          description: Domain name without TLD
        tld:
          type: string
          description: TLD
        permutations_generated:
          type: integer
          description: Number of permutations generated
        permutations_checked:
          type: integer
          description: Number actually checked
        registered_typos:
          type: array
          description: Registered typo domains found
          items:
            $ref: '#/components/schemas/TypoPermutation'
        available_typos:
          type: integer
          description: Number of available typo domains
        unknown_typos:
          type: integer
        risk_summary:
          type: object
          properties:
            critical:
              type: integer
            high:
              type: integer
            medium:
              type: integer
            low:
              type: integer
        threat_level:
          type: string
          enum:
          - none
          - low
          - medium
          - high
          - critical
        family_summary:
          $ref: '#/components/schemas/TypoFamilySummary'
        checked_at:
          type: string
          format: date-time
  responses:
    Unauthorized:
      description: 'Authentication required. All API endpoints require a valid API key (x-api-key header or Authorization: Bearer) or an active session cookie.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: AUTH_REQUIRED
              message: 'Authentication required. Provide an API key via x-api-key header or Authorization: Bearer header.'
              docs: https://domscan.net/docs/authentication
              get_key: https://domscan.net/login
    PaymentRequired:
      description: Insufficient credits for this request
      headers:
        X-Credits-Remaining:
          schema:
            type: integer
          description: Credits remaining on your API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: INSUFFICIENT_CREDITS
              message: Insufficient credits. This endpoint costs 2 credits but you have 0. Purchase more at https://domscan.net/billing or wait for your monthly reset.
              credits_remaining: 0
              credits_required: 2
              purchase_url: https://domscan.net/billing
    RateLimited:
      description: Rate limit exceeded. Free accounts can sustain 120 requests per minute per account with a burst capacity of 60. Free bulk traffic is additionally limited to 20 requests per minute per account across all bulk endpoints and 100 per minute per IPv4 address or IPv6 /56 network. Paid accounts can sustain 600 requests per minute with a burst capacity of 120.
      headers:
        Retry-After:
          schema:
            type: integer
          description: Seconds to wait before retrying
        X-RateLimit-Plan:
          schema:
            type: string
            enum:
            - free
            - paid
          description: The account plan whose policy was applied.
        X-RateLimit-Limit:
          schema:
            type: integer
          description: The immediate burst capacity, or the active bulk fixed-window limit when a bulk-specific limit is exceeded.
        X-RateLimit-Remaining:
          schema:
            type: integer
            example: 0
          description: Immediate burst tokens remaining, or requests remaining in the active bulk fixed window.
        X-RateLimit-Policy:
          schema:
            type: string
          description: Machine-readable summary of the active tier and limit policy.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: RATE_LIMITED
              message: Rate limit exceeded. Please wait before making more requests.
    BadRequest:
      description: Bad request - invalid parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: BAD_REQUEST
              message: Invalid domain format
              suggestion: Domain must be a valid format like example.com
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: 'API key for authentication. Get yours free at https://domscan.net. Also accepts Authorization: Bearer header.'
    sessionCookie:
      type: apiKey
      in: cookie
      name: session
      description: Active DomScan browser session. Used by account-management endpoints.
externalDocs:
  description: Full API Documentation
  url: https://domscan.net/docs
x-rapidapi-product: domscan
x-domscan-rate-limits:
  free:
    general:
      scope: account
      sustained_requests_per_minute: 120
      burst_capacity: 60
      shared_across_api_keys_and_sessions: true
    bulk:
      scope: all bulk endpoints combined
      account_requests_per_minute: 20
      network_requests_per_minute: 100
      ipv6_network_prefix: 56
  paid:
    general:
      scope: API key for key-authenticated requests; IP for browser sessions
      sustained_requests_per_minute: 600
      burst_capacity: 120
    free_bulk_budget_applies: false
  response:
    status: 429
    retry_header: Retry-After
    headers_on_every_authenticated_response:
    - X-RateLimit-Plan
    - X-RateLimit-Limit
    - X-RateLimit-Remaining
    - X-RateLimit-Policy
    burst_headers:
    - X-RateLimit-Limit
    - X-RateLimit-Remaining
    policy_header: X-RateLimit-Policy
x-domscan-response-metadata:
  compatibility: additive response headers; established JSON success bodies are unchanged
  headers:
    X-Request-Id: Unique request identifier for logs and support
    X-API-Version: DomScan API release version
    X-Response-Time: Server processing duration in milliseconds
    X-Credits-Requested: Credits requested before refund settlement
    X-Credits-Charged: Credits retained after settlement
    X-Credits-Refunded: Credits returned during settlement
    X-Credits-Remaining: Authenticated account balance after the request
    X-Data-Freshness: fresh, cached, stale, mixed, or unknown
    X-RateLimit-Limit: Active burst capacity
    X-RateLimit-Remaining: Remaining burst capacity
    X-RateLimit-Plan: Active plan, or not_applicable before authentication
    X-RateLimit-Policy: Machine-readable active rate policy