Bulk notarization: up to 10 URLs in one settled call
Notarize up to 10 public URLs in a single x402 payment, each returning its own signed attestation, with per-URL failures reported instead of failing the batch.
When to use it
Use POST /v1/snapshot/batch ($0.03) when an agent needs evidence for several URLs at the same moment: a set of competitor prices, every source behind one claim, or the pages a decision rested on. Ten separate snapshots cost $0.10 and ten round trips; the batch costs $0.03 and one. Below about three URLs the single endpoint is simpler and no more expensive.
Request
This is the only paid endpoint that is POST rather than GET, because the URL list travels in a JSON body. Send 1 to 10 http(s) URLs:
curl -X POST https://jurat.dev/v1/snapshot/batch \
-H 'content-type: application/json' \
-d '{"urls":["https://example.com","https://example.org"]}'
The body is validated free, before the payment challenge is answered and long before anything settles: an empty list, more than 10 URLs, a non-array, an unknown field or a URL jurat will not fetch all return 400 with the accepted shape. You are never charged to discover a malformed batch.
Response
Each URL gets its own independent attestation, identical in form to a single snapshot, so every existing verification recipe applies unchanged:
{
"batch": "snapshot",
"requested": 2,
"attestations": [
{ "url": "https://example.com", "signed": { "id": "…", "sha256": "ff67a9d7…" }, "signature": "…" },
{ "url": "https://example.org", "signed": { "id": "…", "sha256": "3b1f0c22…" }, "signature": "…" }
],
"summary": { "succeeded": 2, "failed": 0 }
}
Partial failure is not batch failure
One unreachable or refused URL does not sink the others. That URL is reported with its own error in the results and counted in summary.failed, while every URL that did resolve still returns a full, signed attestation. jurat tells you exactly which ones it could not witness rather than quietly dropping them or failing the whole call.
Notes
- Every attestation from a batch is retrievable and verifiable free forever at
/v1/attestation/{id}, exactly like a single snapshot. - They roll into the same daily merkle root, so each carries its own proof once anchored. See anchoring.
- Because this endpoint is POST-only, a
GETagainst it returns 405 by design. Discovery probes that only send GET should use the single snapshot endpoint instead. - The same fetch guardrails apply per URL: public HTTP(S) only, 10 MB cap, 20 second timeout.