DomScan Brand Protection API
The Brand Protection API from DomScan — 5 operation(s) for brand protection.
The Brand Protection API from DomScan — 5 operation(s) for brand protection.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/domscan-brand-protection-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: DomScan Brand Protection 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: Brand Protection
paths:
/v1/brand-monitor:
get:
tags:
- Brand Protection
summary: Get brand monitors
description: List monitored domains for the authenticated account. Accepts an API key or an active DomScan session.
operationId: getBrandMonitors
security:
- apiKey: []
responses:
'200':
description: Monitored domains and current threat counts
content:
application/json:
schema:
type: object
required:
- brands
- total
- updated_at
properties:
brands:
type: array
items:
type: object
required:
- domain
- scan_count
- registered_typos
- new_threats_since_baseline
- has_alerts
properties:
domain:
type: string
added_at:
type: string
format: date-time
last_scan_at:
type:
- string
- 'null'
format: date-time
scan_count:
type: integer
registered_typos:
type: integer
new_threats_since_baseline:
type: integer
has_alerts:
type: boolean
scan_status:
type: string
enum:
- pending
- ready
- failed
total:
type: integer
updated_at:
type: string
format: date-time
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'429':
$ref: '#/components/responses/RateLimited'
x-domscan-credits:
model: per_request
default: 1
post:
tags:
- Brand Protection
summary: Create brand monitor
description: Start monitoring a domain for new typosquatting registrations, with optional email and webhook alerts.
operationId: createBrandMonitor
security:
- apiKey: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- domain
properties:
domain:
type: string
description: Primary domain to monitor
example: example.com
alert_email:
type: string
format: email
alert_webhook:
type: string
format: uri
responses:
'201':
description: Brand monitor created
content:
application/json:
schema:
type: object
required:
- success
- message
- brand
properties:
success:
type: boolean
message:
type: string
brand:
type: object
properties:
domain:
type: string
baseline_threats:
type: integer
scan_status:
type: string
enum:
- pending
- ready
- failed
initial_scan:
type:
- object
- 'null'
'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: 3
delete:
tags:
- Brand Protection
summary: Delete brand monitor
description: Stop monitoring a domain for new brand threats.
operationId: deleteBrandMonitor
security:
- apiKey: []
parameters:
- name: domain
in: query
required: true
description: Monitored domain to remove
schema:
type: string
example: example.com
responses:
'200':
description: Brand monitor removed
content:
application/json:
schema:
type: object
required:
- success
- message
properties:
success:
type: boolean
message:
type: string
'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/brand-monitor/scan:
post:
tags:
- Brand Protection
summary: Trigger brand scan
description: Manually trigger a brand protection scan to check for new threats.
operationId: triggerBrandScan
security:
- apiKey: []
parameters:
- name: domain
in: query
required: true
description: Monitored domain to scan
schema:
type: string
example: example.com
responses:
'200':
description: Scan results
content:
application/json:
schema:
type: object
required:
- success
- scan
- alert
properties:
success:
type: boolean
scan:
type:
- object
- 'null'
alert:
type:
- object
- 'null'
properties:
level:
type: string
enum:
- medium
- high
- critical
message:
type: string
'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: 6
/v1/brand-monitor/status:
get:
tags:
- Brand Protection
summary: Get brand monitor status
description: Get detailed baseline, current threat, and alert status for a monitored domain.
operationId: getBrandMonitorStatus
security:
- apiKey: []
parameters:
- name: domain
description: Monitored domain whose status you want.
in: query
required: true
schema:
type: string
example: example.com
responses:
'200':
description: Detailed brand monitor status
content:
application/json:
schema:
type: object
required:
- brand
- threats
- alerts
properties:
brand:
type: object
properties:
domain:
type: string
name:
type: string
tld:
type: string
added_at:
type: string
format: date-time
last_scan_at:
type:
- string
- 'null'
format: date-time
scan_count:
type: integer
threats:
type: object
properties:
baseline_count:
type: integer
current_count:
type: integer
new_since_baseline:
type: integer
new_threat_domains:
type: array
items:
type: string
all_registered:
type: array
items:
type: string
alerts:
type: object
properties:
email:
type:
- string
- 'null'
webhook:
type:
- string
- 'null'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'404':
description: Domain is not monitored
'429':
$ref: '#/components/responses/RateLimited'
x-domscan-credits:
model: per_request
default: 1
/v1/brand-monitor/reset-baseline:
post:
tags:
- Brand Protection
summary: Reset brand monitor baseline
description: Acknowledge current threats by resetting the baseline for a monitored domain.
operationId: resetBrandMonitorBaseline
security:
- apiKey: []
parameters:
- name: domain
description: Monitored domain whose baseline should be reset.
in: query
required: true
schema:
type: string
example: example.com
responses:
'200':
description: Baseline reset
content:
application/json:
schema:
type: object
required:
- success
- message
properties:
success:
type: boolean
message:
type: string
'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/brand-monitor/alerts:
put:
tags:
- Brand Protection
summary: Update brand monitor alerts
description: Update email and webhook alert destinations for a monitored domain.
operationId: updateBrandMonitorAlerts
security:
- apiKey: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- domain
properties:
domain:
type: string
example: example.com
alert_email:
type:
- string
- 'null'
format: email
alert_webhook:
type:
- string
- 'null'
format: uri
responses:
'200':
description: Alert settings updated
content:
application/json:
schema:
type: object
required:
- success
- message
properties:
success:
type: boolean
message:
type: string
'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:
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
schemas:
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
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