---
title: "Trigger DNS/HTTP check"
method: POST
path: "/api/v1/verifications/{id}/verify"
tags: ["Verifications"]
---

# Trigger DNS/HTTP check

`POST /api/v1/verifications/{id}/verify`

## Request

- Base URL: `https://api.proof.holdings`
- URL: `https://api.proof.holdings/api/v1/verifications/{id}/verify`
- Auth: HTTP bearer

Trigger a DNS or HTTP verification check for domain verifications.

This route fetches the evidence itself, so it applies ONLY to a domain challenged over `dns`, `http` or `auto`. Any other pair answers `400 unsupported_for_type` and names the route that completes it — `POST /api/v1/verifications/{id}/submit` for the mailed pairs (`type: email`, and `type: domain` with `channel: email`), the inbound message for a phone, the OAuth callback for a social account. The refusal costs nothing: no attempt is recorded and the attempt counter does not move.

## Path parameters

- `id` string, required: MongoDB ObjectId

## Response `200`

Verification check result

- Verification: Verification object
  - `id` string, required: MongoDB ObjectId
  - `type` 'phone' | 'email' | 'domain' | 'social' | 'wallet' | 'account' | 'telegram_bot', required: Type of asset being verified
  - `channel` 'whatsapp' | 'telegram' | 'sms' | 'email' | 'dns' | 'http' | 'auto' | 'github' | 'google' | 'facebook' | 'x' | 'linkedin' | 'instagram' | 'youtube' | 'tiktok' | 'ethereum' | 'solana' | 'bitcoin' | 'coinbase' | 'kraken' | 'telegram_bot_token', required: Channel used for verification
  - `identifier` string: The identifier being verified; absent for an identifier-free phone verification, whose number is learned only when the person completes it
  - `status` 'pending' | 'verified' | 'failed' | 'expired' | 'revoked' | 'cancelled', required: Current status of the verification
  - `challenge` Challenge: Challenge details for verification
    - `code` string: Challenge code to send/enter
    - `instruction` string: Human-readable instruction for the user
    - `expires_at` string, date-time: When the challenge expires
  - `proof` Proof: Proof token after successful verification
    - `token` string, required: Signed JWT proof token (ES256; verify against the JWKS key named by the token's `kid`)
    - `expires_at` string, date-time, required: When the proof expires
    - `confidence` 'high' | 'standard' | 'degraded': Verification confidence level (present for SMS verifications)
  - `external_user_id` string
  - `attempts` integer
  - `max_attempts` integer
  - `created_at` string, date-time, required
  - `updated_at` string, date-time
  - `verified_at` string, date-time

## Other responses

- `400`: Check failed, invalid verification type, or `unsupported_for_type` — this pair publishes no evidence for us to fetch (see the endpoint description for the route that completes it).

---

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