← The evidence ledger
Evidence row 4403814
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 478537aa-6334-4017-afca-6fe2fb985165
- Recorded
- Previous row
- #4162130
- Body SHA-256
- d1e5796470653caf81a42fc5a62729dd98b4f3f75635340a9cbb9a2bb3052585
- Leaf
- 0x6cc681217ca10f12df032912adf354f5f109983c4a9fc5f612fcb288b17dbd6d
What was observed
{
"count": 8,
"tools": [
{
"description": "Apply for an enterprise (invoiced) account, for platforms printing at volume behind their own checkout. Enterprise orders auto-confirm with no payment link and are settled monthly, with a minimum of ₹10,000 of orders a month (a month below that is billed at retail). Storybooks are priced 25% below the retail price list (every copy at that price), and custom-cut stickers and greeting cards are the retail price for everyone. Requires a registered India GSTIN for tax invoicing. It is checked against the GST registry, and one the registry lists as cancelled is refused. No key is issued here or sent by email. A person reviews the application, and once approved the person at contact_email signs in at https://themassprint.com/business with a one-time email code (no password) and creates the API key there, shown once. Once approved, you pay a ₹10,000 advance at themassprint.com/business before you create the API key. Online it costs ₹10,205 by UPI or netbanking, or ₹10,310 by card, wallet, EMI or Pay Later, which covers Razorpay's fee. The advance is adjusted against your first monthly bill, and you can pay it by bank transfer instead. Use this only when a human has asked to set up a business or enterprise print account.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_name": {
"description": "Registered business name.",
"type": "string"
},
"contact_email": {
"description": "The person who will run the account. Once approved they sign in at https://themassprint.com/business with this email to create API keys. Invoices go here too.",
"type": "string"
},
"expected_monthly_volume": {
"description": "Approximate orders a month (optional).",
"minimum": 0,
"type": "integer"
},
"gstin": {
"description": "15-character India GSTIN, e.g. 29ABCDE1234F1ZW. The last character is a check character. Required for GST invoicing.",
"type": "string"
},
"notes": {
"description": "Anything else for the reviewer (optional).",
"type": "string"
}
},
"required": [
"company_name",
"contact_email",
"gstin"
],
"type": "object"
},
"name": "apply_enterprise"
},
{
"description": "Cancel an order, stopping it before it is printed. With the order_token from create_order this works while the order is awaiting_payment (which also closes its payment link, and a payment that still lands on it is refunded in full automatically), and after payment until production starts (order.refund_on_cancel is true), when the payment is refunded in full automatically and the result status is refunded. A platform that sends its own API key (Authorization: Bearer mp_live_...) can additionally cancel an order THAT KEY created while it is confirmed or printing — that is how you stop a press when your customer cancels on your side. shipped and delivered can never be canceled; that is a refund, contact support (see get_catalog). Once printing has started, canceling (creating key only) stops production but moves no money. Canceling releases the order's client_reference — replaying that reference afterwards creates a new order and prints it. If the order moved on before the cancel landed you get not_cancellable naming its new status, never a false \"canceled\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"order_id": {
"description": "The order_id returned by create_order, e.g. ord_01HZX8K3M9QWER5T7Y2B4N6C8D. Not the order_token.",
"type": "string"
},
"order_token": {
"description": "The token returned once by create_order. Optional if you send the API key that created the order instead.",
"type": "string"
}
},
"required": [
"order_id"
],
"type": "object"
},
"name": "cancel_order"
},
{
"description": "Create a print order for a validated upload. Validates everything BEFORE any payment link is minted. Returns { order, order_token } — the order object has order_id, status, amount, and payment_url (the Razorpay link, present while awaiting_payment). Give payment_url to the human to pay (UPI/cards/netbanking). SAVE order_token — it is shown only once and is required for get_order and cancel_order. The order confirms automatically after payment; unpaid orders expire after 72 hours.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"address": {
"additionalProperties": false,
"description": "India shipping address (V1 ships within India only).",
"properties": {
"city": {
"description": "City or town, e.g. \"Bengaluru\".",
"type": "string"
},
"line1": {
"description": "Street address: flat or house, building, street, e.g. \"12B, Lakeview Apartments, 4th Cross\".",
"type": "string"
},
"line2": {
"description": "Area or landmark (optional), e.g. \"Indiranagar, near Metro station\".",
"type": "string"
},
"name": {
"description": "Recipient name as the courier should read it, e.g. \"Priya Raman\".",
"type": "string"
},
"phone": {
"description": "India mobile, 10 digits, optional +91 prefix",
"type": "string"
},
"pincode": {
"description": "6-digit India PIN code",
"type": "string"
},
"state": {
"description": "Indian state or union territory, e.g. \"Karnataka\".",
"type": "string"
}
},
"required": [
"name",
"line1",
"city",
"state",
"pincode",
"phone"
],
"type": "object"
},
"client_reference": {
"description": "Your own order id, e.g. \"shop-order-48213\" (optional). For callers sending an API key it makes create_order idempotent: replaying the same reference returns the original order instead of printing a second copy (order_token is then null, it was shown at the original creation). A canceled, refunded or expired order releases its reference. Stored but not enforced for keyless callers.",
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"copies": {
"default": 1,
"description": "Required for sticker (1,000 to 10,000 pieces) and for flat-card/folded-card (10 to 5,000 cards, cheaper per card from 50, 250 and 500). Books, sticker-a3 and greeting-card-a5 take 1 to 20, every copy the same price, and only they may leave it out for 1 copy.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
},
"email": {
"description": "Buyer email, e.g. priya@example.com; receives the Razorpay payment notification.",
"format": "email",
"type": "string"
},
"finish": {
"description": "paperback/hardcover: the lamination, gloss (the default) or matte. flat-card/folded-card: matte (the default) or gloss, the coating of standard card or the lamination of laminated card. Ignored for other formats.",
"enum": [
"gloss",
"matte"
],
"type": "string"
},
"format": {
"description": "paperback (staple-pinned) / hardcover (perfect bound): storybook, 24-64 pages including the 4-page 300gsm cover (page 1 front cover, page 2 inside front, last two pages inside back and back). sticker: custom-cut stickers, a one-page PDF at A3, A4 or A5 (portrait or landscape) with the artwork on a white or transparent background; we cut around the artwork. flat-card: a flat greeting card at A4, A5, A6, 8×8 in, 7×5 in or 6×4 in; page 1 front, page 2 back (optional). folded-card: a greeting card folded once, A4, A5 or A6 folded; the PDF page is the open spread (A3, A4 or A5 landscape), page 1 outside (back left, front right), page 2 inside (optional). sticker-a3: one uncut A3 portrait sheet on sticker media, a platform wall chart (exactly 1 page, 842×1191 pt). greeting-card-a5: one personalised folded A5 card for platforms, one A4-landscape sheet printed duplex (exactly 2 pages, 859×612 pt incl. 3 mm bleed).",
"enum": [
"paperback",
"hardcover",
"sticker",
"flat-card",
"folded-card",
"sticker-a3",
"greeting-card-a5"
],
"type": "string"
},
"paper": {
"description": "paperback/hardcover: inside-page paper, 170gsm (standard, the default) or 300gsm (thick, costs more); every cover is 300gsm card; see price_table.paper_prices in get_catalog. flat-card/folded-card: standard (300 GSM coated card, the default) or laminated. Ignored for other formats.",
"enum": [
"170gsm",
"300gsm",
"standard",
"laminated"
],
"type": "string"
},
"upload_id": {
"description": "upload_id of a PDF that passed validation.",
"type": "string"
}
},
"required": [
"upload_id",
"format",
"email",
"address"
],
"type": "object"
},
"name": "create_order"
},
{
"description": "Start a PDF upload. Returns {upload_id, put_url, expires_at, max_bytes}. HTTP PUT the raw PDF bytes to put_url (Content-Type: application/pdf, no auth needed — the URL is signed). The PUT response includes the validation report. Then pass upload_id to create_order. Keyless use is bounded per calling origin: 20 create_upload calls per hour, at most 5 unused uploads open at a time, and put_url expires in 2 hours — so PUT the bytes promptly and reuse an upload_id you already hold instead of creating extras. An API key (see apply_enterprise) lifts both limits.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "create_upload"
},
{
"description": "Show the account behind your API key (Authorization: Bearer mp_live_...): its name, payment mode (invoiced for enterprise accounts) and GSTIN. massprint never messages your customers: tracking reaches you through get_order and your webhooks, and you tell your customers. Requires an API key. Enterprise accounts create and revoke keys at https://themassprint.com/business.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_account"
},
{
"description": "List what can be printed: SKUs (storybook books; custom-cut stickers from 1,000 pieces; greeting cards from 10; and, for platforms, sticker-a3 wall charts and greeting-card-a5 folded cards from one copy), formats, supported trim sizes, page-count limits, prices (INR, shipping included; GST included except on stickers, which add 18%), and shipping coverage (India only). Stickers and greeting cards are priced per piece in piece_prices. Call this first to quote a price or check whether a PDF will be accepted.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_catalog"
},
{
"description": "Check an order: status (awaiting_payment → confirmed → printing → ready_for_dispatch → pickup_scheduled → shipped → out_for_delivery → delivered; or returning, returned, lost if the parcel did not arrive), tracking number once it is booked with the courier (ready_for_dispatch) with every courier scan in tracking.events, and — while unpaid — the payment_url again (so you can always re-answer \"how do I pay\"). Requires the order_token from create_order, or the API key that created the order (Authorization: Bearer mp_live_...).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"order_id": {
"description": "The order_id returned by create_order, e.g. ord_01HZX8K3M9QWER5T7Y2B4N6C8D. Not the order_token.",
"type": "string"
},
"order_token": {
"description": "The token returned once by create_order. Optional if you send the API key that created the order instead.",
"type": "string"
}
},
"required": [
"order_id"
],
"type": "object"
},
"name": "get_order"
},
{
"description": "Get the print-validation report for an uploaded PDF before paying: page count, trim size, hard errors (blocking) and soft warnings (non-blocking). Every error includes a `resolution` explaining how to fix it. Free to call; use it to check printability before create_order.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"upload_id": {
"description": "The upload_id returned by create_upload.",
"type": "string"
}
},
"required": [
"upload_id"
],
"type": "object"
},
"name": "validate_pdf"
}
]
}What the leaf hashes
{"body":"d1e5796470653caf81a42fc5a62729dd98b4f3f75635340a9cbb9a2bb3052585","id":4403814,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1794263588705335,"prev":4162130,"subject":"478537aa-6334-4017-afca-6fe2fb985165","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (209593 rows).
- 0x6cc5f3878cc479b07492eb5559bf9d918898bef46c447fdb6c0f8a4db8c550b2
- 0x8ce4e5f3ebdb31402e1846ec80d55e27587bfd1b865526bc06e25e7932201889
- 0xed6d38e161a8ad6e7bcb1e4724a233f533392a9004dd67661a5d846f7f2cb490
- 0xfb24ec1b8a4154eedb1605c4bea3761f1a69f12bf9ee8301fc20be0b0e31d5ae
- 0x2c7ed319ca5a8c9ebef3bce135d87ab5d4901c3d0eab6737b0ad17524895b31d
- 0xb9209179db563c09c732e295b50f818f7d07481725ad188e3f81a15d79000063
- 0xed8034c77ef8b8286a202f334450d503c7bb3a191f4dce5ebacd4e76ed64ab1b
- 0xd5f4a18d06eb686ea4e279529a13f9395ed19db785a3f7541a0edc9e356e0fb4
- 0xc14d6448dcc57aebe3149cba189e593475507846addfb25974ddbae163adf265
- 0x8857847be8c595775e54bb0bdbf2a7855be6c388c8c20837f9c89c067e3789cd
- 0x0613d760570b04da7aa71022b24be9337aa4af1474e9270f78e380f81d85d790
- 0x3dac4b4b398b0135e7531ad3e4206d6a1868d71bca1c9df7d1b87358283012a3
- 0x2a717c560ef99355de48a6b5e7320f04c6595485aeba579de1ae6e525896a3b7
- 0xedd15374d2c8bb9b0c64ac4350ccc607b4a2df0c9bdc8e3eb3ba37e329d9ec90
- 0x40849e548efe4c2441515c38322f3c4e7f3e63fa2361caa9652744b3207b8b12
- 0xed680d9ac43f244fd291c7b4b997984c2a8a1578ff4e52438807bd611f3483ea
- 0x790afb412bc87698b57dc22f69c5c9b2b2c4f00aedea030ea24f11c390abeecc
- 0x891d501ebce4e16e69b2fbfe01109109c42b0c84f270dea9ce05be75fe9100dd
- Day root
- 0xadd23e68d2467b177541de6f25330599d6ddfbb2156c723aa2064f85e01c7cc2
- Chained
- 0xd527699f30feab3ee8deb2be1d65df3f65bd292a7fc58fbfcc8dfa8e9dc59bec
- Published
- On Arc Testnet, block 71621141: 0x8257214b88f5db5a00aad541f3322e6d61772740bc3a1b67ccfc1eff91e945bb