Skip to Content

Individual Verifications — API Reference

The Individual Verifications API enables developers to check whether users have completed specific identity verifications (government ID, phone, biometrics) and query their verification status.

Try out these endpoints interactively in the API Reference Playground .

In the examples below, replace the following placeholder values with your actual data:

  • {network} - The blockchain network (optimism or base-sepolia)
  • {address} - The user’s blockchain address
  • {action-id} - Your action ID for sybil resistance (default: 123456789)

Base URL

https://api.holonym.io

Action IDs

Action IDs enable sybil resistance. Use the default action ID 123456789 for most use cases - it provides universal uniqueness across all applications.

Custom action IDs are available for specific use cases. Contact us  to discuss your requirements.

Available Endpoints

Endpoint ActionEndpoint
Check government ID verificationGET /sybil-resistance/gov-id/{network}
Check phone verificationGET /sybil-resistance/phone/{network}
Check biometrics verificationGET /sybil-resistance/biometrics/{network}
Query Proof of Clean Hands attestationsSign Protocol API
Proof of Clean Hands SBTs (Sui)GET /attestation/sbts/clean-hands

Check Government ID Verification

Returns whether a user has completed government ID (KYC) verification and has a unique proof for the specified action.

GET /sybil-resistance/gov-id/{network}

Query Parameters

NameRequiredDescription
userYesThe user’s blockchain address
action-idYesYour action ID for sybil resistance. Use 123456789 for the default action ID, or a custom value for app-specific uniqueness.
Sample request
curl --request GET \ 'https://api.holonym.io/sybil-resistance/gov-id/optimism?user={address}&action-id=123456789'
Sample response (verified)
{ "result": true, "expirationDate": 1770922106 }
Sample response (not verified)
{ "result": false }

Response

FieldTypeDescription
resultbooleantrue if the user has a valid verification, false otherwise
expirationDatenumberUnix timestamp when the verification expires (only present when result is true)

Check Phone Verification

Returns whether a user has completed phone verification and has a unique proof for the specified action.

GET /sybil-resistance/phone/{network}

Query Parameters

NameRequiredDescription
userYesThe user’s blockchain address
action-idYesYour action ID for sybil resistance
Sample request
curl --request GET \ 'https://api.holonym.io/sybil-resistance/phone/optimism?user={address}&action-id=123456789'
Sample response (verified)
{ "result": true, "expirationDate": 1770922106 }

Check Biometrics Verification

Returns whether a user has completed biometric verification (face uniqueness and liveness check).

GET /sybil-resistance/biometrics/{network}

Query Parameters

NameRequiredDescription
userYesThe user’s blockchain address
action-idYesYour action ID for sybil resistance
Sample request
curl --request GET \ 'https://api.holonym.io/sybil-resistance/biometrics/optimism?user={address}&action-id=123456789'
Sample response (verified)
{ "result": true, "expirationDate": 1780661994 }

Snapshot Strategy Endpoints

These endpoints are designed for integration with Snapshot governance voting.

Configuring Snapshot

To use Individual Verifications with Snapshot, configure the “api” strategy  with the following parameters:

Government ID Sybil Resistance
{ "api": "https://api.holonym.io", "symbol": "", "decimals": 0, "strategy": "snapshot-strategies/sybil-resistance/gov-id", "additionalParameters": "action-id=123456789" }
Phone Sybil Resistance
{ "api": "https://api.holonym.io", "symbol": "", "decimals": 0, "strategy": "snapshot-strategies/sybil-resistance/phone", "additionalParameters": "action-id=123456789" }

We recommend using the default action ID 123456789. Contact us  if you need a custom action ID.


Snapshot: Government ID Sybil Resistance

GET /snapshot-strategies/sybil-resistance/gov-id

Query Parameters

NameRequiredDescription
networkYesChain ID
snapshotYesBlock height
addressesYesComma-separated list of blockchain addresses
action-idYesYour action ID for sybil resistance
Sample request
curl --request GET \ 'https://api.holonym.io/snapshot-strategies/sybil-resistance/gov-id?network=10&snapshot=12345678&addresses={address1},{address2}&action-id=123456789'
Sample response
{ "score": [ { "address": "0x123...", "score": 1 }, { "address": "0x456...", "score": 0 } ] }

Snapshot: Phone Sybil Resistance

GET /snapshot-strategies/sybil-resistance/phone

Uses the same parameters and response format as the Government ID Snapshot endpoint.

Snapshot: Biometrics Sybil Resistance

GET /snapshot-strategies/sybil-resistance/biometrics

Uses the same parameters and response format as the Government ID Snapshot endpoint.


Proof of Clean Hands (PoCH)

Proof of Clean Hands verification proves that a user is not on sanctions or PEP (Politically Exposed Persons) lists. This enables regulatory compliance while preserving user privacy.

Query Proof of Clean Hands Attestations via Sign Protocol

Proof of Clean Hands attestations are issued through Sign Protocol. Query a user’s attestation status using the Sign Protocol API.

GET https://mainnet-rpc.sign.global/api/scan/addresses/\{address\}/attestations 

Sample request
curl --request GET \ 'https://mainnet-rpc.sign.global/api/scan/addresses/{address}/attestations'
Sample response
{ "data": { "rows": [ { "fullSchemaId": "onchain_evm_10_0x8", "attester": "0xB1f50c6C34C72346b1229e5C80587D0D659556Fd", "isReceiver": true, "revoked": false, "validUntil": 1735689600 } ] } }

Validating a Proof of Clean Hands Attestation

To confirm a user has a valid Proof of Clean Hands attestation, verify all of the following conditions:

FieldRequired ValueDescription
fullSchemaIdonchain_evm_10_0x8The schema ID for Proof of Clean Hands attestations on Optimism
attester0xB1f50c6C34C72346b1229e5C80587D0D659556FdThe authorized attester address
isReceivertrueConfirms the queried address is the attestation recipient
revokedfalseAttestation has not been revoked
validUntilGreater than current timestampAttestation has not expired
Validation example
function hasValidCleanHandsAttestation(attestations: any[]): boolean { const now = Math.floor(Date.now() / 1000); return attestations.some(att => att.fullSchemaId === 'onchain_evm_10_0x8' && att.attester === '0xB1f50c6C34C72346b1229e5C80587D0D659556Fd' && att.isReceiver === true && att.revoked === false && att.validUntil > now ); }

Proof of Clean Hands SBTs (Sui)

For Sui blockchain integration, query Proof of Clean Hands SBT status directly.

GET /attestation/sbts/clean-hands

Query Parameters

NameRequiredDescription
addressYesThe user’s Sui address
action-idYesYour action ID
Sample request
curl --request GET \ 'https://api.holonym.io/attestation/sbts/clean-hands?address={sui_address}&action-id=123456789'
Sample response (verified user)
{ "isUnique": true, "signature": "0x...", "circuitId": 12345 }
Sample response (non-verified user)
{ "isUnique": false }

Response

FieldTypeDescription
isUniquebooleantrue if the user has a valid Proof of Clean Hands attestation, false otherwise
signaturestringCryptographic signature for on-chain verification (only present when isUnique is true)
circuitIdnumberThe circuit identifier used for the attestation (only present when isUnique is true)

Proof of Clean Hands verification combines KYC data with AML (Anti-Money Laundering) checks. The user’s identity information is encrypted and can only be decrypted by authorized parties in case of regulatory requirements.


Supported Networks

NetworkPath ValueSupported Endpoints
Optimism (Mainnet)optimismAll endpoints
Base Sepolia (Testnet)base-sepoliaAll endpoints

For more details on integration patterns, see the Developer Quick Start .

Last updated on