---
title: "Score a domain"
method: GET
path: "/v1/score/domain"
tags: ["Scoring"]
---

# Score a domain

`GET /v1/score/domain`

## Request

- Base URL: `https://www.layercall.com`
- URL: `https://www.layercall.com/v1/score/domain`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Resolution, MX, SPF/DMARC posture, registration age, disposable and risky-TLD checks, plus homograph detection for lookalike domains.

## Query parameters

- `domain` string, required
- `strictness` 'lenient' | 'balanced' | 'strict'

## Response `200`

Result

- DomainResult
  - `domain` string, required
  - `risk_score` integer, required: 0 = clean, 100 = certain fraud.
  - `verdict` 'allow' | 'review' | 'block', required: Recommended action. Thresholds move with `strictness`.
  - `signals` object
    - `resolves` boolean
    - `mx_found` boolean
    - `has_spf` boolean
    - `has_dmarc` boolean
    - `is_disposable` boolean
    - `is_homograph` boolean
    - `is_free_provider` boolean
    - `is_risky_tld` boolean
    - `newly_registered` boolean, nullable: Registered less than 30 days ago. null means the registration date could not be determined (RDAP unreachable, or the TLD publishes no RDAP) — it does NOT mean the domain is established. Treat null as unknown, not as a negative finding.
  - `registration` object
    - `created_at` string, date-time, nullable
  - `cached` boolean
  - `request_id` string
  - `signals_unavailable` string[]: Signals that could not be measured on this request — e.g. ["tor", "vpn_providers"]. Absent entirely when every feed answered, so the happy-path shape is unchanged. Present means the score was built on incomplete data: a "clean" answer and a "we could not check" answer are otherwise identical.
  - `processing_time_sec` number
  - `first_seen` unknown
  - `times_seen` integer
  - `abuse_reports` integer
  - `billable_lookups` integer

## Other responses

- `400`: Missing or malformed input.
- `401`: Missing, invalid, or revoked API key.
- `429`: Monthly quota or spend cap reached, or the 600 requests-per-minute rate limit exceeded.

---

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