# Domain check

`POST /v1/domain/check` · **1 credit**

Good for B2B signups ("is acme-corp.io a real company?"), lead qualification, and vetting a website before you trust it.

## Request

| Field | Type | Required | Description |
|---|---|---|---|
| `domain` | string | yes | A domain (`acme.com`), a URL (`https://www.acme.com/pricing`) or an email address. We extract the domain. |

```bash [curl]
curl https://veqen-app.com/v1/domain/check \
  -H "Authorization: Bearer $VEQEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "https://www.example.com/about"}'
```

```python [Python]
r = requests.post(
    "https://veqen-app.com/v1/domain/check",
    headers={"Authorization": f"Bearer {VEQEN_API_KEY}"},
    json={"domain": "example.com"},
    timeout=10,
)
```

```javascript [JavaScript]
const r = await fetch("https://veqen-app.com/v1/domain/check", {
  method: "POST",
  headers: { Authorization: `Bearer ${VEQEN_API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ domain: "example.com" }),
});
```

## Response

```json
{
  "input": "https://www.example.com/about",
  "valid": true,
  "domain": "example.com",
  "disposable": false,
  "free_provider": false,
  "exists": true,
  "accepts_mail": false,
  "mx": [],
  "null_mx": true,
  "spf": true,
  "dmarc": true,
  "registered_at": "1995-08-14",
  "age_days": 11390,
  "registrar": "RESERVED-Internet Assigned Numbers Authority",
  "risk": {
    "score": 60,
    "level": "medium",
    "verdict": "review",
    "reasons": [
      { "code": "domain_refuses_mail", "impact": 60, "message": "example.com accepts no email." }
    ]
  }
}
```

### Fields

| Field | What it tells you |
|---|---|
| `exists` | `false` when the domain isn't registered. |
| `accepts_mail` | The domain has somewhere to deliver email. |
| `null_mx` | The domain says it never accepts email (RFC 7505). |
| `spf`, `dmarc` | Email authentication records. Established businesses almost always publish them. |
| `registered_at`, `age_days` | From RDAP, the modern WHOIS. Some country registries don't publish it, so it can be `null`. |
| `disposable`, `free_provider` | Same meaning as in the [email check](/docs/email-check). |
