Verify a Signed Print
verify_printVerify a signed print locally with ECDSA P-256/SHA-256. Canonical bytes are pulse-index-v1\n\n<priceText or String(price)>\n\n. The public key ring is read from /api/index/v1/pubkey, cached for five minutes and refreshed at most once per 30 seconds on a failed check. A supplied kid selects only that exact key; old prints without kid are tried against the bounded published ring. valid=true authenticates only the canonical price fields, not kid, sig, quality, cadence, timestamps outside at, or other metadata. When the print carries a v2 block (pulse-index-v2), it is verified too: v2.valid=true means the signature over v2.canonical is valid AND every signed line (sources, tier, confidence, dispersionBps, interval, cadence, engine, price and the rest) matches the supplied fields; v2.signedFields are the signed values and v2.mismatches names any field that differs. recordValid=true and verificationScope=full-record require BOTH price and complete v2 record verification. metadataSigned equals recordValid. Require recordValid before trusting quality fields. A v1-only print has scope price-only, never verified metadata. Neither signature proves freshness or settlement suitability; indicative data must not be used for settlement. An invalid signature can mean an altered print or a key no longer published; it does not by itself prove tampering.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| at | Yes | Timestamp from the print, unchanged | |
| v2 | No | The v2 block from the print, unchanged: it signs the whole record, quality fields included | |
| kid | No | Signing key identifier, when provided by the API | |
| sig | No | ||
| kind | No | ||
| tier | No | ||
| grade | Yes | ||
| price | Yes | ||
| engine | No | ||
| symbol | Yes | Crypto ticker symbol, e.g. BTC, ETH, SOL | |
| assetId | No | ||
| cadence | No | ||
| sources | No | ||
| closeDay | No | ||
| interval | No | ||
| priceText | No | Exact signed price text, when provided by the API; preserve unchanged | |
| signature | Yes | ECDSA P-256 signature in base64 | |
| confidence | No | ||
| dispersionBps | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| v2 | No | ||
| error | No | ||
| valid | No | Legacy price-only signature check. Use recordValid for quality metadata. | |
| checked | No | ||
| keySource | No | ||
| requestId | Yes | Identifier for this MCP call; not a signed price field. | |
| recordValid | No | Both signatures and every required v2 field verified. Does not prove freshness or settlement suitability. | |
| metadataSigned | No | ||
| verifiedWithKid | No | ||
| verificationScope | No |