# Premium Features

Premium checks add DNS configuration, domain-age, and reputation signals. They are available on **Pro**; see [Authentication](https://docs.disify.com/guide/authentication.md) and [pricing](https://disify.com/pricing).

Paid plans also include automatic [privacy forwarding detection and configurable relay policy](https://docs.disify.com/api/forwarding.md), including Starter. No `features` parameter is needed for it.

## Requesting features

For a single email or domain check, send comma-separated names in `features`. Keep the API key on the backend. Form-encoded POST is recommended; query parameters and GET path suffixes are also supported.


**POST**

```bash
curl --fail-with-body --max-time 10 \
  -H "X-Api-Key: $DISIFY_API_KEY" \
  https://disify.com/api/email \
  --data-urlencode 'email=user+tag@gmail.com' \
  --data-urlencode 'features=spf,dkim,dmarc'
```

**Query parameter**

```bash
curl --fail-with-body --max-time 10 -H "X-Api-Key: $DISIFY_API_KEY" \
  "https://disify.com/api/email/test@gmail.com?features=spf,dkim,dmarc"
```


Set `DISIFY_API_KEY` in your server environment before running these examples. The `features` parameter is ignored for [bulk requests](https://docs.disify.com/api/bulk.md); automatic tier features such as spam-trap detection still run.

## Available features

| Feature | Response key | Meaning |
| --- | --- | --- |
| `spf` | `email_auth.spf` | Summary of the SPF record's `all` policy: `pass`, `neutral`, `softfail`, `hardfail`, or `none`. |
| `dkim` | `email_auth.dkim_configured` | Whether DKIM records were found at the selectors DISIFY probes. |
| `dmarc` | `email_auth.dmarc` | Published DMARC policy and record. |
| `domain_age` | `domain_age` | Registration date, age in days, and whether the domain is fresh. |
| `inbox_provider` | `inbox_provider` | Provider inferred from MX records and available SPF data. |
| `deliverability` | `deliverability_score` | A 0–100 score based on the available authentication, MX, and domain-age fields. |

`spam_trap` is included automatically on Pro. It reports known trap-domain or address-pattern matches; `is_trap: false` does not prove an address is safe to contact.

Try checks and generate a request in [Playground](https://disify.com/account/playground). Trial access there does not unlock those features in API calls.

Ordinary Playground validations count against the same account allowances as API
requests, including the number of entries in bulk requests. The limited premium
trial applies only to single checks and has its own displayed allowance.

## Interpreting premium results

These checks inspect domain configuration, not a sent message. SPF `hardfail` describes a restrictive record policy, not a failed API request. `dkim_configured: false` means no record was found at the probed selectors; other selectors may exist.

The deliverability score is not a delivery probability or mailbox-existence check. To include all supported scoring inputs, request `spf,dkim,dmarc,domain_age,deliverability` together. A fresh domain adds the `fresh_domain` signal and can change the final `disposable` verdict; `domain_age.fresh` reports its freshness.

## Pro response example

Illustrative premium fields for a domain with usable MX records. Core fields are omitted here; actual records and age vary by domain.

```json
{
  "spam_trap": {
    "is_trap": false,
    "type": null,
    "reason": null
  },
  "email_auth": {
    "spf": "softfail",
    "spf_record": "v=spf1 include:_spf.google.com ~all",
    "dmarc": {
      "policy": "reject",
      "record": "v=DMARC1; p=reject; sp=quarantine; pct=100; rua=mailto:dmarc@example.com",
      "subdomain_policy": "quarantine",
      "pct": 100,
      "rua": "mailto:dmarc@example.com"
    },
    "dkim_configured": true,
    "dkim_selectors_found": ["google", "selector1"]
  },
  "domain_age": {
    "registered": "2015-06-01",
    "age_days": 3848,
    "fresh": false
  },
  "inbox_provider": "Google Workspace",
  "deliverability_score": 95
}
```

## Missing or unavailable features

Check HTTP status first. A successful core response can contain:

- `requires_upgrade` — the requested feature is not included in your plan.
- `unsupported_features` — `smtp` or `catch_all`, which are not offered on any plan.
- `temporarily_unavailable_features` — a requested check could not finish; retry later.

Domain age and inbox provider can also be omitted when no result is available. A missing field is not a successful negative check. Example of denied features, with other fields omitted:

```json
{
  "requires_upgrade": ["spf", "dkim"],
  "upgrade_url": "https://disify.com/pricing",
  "upgrade_message": "These features require a paid plan. See https://disify.com/pricing"
}
```

See [Response Fields](https://docs.disify.com/api/response-fields.md) for the complete field reference.

Source: https://docs.disify.com/guide/premium-features.html
