---
title: "Research or refresh a public domain profile"
method: POST
path: "/api/domains/{domain}/profile"
tags: ["Discovery"]
---

# Research or refresh a public domain profile

`POST /api/domains/{domain}/profile`

## Request

- Base URL: `https://domani.run`
- URL: `https://domani.run/api/domains/{domain}/profile`
- Auth: none required

Runs a bounded analysis using public registry, DNS, live-site, structured-data, and archive sources, then stores the privacy-safe profile for the canonical public page. Instant depth is used for a fast first render; deep is the default and adds historical research.

## Path parameters

- `domain` string, required

## Query parameters

- `depth` 'instant' | 'deep'

## Response `201`

Public domain profile researched

- object
  - `profile` PublicDomainProfile, required: Privacy-safe public domain dossier with one canonical URL and an explicit search-index quality decision.
    - `domain` string, required
    - `canonicalPath` string, required
    - `brief` DomainBrief, required: Evidence-backed snapshot of a domain and its best current acquisition path.
      - `id` string, required
      - `domain` string, required
      - `depth` 'instant' | 'deep', required
      - `status` 'ready' | 'degraded' | 'failed', required
      - `summary` string, required
      - `registration` object, required
        - `state` 'available' | 'registered' | 'reserved' | 'unknown', required
        - `registrar` string, nullable, required
        - `createdAt` string, date-time, nullable, required
        - `expiresAt` string, date-time, nullable, required
        - `daysUntilExpiry` integer, nullable, required
      - `website` object, required
        - `state` 'active_business' | 'active_noncommercial' | 'parked_for_sale' | 'parked' | 'redirected' | 'dormant' | 'holding_page' | 'protected' | 'unreachable' | 'unknown', required
        - `title` string, nullable, required
        - `description` string, nullable, required
        - `finalUrl` string, nullable, required
        - `favicon` string, nullable, required
        - `canonicalUrl` string, nullable, required
      - `identity` object, required: Public identity inferred from the current site. Associated operators do not imply registration ownership.
        - `name` string, nullable, required
        - `legalName` string, nullable, required
        - `pitch` string, nullable, required
        - `category` string, nullable, required
        - `audience` string, nullable, required
        - `language` string, nullable, required
        - `logo` string, nullable, required
        - `entities` object[], required
          - `name` string, required
          - `legalName` string, nullable, required
          - `type` 'company' | 'brand' | 'organization' | 'public_person' | 'unknown', required
          - `relationship` 'presented_brand' | 'current_operator' | 'redirect_destination' | 'historical_operator' | 'registrant', required
          - `confidence` 'high' | 'medium' | 'low', required
          - `website` string, nullable, required
          - `sameAs` string[], required
          - `evidenceIds` string[], required
      - `activity` object, required
        - `state` 'active' | 'operational' | 'dormant' | 'inactive' | 'unknown', required
        - `rationale` string, required
        - `observedAt` string, date-time, required
        - `evidenceIds` string[], required
      - `history` object, required
        - `registeredAt` string, date-time, nullable, required
        - `registrationUpdatedAt` string, date-time, nullable, required
        - `firstArchiveAt` string, date-time, nullable, required
        - `latestArchiveAt` string, date-time, nullable, required
        - `currentIdentityFirstSeenAt` string, date-time, nullable, required
        - `snapshots` object[], required
          - `capturedAt` string, date-time, required
          - `url` string, required
          - `title` string, nullable, required
          - `description` string, nullable, required
          - `evidenceIds` string[], required
        - `changes` object[], required
          - `detectedAt` string, date-time, required
          - `type` 'identity' | 'content' | 'redirect' | 'registration', required
          - `summary` string, required
          - `data` object
          - `evidenceIds` string[], required
      - `infrastructure` object, required
        - `nameservers` string[], required
        - `mailProviders` string[], required
        - `dnssec` boolean, required
        - `mail` object, required: Privacy-safe email activity, provider, transport-security, and business-criticality signals derived from public DNS. Raw reporting addresses are never returned.
          - `status` 'active' | 'inactive' | 'unknown', required
          - `provider` string, nullable, required
          - `providerKind` 'managed' | 'self_hosted' | 'gateway' | 'custom' | 'unknown', required
          - `security` 'hardened' | 'established' | 'basic' | 'exposed' | 'unknown', required
          - `businessCriticality` 'high' | 'medium' | 'low' | 'unknown', required
          - `spf` boolean, nullable, required
          - `dmarc` 'reject' | 'quarantine' | 'monitor' | 'none' | 'unknown', required
          - `mtaSts` boolean, nullable, required: Whether an advertised HTTPS MTA-STS policy was retrieved, parsed, and found to use enforce mode.
          - `tlsReporting` boolean, nullable, required
          - `bimi` boolean, nullable, required
      - `market` object, required
        - `listed` boolean, required
        - `marketplace` string, nullable, required
        - `listingUrl` string, nullable, required
        - `askingPriceUsd` number, nullable, required
      - `contactability` object, required: Redacted contact-channel metadata. Raw addresses are never returned.
        - `state` 'direct' | 'indirect' | 'none_found' | 'unknown', required
        - `channelType` 'registration_email', nullable, required
        - `source` string, nullable, required
        - `confidence` 'high' | 'medium' | 'low', nullable, required
      - `acquisitionOutlook` object, required
        - `state` 'promising' | 'possible' | 'difficult' | 'unknown', required
        - `rationale` string, required
      - `recommendation` object, required
        - `action` 'register' | 'buy_now' | 'negotiate_listing' | 'private_broker' | 'backorder' | 'watch' | 'choose_alternative', required
        - `rationale` string, required
      - `completeness` integer, required: Legacy aggregate. Use coverage instead.
      - `coverage` object, required: Evidence coverage, separate from confidence and freshness.
        - `score` integer, required
        - `sections` object, required
          - `registration` 'complete' | 'partial' | 'missing', required
          - `currentUse` 'complete' | 'partial' | 'missing', required
          - `identity` 'complete' | 'partial' | 'missing', required
          - `infrastructure` 'complete' | 'partial' | 'missing', required
          - `history` 'complete' | 'partial' | 'missing', required
          - `market` 'complete' | 'partial' | 'missing', required
        - `missing` string[], required
      - `analyzedAt` string, date-time, required
      - `staleAt` string, date-time, required
      - `analysisVersion` string, required
      - `evidence` object[], required
        - `id` string, required
        - `kind` 'registry' | 'dns' | 'website' | 'content' | 'archive' | 'entity' | 'market' | 'contact', required
        - `claimKey` string, required
        - `label` string, required
        - `value` string, required
        - `data` object
        - `source` string, required
        - `sourceUrl` string
        - `confidence` 'high' | 'medium' | 'low', required
        - `visibility` 'public' | 'redacted', required
        - `capturedAt` string, date-time, required
      - `warnings` string[], required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
    - `freshness` 'fresh' | 'stale', required
    - `qualityScore` integer, required
    - `indexable` boolean, required: True only for fresh, deep, substantive profiles with sufficient public evidence.
    - `indexabilityReasons` string[], required

## Other responses

- `400`: Invalid request parameters
- `429`: Rate limit exceeded - wait and retry

---

[API](https://skmtc.dev/domani/apis/domani-run-api.md) · [All operations](https://skmtc.dev/domani/apis/domani-run-api/llms.txt) · [OpenAPI document](https://skmtc.dev/domani/apis/domani-run-api/revisions/7679f8159533?raw)
