pulse_signed_batch
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_signed_batch for the schema, then POST the same URL with its arguments for the data.
Signed index prices for up to 100 crypto assets in ONE call — each row carries its own signature you can verify individually with pulse_verify_print, offline, with no network call, not just the batch as a whole. Use this instead of looping pulse_signed_price: it is one request against the rate limit and every observation still carries its own signature, grade, venue count and interval. Symbols Pulse does not serve come back named in not_served rather than silently missing. Requires a Pulse API key via _apiKey. Example: pulse_signed_batch({ symbols: [“BTC”, “ETH”, “SOL”] }).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
symbols | array | yes | Up to 100 tickers. A comma-separated string is also accepted. |
items | string | no |
Example call
Arguments
{
"symbols": [
"BTC",
"ETH"
]
}
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_signed_batch","arguments":{"symbols":["BTC","ETH"]}}}'
TypeScript (@pipeworx/sdk)
import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();
const result = await pipeworx.call('pulse_signed_batch', {
"symbols": [
"BTC",
"ETH"
]
});
Response shape
Always returns: requested, returned, observations, each_row_signed, source
| Field | Type | Description |
|---|---|---|
requested | number | Count of symbols requested |
returned | number | Count of symbols Pulse actually served |
observations | array | One signed print per served symbol, each independently verifiable |
not_served | array | null | Symbols requested but absent from Pulse’s response |
each_row_signed | string | Reminder each observation is independently verifiable |
source | string | Constant: Pulse Verity Index (thepulse.markets) |
not_served_note | string | Explains why not_served exists and how to read it, when at least one requested symbol got no print. |
Full JSON Schema
{
"type": "object",
"properties": {
"requested": {
"type": "number",
"description": "Count of symbols requested"
},
"returned": {
"type": "number",
"description": "Count of symbols Pulse actually served"
},
"observations": {
"type": "array",
"description": "One signed print per served symbol, each independently verifiable",
"items": {
"type": "object",
"properties": {
"success": {
"type": [
"boolean",
"null"
],
"description": "Whether Pulse served this symbol"
},
"symbol": {
"type": [
"string",
"null"
],
"description": "Asset ticker, 2nd field of this row's canonical string"
},
"price": {
"type": [
"number",
"null"
],
"description": "Price as a float; priceText is what was actually signed"
},
"priceText": {
"type": [
"string",
"null"
],
"description": "Price exactly as served, 3rd field of the canonical string"
},
"at": {
"type": [
"string",
"null"
],
"description": "Observation timestamp, 4th field of the canonical string"
},
"grade": {
"type": [
"string",
"null"
],
"description": "consensus/blended/indicative, 5th field of the canonical string"
},
"signature": {
"type": [
"string",
"null"
],
"description": "Base64 ECDSA P-256 signature over this row's canonical string"
},
"kid": {
"type": [
"string",
"null"
],
"description": "Key id selecting which public key verifies this row's signature"
},
"sig": {
"type": [
"string",
"null"
],
"description": "Signing scheme tag, 1st field of the canonical string (pulse-index-v1)"
},
"engine": {
"type": [
"string",
"null"
],
"description": "Pulse's pricing engine identifier"
},
"sources": {
"type": [
"number",
"null"
],
"description": "Count of independent venues contributing"
},
"tier": {
"type": [
"string",
"null"
],
"description": "Same value as grade"
},
"confidence": {
"type": [
"number",
"null"
],
"description": "Pulse's confidence score for this observation"
},
"dispersionBps": {
"type": [
"number",
"null"
],
"description": "Spread across venues in basis points"
},
"interval": {
"type": [
"object",
"null"
],
"description": "Confidence interval bounds"
},
"cadence": {
"type": [
"object",
"null"
],
"description": "Update-frequency metadata for this asset"
},
"settleable": {
"type": "boolean",
"description": "True only for consensus/blended grades"
},
"grade_note": {
"type": "string",
"description": "Plain-English meaning of grade and whether it is settleable"
}
}
}
},
"not_served": {
"type": [
"array",
"null"
],
"description": "Symbols requested but absent from Pulse's response",
"items": {
"type": "string"
}
},
"each_row_signed": {
"type": "string",
"description": "Reminder each observation is independently verifiable"
},
"source": {
"type": "string",
"description": "Constant: Pulse Verity Index (thepulse.markets)"
},
"not_served_note": {
"type": "string",
"description": "Explains why not_served exists and how to read it, when at least one requested symbol got no print."
}
},
"required": [
"requested",
"returned",
"observations",
"each_row_signed",
"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.