pulse_verify_print
Pack: pulse-verity · Connect: https://pipeworx.io/mcp (see Connect below for a single-pack URL)
No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/pulse_verify_print for the schema, then POST the same URL with its arguments for the data.
Check whether a Pulse signed price print is authentic and unaltered — pass a print back exactly as a Pulse tool returned it and this recomputes the ECDSA P-256 / SHA-256 signature over the canonical string, entirely OFFLINE with no network call to Pulse. WHAT A valid:true RESULT PROVES: that Pulse asserted this exact price, for this symbol, at this timestamp, at this grade, and that nobody altered any of those fields in transit — it detects a single changed digit of price or a one-millisecond shift in the timestamp. WHAT IT DOES NOT PROVE: that the price is CORRECT or reflects the true market — this checks Pulse’s signature, not the world, so a print can verify perfectly and still be a price Pulse itself got wrong. The verification is computed here, not asked of Pulse, so Pulse cannot vouch for a print it never signed and an offline or compromised source cannot turn an invalid print into a valid one. Needs NO API key. Example: pulse_verify_print({ symbol: “BTC”, priceText: “76051.0676303142”, price: 76051.0676303142, at: “2026-09-16T23:39:30.524Z”, grade: “consensus”, signature: “wiD005d9…”, kid: “pvi-Sl40p5Gj2t_-JyKUhxyg” }).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
symbol | string | yes | From the print, unchanged. |
price | number | no | From the print. Used only if priceText is absent. |
priceText | string | no | The price EXACTLY as Pulse served it. This is what was signed — prefer it always. |
at | string | yes | From the print, unchanged. A 1ms difference invalidates the signature. |
grade | string | yes | From the print: consensus, blended or indicative. |
signature | string | yes | Base64 signature from the print. |
kid | string | no | Key id from the print; selects which public key to check against. |
sig | string | no | Scheme tag from the print (pulse-index-v1). |
Example call
Arguments
{
"symbol": "BTC",
"price": 86163.21518729837,
"priceText": "86163.21518729837",
"at": "2026-09-22T22:04:06.151Z",
"grade": "consensus",
"signature": "vI57zfSrNW13+kBdRlhLpxsv0pKHVStIRWvXNofS6lgMDl3QaJuxB987ap8nOph3mD/QXNQw1H1YXXDfCXqcxA==",
"kid": "pvi-Sl40p5Gj2t_-JyKUhxyg"
}
curl
curl -X POST https://gateway.pipeworx.io/pulse-verity/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"pulse_verify_print","arguments":{"symbol":"BTC","price":86163.21518729837,"priceText":"86163.21518729837","at":"2026-09-22T22:04:06.151Z","grade":"consensus","signature":"vI57zfSrNW13+kBdRlhLpxsv0pKHVStIRWvXNofS6lgMDl3QaJuxB987ap8nOph3mD/QXNQw1H1YXXDfCXqcxA==","kid":"pvi-Sl40p5Gj2t_-JyKUhxyg"}}}'
TypeScript (@pipeworx/sdk)
import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();
const result = await pipeworx.call('pulse_verify_print', {
"symbol": "BTC",
"price": 86163.21518729837,
"priceText": "86163.21518729837",
"at": "2026-09-22T22:04:06.151Z",
"grade": "consensus",
"signature": "vI57zfSrNW13+kBdRlhLpxsv0pKHVStIRWvXNofS6lgMDl3QaJuxB987ap8nOph3mD/QXNQw1H1YXXDfCXqcxA==",
"kid": "pvi-Sl40p5Gj2t_-JyKUhxyg"
});
Response shape
Always returns: valid, symbol, at, grade, settleable, kid_used, key_source, signature_bytes, canonical_string, price_field_used, verification, source
| Field | Type | Description |
|---|---|---|
valid | boolean | True only if the signature matches the canonical string exactly |
symbol | string | Echoed from the input print, 2nd field of the canonical string |
at | string | Echoed from the input print, 4th field of the canonical string |
grade | string | Echoed from the input print, 5th field of the canonical string |
settleable | boolean | True only for consensus/blended grades |
kid_used | string | Key id actually used to verify, resolved from input or the ring |
key_source | string | Whether the verification key came from cache or a fresh ring fetch |
signature_bytes | number | Length of the decoded signature, for sanity-checking the input |
canonical_string | string | The exact bytes checked: pulse-index-v1\n{symbol}\n{priceText}\n{at}\n{grade} |
price_field_used | string | Whether priceText (signed) or a String(price) fallback was used |
verification | string | States the algorithm and that Pulse is never asked to vouch for a print |
source | string | Constant: Pulse Verity Index (thepulse.markets) |
fallback_warning | string | Present only when priceText was omitted and price was used instead — flags that JS float formatting could diverge from the signed wire text. |
grade_note | string | Plain-language explanation of what the returned grade means for settlement. |
invalid_note | string | Present only when valid is false — explains that the signature does not match the print and it must not be settled against. |
Full JSON Schema
{
"type": "object",
"properties": {
"valid": {
"type": "boolean",
"description": "True only if the signature matches the canonical string exactly"
},
"symbol": {
"type": "string",
"description": "Echoed from the input print, 2nd field of the canonical string"
},
"at": {
"type": "string",
"description": "Echoed from the input print, 4th field of the canonical string"
},
"grade": {
"type": "string",
"description": "Echoed from the input print, 5th field of the canonical string"
},
"settleable": {
"type": "boolean",
"description": "True only for consensus/blended grades"
},
"kid_used": {
"type": "string",
"description": "Key id actually used to verify, resolved from input or the ring"
},
"key_source": {
"type": "string",
"description": "Whether the verification key came from cache or a fresh ring fetch"
},
"signature_bytes": {
"type": "number",
"description": "Length of the decoded signature, for sanity-checking the input"
},
"canonical_string": {
"type": "string",
"description": "The exact bytes checked: pulse-index-v1\\n{symbol}\\n{priceText}\\n{at}\\n{grade}"
},
"price_field_used": {
"type": "string",
"description": "Whether priceText (signed) or a String(price) fallback was used"
},
"verification": {
"type": "string",
"description": "States the algorithm and that Pulse is never asked to vouch for a print"
},
"source": {
"type": "string",
"description": "Constant: Pulse Verity Index (thepulse.markets)"
},
"fallback_warning": {
"type": "string",
"description": "Present only when priceText was omitted and price was used instead — flags that JS float formatting could diverge from the signed wire text."
},
"grade_note": {
"type": "string",
"description": "Plain-language explanation of what the returned grade means for settlement."
},
"invalid_note": {
"type": "string",
"description": "Present only when valid is false — explains that the signature does not match the print and it must not be settled against."
}
},
"required": [
"valid",
"symbol",
"at",
"grade",
"settleable",
"kid_used",
"key_source",
"signature_bytes",
"canonical_string",
"price_field_used",
"verification",
"source"
]
}
Connect
Add this to your MCP client config — every tool in the catalog, including this one — or use one-click install buttons:
{
"mcpServers": {
"pipeworx": {
"url": "https://pipeworx.io/mcp"
}
}
}
Connect to just the pulse-verity pack
{
"mcpServers": {
"pulse-verity": {
"url": "https://gateway.pipeworx.io/pulse-verity/mcp"
}
}
}
See Getting Started for client-specific install steps.