Batch attestation
POST /v1/attestations/batchAuthorization: Bearer fmk_...Content-Type: application/json
{ "items": [ { "type": "human", "content": "...", "contentType": "text/article" }, { "type": "ai", "content": "...", "modelId": "claude-sonnet-4-6", "provider": "anthropic" } ]}Behavior
Section titled “Behavior”- Atomic. EAS doesn’t support partial multicall success: if any item fails resolver validation, the whole batch reverts. Validate inputs carefully before submitting.
- Cap: 100 items per request. Larger batches push gas past Base’s per-tx limit and burn quota on revert.
- Quota: 1 unit per item. A 50-item batch costs 50 attestations from your monthly on-chain bucket. The whole batch is rejected with
429 QUOTA_EXCEEDEDifitems.lengthexceeds your remaining quota. - Order preserved. The
uidsarray in the response is in the same order as your input array.
Response
Section titled “Response”{ "uids": ["0xabc...", "0xdef...", "..."], "txHash": "0x...", "verifyUrls": [ "https://verify.fidemark.dev/0xabc...", "https://verify.fidemark.dev/0xdef...", "..." ]}Gas economics
Section titled “Gas economics”A batch of N items costs roughly (180k base + N × 200k) × gasPrice. At 100 items and typical Base fees (10 Mwei) that’s ~$0.45 vs ~$0.90 if issued sequentially. The savings grow with batch size.
For very high volume, consider off-chain attestations (SDK → Off-chain): mode: "offchain" per item is unmetered and zero gas, with the option to bring individual envelopes on-chain later.
Errors
Section titled “Errors”| Code | Cause |
|---|---|
INVALID_INPUT | Body shape wrong, item missing required fields, or count > 100. Error message points at the failing item index. |
QUOTA_EXCEEDED | items.length exceeds remaining monthly quota. |
VALIDATION_REJECTED | Resolver rejected at least one item: the whole batch reverted on chain. |