openapi: 3.2.0 info: title: CatchDoms Domains API description: Search expired, auction, brandable, aged deleted, and pending-delete domains from 20+ sources with SEO metrics, quality scores, traffic estimates, and auction prices. Updated continuously across source-specific schedules. version: 1.1.1 contact: name: CatchDoms url: https://catchdoms.com email: hello@catchdoms.com x-logo: url: https://catchdoms.com/img/favicons/android-chrome-192x192.png servers: - url: https://catchdoms.com/api description: Production security: - BearerAuth: [] tags: - name: Domains paths: /domains: get: operationId: listDomains summary: Search expired and auction domains description: Returns paginated list of domains matching the given filters, sorted by quality score. tags: - Domains parameters: - name: source in: query description: Filter by source platform schema: type: string enum: - dynadot - catched - dropcatch - godaddy - gname - snapnames - ukdroplists - subreg - webexpire - parkio - bloomup - nicsell - namesilo - namecheap - sedo - gnews-domains - backorders-domains - domainlore - rakkodomain - seodomains - nameshift - namepros - regfree - name: tld in: query description: Filter by TLD (e.g. .com, .fr). Comma-separated for multiple. schema: type: string example: .fr,.de,.it - name: score_min in: query description: Minimum quality score (0-100). 50+ for good, 70+ for excellent. schema: type: integer minimum: 0 maximum: 100 - name: age_min in: query description: Minimum domain age in years (Wayback Machine first snapshot). schema: type: integer minimum: 0 - name: type in: query description: Filter by domain type schema: type: string enum: - auction - closeout - backorder - name: has_bids in: query description: Only domains with active auction bids schema: type: boolean - name: has_backlinks in: query description: Only domains with referring domains schema: type: boolean - name: has_gmb in: query description: Only domains with a Google Business listing schema: type: boolean - name: has_edu_gov in: query description: Only domains with .edu or .gov referring domains schema: type: boolean - name: da_min in: query description: Minimum Domain Authority (0-100) schema: type: integer minimum: 0 maximum: 100 - name: rd_min in: query description: Minimum referring domains count schema: type: integer minimum: 0 - name: tf_min in: query description: Minimum Trust Flow (0-100) schema: type: integer minimum: 0 maximum: 100 - name: cf_min in: query description: Minimum Citation Flow (0-100) schema: type: integer minimum: 0 maximum: 100 - name: categories in: query description: 'Comma-separated categories: TTF topics or seo.domains categories, parent (health) or parent/child (recreation/travel). Case-insensitive.' schema: type: string - name: techs in: query description: 'Comma-separated historical tech stack labels (case-sensitive). OR semantic: a domain matches if its historical_tech contains ANY of the labels. Examples: ''WordPress'', ''Google Maps'', ''Stripe,Shopify''. Pro plans cannot get regfee results through this filter — the access-regfree gate is enforced before the filter applies.' schema: type: string maxLength: 500 example: WordPress,Yoast SEO - name: language in: query description: Filter by detected language code (EN, FR, DE, ES, etc.) schema: type: string maxLength: 5 - name: contains in: query description: Keyword the domain name must contain. Single term or comma-separated list with OR semantic (e.g. 'entreprise,entrepreneur' matches names containing either). schema: type: string maxLength: 200 example: entreprise,entrepreneur - name: price_min in: query description: Minimum price or bid in each source's native currency schema: type: number minimum: 0 - name: price_max in: query description: Maximum price or bid in each source's native currency schema: type: number minimum: 0 - name: snapshots_min in: query description: Minimum Wayback Machine snapshots schema: type: integer minimum: 0 - name: use_cases in: query description: 'Comma-separated buyer-intent categories derived from historical tech. OR semantic: a domain matches if it has ANY requested category. Available values: ecommerce, local-biz, news, saas, forum, media, developer.' schema: type: string maxLength: 200 example: ecommerce,saas - name: traffic_min in: query description: Minimum latest estimated worldwide monthly organic traffic schema: type: integer minimum: 0 - name: created_after in: query description: Only domains added on or after this date schema: type: string format: date example: '2026-09-01' - name: created_before in: query description: Only domains added before this date schema: type: string format: date example: '2026-09-02' - name: ends_after in: query description: Only auctions ending on or after this date schema: type: string format: date example: '2026-09-11' - name: ends_before in: query description: Only auctions ending before this date schema: type: string format: date example: '2026-09-12' - name: include_historical_traffic in: query description: Include the full historical_traffic object. Disabled by default because the payload is comparatively large. schema: type: boolean default: false - name: per_page in: query description: Results per page (1-100, default 50) schema: type: integer minimum: 1 maximum: 100 default: 50 - name: page in: query description: Page number schema: type: integer minimum: 1 default: 1 - name: after_id in: query description: 'Keyset cursor for bulk access: returns rows with id > after_id ordered by id asc — cheap at any depth, preferred over deep page offsets for full syncs. The response gains a top-level `cursor` object (next_after_id, has_more); pass next_after_id back as after_id to continue. page/per_page offsets and standard links/meta are non-authoritative in cursor mode. Cursor results ALWAYS exclude source=regfree rows; requesting source=regfree with after_id, or using the cursor from a trial account or free API channel, returns 403 cursor_not_available. For incremental syncs prefer created_after.' schema: type: integer minimum: 0 responses: '200': description: Paginated list of domains content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Domain' links: $ref: '#/components/schemas/PaginationLinks' meta: $ref: '#/components/schemas/PaginationMeta' cursor: type: object description: Present only when the request used after_id (keyset mode). links/meta are non-authoritative in cursor mode. properties: after_id: type: integer next_after_id: type: - integer - 'null' has_more: type: boolean order: type: string example: id asc note: type: string '401': description: Missing or invalid API token '403': description: 'Valid token but no Pro subscription — or, for after_id requests, cursor_not_available: the keyset cursor is denied for free API channels, trial accounts and source=regfree (JSON body: error, message, docs)' /domains/{domain}: get: operationId: getDomain summary: Get a single domain by ID description: Returns full details for a specific domain. tags: - Domains parameters: - name: domain in: path required: true description: Domain ID schema: type: integer responses: '200': description: Domain details content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Domain' '404': description: Domain not found components: schemas: PaginationLinks: type: object properties: first: type: - string - 'null' last: type: - string - 'null' prev: type: - string - 'null' next: type: - string - 'null' PaginationMeta: type: object properties: current_page: type: integer last_page: type: integer per_page: type: integer total: type: integer from: type: - integer - 'null' to: type: - integer - 'null' Domain: type: object properties: id: type: integer description: Unique domain identifier name: type: string description: Full domain name example: example.fr tld: type: string description: TLD with dot prefix example: .fr source: type: string description: Source platform enum: - dynadot - catched - dropcatch - godaddy - gname - snapnames - ukdroplists - subreg - webexpire - parkio - bloomup - nicsell - namesilo - namecheap - sedo - gnews-domains - backorders-domains - domainlore - rakkodomain - seodomains - nameshift - namepros - regfree type: type: string description: Domain type enum: - auction - closeout - backorder auction_type: type: - string - 'null' description: 'Sub-type (DropCatch: Dropped/PreRelease/PrivateSeller, GoDaddy: Bid/BuyNow)' price: type: - number - 'null' description: Fixed price or starting price in the source's native currency max_bid: type: - number - 'null' description: Current highest bid in the source's native currency effective_price: type: - number - 'null' description: 'Actual price: max_bid if set, otherwise price' currency: type: - string - 'null' pattern: ^[A-Z]{3}$ description: ISO 4217 currency code for price, max_bid, effective_price, estibot_appraisal, and renewal_price values from this source; null when the source has no single deterministic currency example: USD bids_count: type: - integer - 'null' description: Number of bids auction_end_date: type: - string - 'null' format: date-time description: Auction end date (ISO 8601) estibot_appraisal: type: - number - 'null' description: Automated valuation estimate score: type: - integer - 'null' description: Quality score (0-100) is_spammy: type: boolean description: Whether flagged as spammy age: type: - integer - 'null' description: Domain age in years wayback_snapshots: type: - integer - 'null' description: Wayback Machine snapshot count wayback_first_date: type: - string - 'null' format: date description: First Wayback snapshot wayback_last_date: type: - string - 'null' format: date description: Last Wayback snapshot pagerank: type: - integer - 'null' description: Open PageRank (0-10) domain_authority: type: - integer - 'null' description: Domain Authority (0-100) backlinks_count: type: - integer - 'null' description: Total backlinks referring_domains: type: - integer - 'null' description: Unique referring domains trust_flow: type: - integer - 'null' description: Trust Flow (0-100) citation_flow: type: - integer - 'null' description: Citation Flow (0-100) ttf_topic: type: - string - 'null' description: Topical Trust Flow category example: Business/Marketing ref_domains_edu: type: - integer - 'null' description: EDU referring domains ref_domains_gov: type: - integer - 'null' description: GOV referring domains ref_domains_dofollow: type: - integer - 'null' description: Dofollow referring domains seo_domains_category: type: - string - 'null' description: SEO.Domains category (seodomains source only) seo_domains_subcategory: type: - string - 'null' description: SEO.Domains subcategory (seodomains source only) indexed_pages: type: - integer - 'null' description: Google indexed pages historical_tech: type: - array - 'null' items: type: string description: Tech stack fingerprints detected on the archived Wayback snapshot. null = not checked yet, [] = checked but no signal, array of labels = detected stack. Queryable via the techs filter (see /api/domains parameters). example: - WordPress - Yoast SEO - Stripe use_cases: type: - array - 'null' items: type: string description: 'Buyer-intent categories derived from historical tech: ecommerce, local-biz, news, saas, forum, media, or developer. null = not classified yet.' historical_traffic_etv: type: - integer - 'null' description: Latest estimated worldwide monthly organic traffic historical_traffic_peak: type: - integer - 'null' description: Peak estimated monthly organic traffic over the historical window historical_traffic_spark: type: - array - 'null' items: type: integer description: Denormalized historical monthly traffic series for charts historical_traffic_fetched_at: type: - string - 'null' format: date-time description: When historical traffic data was last fetched historical_traffic: type: - object - 'null' description: Full historical organic-traffic data, including country breakdowns. Present only when include_historical_traffic=true. monthly_visitors: type: - integer - 'null' description: Estimated monthly visitors language: type: - string - 'null' description: Detected language code example: FR has_gmb: type: boolean description: Has Google Business listing gmb_name: type: - string - 'null' description: GMB business name gmb_category: type: - string - 'null' description: GMB business category gmb_address: type: - string - 'null' description: GMB business address whois_registered_at: type: - string - 'null' format: date-time description: WHOIS or RDAP registration date whois_expires_at: type: - string - 'null' format: date-time description: WHOIS or RDAP expiration date whois_last_changed_at: type: - string - 'null' format: date-time description: WHOIS or RDAP last-change date whois_registrar: type: - string - 'null' description: Registrar reported by WHOIS or RDAP whois_status: type: - array - 'null' items: type: string description: Domain status values reported by WHOIS or RDAP whois_nameservers: type: - array - 'null' items: type: string description: Nameservers reported by WHOIS or RDAP whois_ns_category: type: - string - 'null' description: Classification of the current nameserver configuration whois_checked_at: type: - string - 'null' format: date-time description: When WHOIS or RDAP data was last checked purchase_url: type: - string - 'null' description: Direct buy/bid link purchase_platform: type: - string - 'null' description: Source platform name created_at: type: string format: date-time description: Added to CatchDoms updated_at: type: string format: date-time description: Last updated securitySchemes: BearerAuth: type: http scheme: bearer description: API token from your CatchDoms account. Get one at https://catchdoms.com/api-access externalDocs: description: Full API documentation url: https://catchdoms.com/docs x-provenance: method: harvested publisher: CatchDoms Expired Domains API source: https://catchdoms.com/openapi.json note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json); stamped by stamp-openapi-provenance.py (roadmap#793)