REST API
POST /verify
Verify Web Proofs
POST /api/v2.0/verify
Verify a previously generated Web Proof. To verify up to 32 proofs in one request, use POST /api/v2.0/verify-batch. The verification process:
- Verifies the HTTPS transcript - Confirms the integrity of the recorded HTTP request/response data
- Verifies the Notary's signature - Validates the cryptographic signature from the signing key
- Confirms data origin - Ensures the data comes from the expected domain specified in the original request
- SSL certificate validation - Verifies the server's SSL certificate and its complete chain of authority
- Extracts plain text transcript - Retrieves the verified HTTP request/response data for further processing
- Automatic decoding - Handles chunked transfer encoding and gzip compression automatically
- Raw transcript access - Provides hex-encoded raw transcript bytes for verification
success: true validates the presentation and signature, but does not establish that the signer was trusted. Complete verification by checking the returned fingerprint and TLS timestamp against the trusted notary key list.
Authentication
Requests require header:
Authorization: Bearer <api-key>: Your API key
Request Body
Send the data object from the /api/v2.0/prove response directly as the request body.
data: Hex-encoded proof dataversion: Web Proof format version. Accepted values:"0.1.0-alpha.12"(server-side proving),"2.0.0"(Vouch, client-side proving)meta: Metadata objectnotaryUrl: URL of the notary server used during proving
Response Body
Success
{
"apiVersion": "v2.0",
"success": true,
"data": {
"serverDomain": "data-api.binance.vision",
"notaryKeyFingerprint": "a7e62d7f17aa7a22c26bdb93b7ce9400e826ffb2c6f54e54d2ded015677499af",
"tlsTimestamp": 1758284634,
"request": { ... },
"response": { ... }
}
}apiVersion: API version stringsuccess:truedata.serverDomain: Domain name of the server that was contacteddata.notaryKeyFingerprint: SHA-256 fingerprint of the notary's public key. It must match an entry in the trusted notary key listdata.tlsTimestamp: Unix epoch timestamp (seconds) of when the TLS handshake occurred, as recorded by the notary. This can be used to establish when the proven data was retrieveddata.request: Parsed HTTP requestmethod: HTTP method (e.g."GET")url: Request path and query stringversion: HTTP version (e.g."HTTP/1.1")headers: Array of"name: value"stringsbody: Decoded UTF-8 body string, ornullraw: Hex-encoded raw transcript bytes
data.response: Parsed HTTP responsestatus: HTTP status code (e.g.200)version: HTTP version (e.g."HTTP/1.1")headers: Array of"name: value"stringsbody: Decoded UTF-8 body string (automatically decoded from chunked/gzip encoding), ornullraw: Hex-encoded raw transcript bytes
Error
{
"apiVersion": "v2.0",
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Invalid request: ..."
}
}error.code: Machine-readable error code. Possible values:INVALID_REQUEST— malformed request body (400)INVALID_PRESENTATION— thedatafield could not be decoded as a valid presentation (400)INTERNAL_SERVER_ERROR— verification or transcript parsing failed (500)
error.message: Human-readable description. The values returned here may change over time, useerror.codefor stable error indication
Example
curl -X POST https://web-prover.production.vlayer.xyz/api/v2.0/verify \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-api-key>" \
-d '{
"data": "014000000000000000899cdccd31337c96bb9e519aa438ed73cdb47dda5c80e995ef0a1c04bf6c563730cde41724dafc1391b1b81acc5d989a7f7add8...",
"version": "2.0.0",
"meta": {
"notaryUrl": "https://notary.production.vlayer.xyz/v2.0.0"
}
}'Response:
{
"apiVersion": "v2.0",
"success": true,
"data": {
"serverDomain": "data-api.binance.vision",
"notaryKeyFingerprint": "a7e62d7f17aa7a22c26bdb93b7ce9400e826ffb2c6f54e54d2ded015677499af",
"tlsTimestamp": 1758284634,
"request": {
"method": "GET",
"url": "/api/v3/exchangeInfo?symbol=ETHUSDC",
"version": "HTTP/1.1",
"headers": [
"connection: close",
"host: data-api.binance.vision"
],
"body": null,
"raw": "474554202f6170692f76332f65786368616e6765496..."
},
"response": {
"status": 200,
"version": "HTTP/1.1",
"headers": [
"date: Thu, 02 Oct 2025 04:27:38 GMT",
"content-type: application/json;charset=UTF-8",
"content-length: 5471",
"connection: close",
"server: nginx"
],
"body": "{\"timezone\":\"UTC\",\"serverTime\":1759379258989,...}",
"raw": "485454502f312e3120323030204f4b0d0a446174653..."
}
}
}