voxID

Verifier API

Plain HTTP. Uploads are multipart forms; responses are JSON. Errors return { detail }.

POST /challenge

A phrase to read. Single use; expires 60 seconds after it is issued.

{ "challenge_id": "3f9a…", "phrase": "island lemon wagon anchor doctor", "expires_at": 1792841214 }

POST /enroll

FieldValue
walletBase58 Solana address.
challenge_ids ×2One per recording, in the same order as audio.
audio ×2WAV, FLAC or OGG; 1–15 seconds; at most 2 MB. Any sample rate, resampled to 16 kHz mono.
signatureBase58 ed25519 signature by wallet over the message below.
voicegate enroll
wallet: <wallet>
challenges: <challenge_id_1> <challenge_id_2>

Success:

{ "wallet": "8vT3…", "person_id": "6620d83dfc77d7f6…", "signature": null }

signature is the Solana transaction that issued the credential, and null while credentials are recorded by the verifier only.

StatusWhen
400Bad request, wrong words, takes don't match, unreadable audio, expired or reused challenge.
401Signature isn't from wallet.
409Voice already verified on another wallet, or this wallet already verified.
413Recording over 2 MB.
429Rate limited: 20 requests a minute per IP, 10 attempts an hour per wallet.
502On-chain issuance failed; nothing was kept, try again.

POST /enrollment/delete

Fields wallet, issued_at (unix seconds, within five minutes of now) and signature over:

voicegate delete
wallet: <wallet>
issued: <issued_at>

GET /status/:wallet

Whether a wallet is verified. Public: the airdrop list is one wallet per verified human.

{ "wallet": "8vT3…", "verified": true, "verified_at": 1792841154, "revoked": false }

GET /stats

What the Network page shows. Contains no wallets.

{
  "enrolled": 12, "attempts": 31, "threshold": 0.5, "liveness": "…",
  "outcomes": { "enrolled": 12, "duplicate": 9, "words": 6, … },
  "recent": [ { "at": 1792841214, "outcome": "duplicate", "score": 0.92 }, … ]
}

POST /attest

For buying: a fresh recording from an already verified wallet returns a 60-second, single-use pass signed by the verifier. Fields wallet, challenge_id, audio. Returns 503 until buying is live. The pass format is in On-chain program.