DomScan Watchlist API
Domain monitoring for expiration and availability (requires login)
Domain monitoring for expiration and availability (requires login)
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-watchlist-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 Watchlist 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: Watchlist
description: Domain monitoring for expiration and availability (requires login)
paths:
/v1/watchlist:
get:
tags:
- Watchlist
summary: Get watchlist
description: Get list of domains in your watchlist for expiration monitoring. Accepts an API key or active DomScan session.
operationId: getWatchlist
security:
- apiKey: []
responses:
'200':
description: Watchlist domains
content:
application/json:
schema:
$ref: '#/components/schemas/WatchlistResponse'
example:
watchlist:
- domain: example.com
added_at: '2024-01-01T00:00:00Z'
status: registered
last_checked: '2024-01-15T12:00:00Z'
total: 1
updated_at: '2024-01-15T12:00:00Z'
'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:
- Watchlist
summary: Add to watchlist
description: Add a domain to your watchlist for expiration monitoring. Accepts an API key or active DomScan session.
operationId: addToWatchlist
security:
- apiKey: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- domain
properties:
domain:
type: string
description: Domain to watch
example: example.com
notify_email:
type: string
format: email
description: Email for notifications (optional)
responses:
'201':
description: Domain added to watchlist
content:
application/json:
schema:
$ref: '#/components/schemas/WatchlistAddResponse'
'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
delete:
tags:
- Watchlist
summary: Remove from watchlist
description: Remove a domain from your watchlist. Accepts an API key or active DomScan session.
operationId: removeFromWatchlist
security:
- apiKey: []
parameters:
- name: domain
in: query
required: true
description: Domain to remove
schema:
type: string
responses:
'200':
description: Domain removed from watchlist
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
message:
type: string
domain:
type: string
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'429':
$ref: '#/components/responses/RateLimited'
x-domscan-credits:
model: per_request
default: 0
/v1/watchlist/check:
get:
tags:
- Watchlist
summary: Check watchlist domains
description: Check availability and expiration status of all domains in your watchlist. Accepts an API key or active DomScan session.
operationId: checkWatchlist
security:
- apiKey: []
responses:
'200':
description: Watchlist check results
content:
application/json:
schema:
$ref: '#/components/schemas/WatchlistCheckResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'429':
$ref: '#/components/responses/RateLimited'
x-domscan-credits:
model: per_request
default: 1
/v1/watchlist/expiring:
get:
tags:
- Watchlist
summary: Get expiring domains
description: Get list of watched domains expiring within a specified time period. Accepts an API key or active DomScan session.
operationId: getExpiringWatchlist
security:
- apiKey: []
parameters:
- name: days
in: query
description: Number of days to check ahead
schema:
type: integer
default: 90
minimum: 1
maximum: 365
responses:
'200':
description: Expiring domains
content:
application/json:
schema:
$ref: '#/components/schemas/ExpiringDomainsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'429':
$ref: '#/components/responses/RateLimited'
x-domscan-credits:
model: per_request
default: 1
/v1/watchlist/available:
get:
tags:
- Watchlist
summary: Get available domains
description: Get list of watched domains that have become available for registration. Accepts an API key or active DomScan session.
operationId: getAvailableWatchlist
security:
- apiKey: []
responses:
'200':
description: Available domains from watchlist
content:
application/json:
schema:
$ref: '#/components/schemas/AvailableDomainsResponse'
'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:
WatchlistCheckResponse:
type: object
description: Watchlist check results
properties:
results:
type: array
items:
$ref: '#/components/schemas/WatchedDomain'
summary:
type: object
properties:
total:
type: integer
available:
type: integer
expiring_soon:
type: integer
registered:
type: integer
alerts:
type: object
properties:
newly_available:
type: array
items:
type: string
expiring_soon:
type: array
items:
type: object
checked_at:
type: string
format: date-time
WatchlistAddResponse:
type: object
properties:
success:
type: boolean
message:
type: string
watchlist:
type: array
items:
$ref: '#/components/schemas/WatchedDomain'
total:
type: integer
WatchlistResponse:
type: object
description: User watchlist
properties:
watchlist:
type: array
items:
$ref: '#/components/schemas/WatchedDomain'
total:
type: integer
updated_at:
type: string
format: date-time
AvailableDomainsResponse:
type: object
properties:
available_domains:
type: array
items:
$ref: '#/components/schemas/WatchedDomain'
total:
type: integer
message:
type: string
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
ExpiringDomainsResponse:
type: object
properties:
expiring_domains:
type: array
items:
$ref: '#/components/schemas/WatchedDomain'
total:
type: integer
threshold_days:
type: integer
WatchedDomain:
type: object
properties:
domain:
type: string
added_at:
type: string
format: date-time
status:
type: string
enum:
- registered
- available
- expiring_soon
- unknown
last_checked:
type: string
format: date-time
expiry_date:
type: string
format: date-time
days_until_expiry:
type: integer
notify_email:
type: string
format: email
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