skink.devverified

Docs

First verify in under 5 minutes.

1. Get a key

Sign up at app.skink.dev — 100 free, never-expiring credits, no card. Create an API key in the dashboard (shown once).

Server-side only — a leaked key spends your credits. If exposed, revoke it from the dashboard.

2. Verify

curl -s https://api.skink.dev/v1/verify \
  -H "Authorization: Bearer $SKINK_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"jane.doe@acme.com"}'

3. Read the result

{
  "email": "jane.doe@acme.com",
  "status": "deliverable",
  "sub_status": "catchall_resolved_exists",
  "confidence": 0.91,
  "accept_all": true,
  "mx_provider": "microsoft365",
  "signals": {
    "is_catchall": true,
    "catchall_resolution": "verified",
    "reasons": [
      "SMTP accepted (250)",
      "Catch-all domain — SMTP alone cannot determine individual mailbox existence",
      "Additional verification checks resolved mailbox existence"
    ]
  },
  "recommendation": "send"
}

signals.reasons explains why — including how a catch-all verdict was reached.

4. Status reference

statusmeaning
deliverableSafe to send.
undeliverableHard bounce — don't send.
riskyRole address, full mailbox, or an unresolved catch-all.
unknownCouldn't determine a verdict (timeout, greylist, DNS failure).

sub_status values (stable keys for parsing — signals.reasons is the human-readable version):

catchall_resolved_existscatchall_resolved_not_existscatchall_unresolvedno_mxinvalid_mailboxfull_mailboxrole_addressgreylist_timeoutseg_protecteddns_failuresmtp_connect_failedsyntax_error

Common questions. See the FAQ on skink.dev for details.