POST /verify-batch
Verify multiple Web Proofs
POST /api/v2.0/verify-batch
Verify up to 32 Web Proofs in one request. Each item is verified the same way as POST /api/v2.0/verify: the HTTPS transcript, the notary signature, and the server certificate are checked, and the decoded HTTP transcript is returned.
HTTP 200 means every proof in the batch was attempted. success: true on the envelope does not mean every proof verified. Read success on each item in data.results.
For every successful item, also check that data.notaryKeyFingerprint is in the trusted notary key list and that data.tlsTimestamp falls within that key's validity window. Per-item success: true alone does not establish a trusted signer.
Authentication
Requests require header:
Authorization: Bearer <api-key>: Your API key
Request Body
All field names must be in camelCase. Unknown fields are rejected with a 400 error.
proofs: Array of 1 to 32 Web Proofs. An empty array, or more than 32 items, is rejected with400 INVALID_REQUESTbefore any proof is verifiedid: Optional caller-defined string. It is copied onto that item's result, and omitted from the result when the request omitted itdata: Hex-encoded proof data. Hex is checked while parsing the JSON body, so one malformeddatastring rejects the whole requestversion: 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 provingwebsocketProxyUrl: Optional websocket proxy URL recorded with the proof
The maximum body size on this route is 32 MiB.
A presentationJson object from a Vouch webhook, or the data object from POST /api/v2.0/prove, can be placed in proofs as-is. Add id when you want that label on the result.
Response Body
Success
Results stay in request order. index is the 0-based position in proofs.
{
"apiVersion": "v2.0",
"success": true,
"data": {
"results": [
{
"index": 0,
"id": "proof-a",
"success": true,
"data": {
"serverDomain": "data-api.binance.vision",
"notaryKeyFingerprint": "a7e62d7f17aa7a22c26bdb93b7ce9400e826ffb2c6f54e54d2ded015677499af",
"tlsTimestamp": 1758284634,
"request": { ... },
"response": { ... }
}
},
{
"index": 1,
"id": "proof-b",
"success": false,
"error": {
"code": "INVALID_PRESENTATION",
"message": "..."
}
}
]
}
}apiVersion: API version stringsuccess:truewhen the batch was accepted. Check each result for whether that proof verifieddata.results: One entry per proof, in request orderindex: Position of this proof inproofsid: The requestid, when one was sentsuccess:truewhen the presentation and signature verified; the trusted-key validity-window check is still requireddata: Present whensuccessistrue. Same objectPOST /api/v2.0/verifyreturns:serverDomain,notaryKeyFingerprint,tlsTimestamp,request, andresponseerror: Present whensuccessisfalse. A failed item has nodata
Per-item error.code values:
INVALID_PRESENTATION—datadecoded, but it is not a valid presentation for the declaredversionINTERNAL_SERVER_ERROR— verification or transcript parsing failed. The message isInternal server error
Error
These responses reject the request before any proof is verified.
{
"apiVersion": "v2.0",
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Invalid request: ..."
}
}error.code: Machine-readable error code. Possible values:INVALID_REQUEST— malformed body, including missing or unknown fields, malformed hex, a missingContent-Type, an emptyproofsarray, or more than 32 proofs (400)PAYLOAD_TOO_LARGE— body is larger than 32 MiB (413)INTERNAL_SERVER_ERROR— the server could not finish the batch (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-batch \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-api-key>" \
-d '{
"proofs": [
{
"id": "proof-a",
"data": "014000000000000000899cdccd31337c96bb9e519aa438ed73cdb47dda5c80e995ef0a1c04bf6c563730cde41724dafc1391b1b81acc5d989a7f7add8...",
"version": "2.0.0",
"meta": {
"notaryUrl": "https://notary.production.vlayer.xyz/v2.0.0"
}
},
{
"id": "proof-b",
"data": "014000000000000000899cdccd31337c96bb9e519aa438ed73cdb47dda5c80e995ef0a1c04bf6c563730cde41724dafc1391b1b81acc5d989a7f7add8...",
"version": "2.0.0",
"meta": {
"notaryUrl": "https://notary.production.vlayer.xyz/v2.0.0"
}
}
]
}'