Verifications

Create multi-channel verification

Start one phone verification across several channels in a single call. Returns a setup block (deep link, QR, message) per channel; the first channel the user completes wins, sibling channels are cancelled and exactly one proof token is issued. Exactly one proof is billed, at the winning channel's completion — not one per channel, and nothing at creation; the HTTP rate limit charges one unit.

post/api/v1/verifications/multi-channel

Request

  • Base URL: https://api.proof.holdings
  • URL: https://api.proof.holdings/api/v1/verifications/multi-channel
  • Auth: HTTP bearer

Request body

profile_idstring

The sub-account (project) this is for; its branding and templates are used for every message. An account-wide key may name any project of its account; a project-bound key acts for its own project only (naming another answers 403 profile_mismatch). Omitted: the key's project, else the primary project.

type'phone' required

Asset type (phone only in v1)

identifierstring required

The phone number to verify (E.164)

channelsMultiChannelPhoneChannel[] required

Channels to offer, unique values. The first channel the user completes wins; siblings are cancelled and exactly one proof token is issued.

external_user_idstring

Your user ID for grouping verifications

client_metadataobject

Custom metadata to attach to every group member

proof_expiry_daysinteger

Per-request proof expiry override in days (1-365). Overrides account default.

Example request

{
  "profile_id": "507f1f77bcf86cd799439011",
  "type": "phone",
  "identifier": "+37069199199",
  "channels": [
    "whatsapp",
    "telegram",
    "sms"
  ],
  "external_user_id": "user_12345",
  "client_metadata": {
    "source": "onboarding"
  },
  "proof_expiry_days": 90
}

Response

Multi-channel verification group created

group_idstring required

Verification group ID (vg_ prefix)

type'phone' required
identifierstring required
status'pending' | 'verified' | 'failed' | 'expired' | 'revoked' | 'cancelled' required

Current status of the verification

expires_atstring date-time required

When every channel challenge expires

external_user_idstring
client_metadataobject
created_atstring date-time required

Example response

{
  "group_id": "vg_0123456789abcdef0123456789abcdef",
  "identifier": "+37069199199",
  "status": "pending",
  "channels": [
    {
      "channel": "whatsapp",
      "verification_id": "507f1f77bcf86cd799439011",
      "status": "pending",
      "deep_link": "https://wa.me/37069199199?text=Verify%20X7K2M9",
      "message": "Verify X7K2M9"
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.