---
title: "POST /api/webhooks/check"
method: POST
path: "/api/webhooks/check"
---

# POST /api/webhooks/check

`POST /api/webhooks/check`

## Request

- Base URL: `https://disban.io`
- URL: `https://disban.io/api/webhooks/check`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `disban_session`

Inbound push endpoint. Returns ordered results in this response; no outbound callback. Defaults to lookup-only and queues unknown domains for discovery. Same quotas and batch limits as /api/batch.

## Query parameters

- `realtime` boolean

## Request body

- union
  - object
    - `input` string, required
  - object
    - `inputs` string[], required

## Response `200`

Ordered results

- object
  - `results` Verdict[], required
    - `domain` string, required
    - `category` 'disposable' | 'free' | 'alias' | 'testing' | 'parked' | 'unknown', required
    - `reason` string, required
    - `status` 200
    - `email` string, nullable: Request-only echo; never persisted in history.
    - `normalized_email` string, nullable: Domain normalized; local-part case preserved. Null for domain-only requests and history.
    - `domain_authority` number, nullable
    - `domain_age_in_days` integer, nullable
    - `mx` boolean, nullable: Fresh explicit non-null MX present. False for Null MX or confirmed absence; null when unverified. False does not exclude implicit SMTP routing.
    - `mx_records` object[], nullable
      - `hostname` string, required
      - `priority` integer, nullable, required
    - `mx_providers` object[], nullable
      - `slug` string, required
      - `type` string, required
      - `grade` string, nullable, required
    - `spf` string, nullable
    - `dmarc` string, nullable
    - `public_domain` boolean, nullable
    - `relay_domain` boolean, nullable
    - `free_subdomain` boolean, nullable
    - `alias` boolean, nullable
    - `role_account` boolean, nullable
    - `spam` boolean, nullable
    - `did_you_mean` string, nullable
    - `disposable` boolean, nullable: Null for unresolved classification; never treat null as clean.
    - `cached` boolean
    - `historical_disposable` boolean: Records existing list or reviewed seed history, independently of current classification. Can be true for currently confirmed disposable services; it is not a low-confidence flag and is not proof of current operation.
    - `mail_routing` object
      - `status` 'routable' | 'invalid' | 'unknown', required
      - `reason` string, required
      - `observed_at` string, date-time
      - `expires_at` string, date-time
      - `review_required` boolean
    - `matched_on` string
    - `latency_ms` number

## Other responses

- `400`: Request could not be completed
- `401`: Request could not be completed
- `403`: Request could not be completed
- `409`: Request could not be completed
- `413`: Request could not be completed
- `415`: Request could not be completed
- `429`: Rate or quota limit; honor Retry-After
- `502`: Request could not be completed
- `503`: Request could not be completed

---

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