{"signing":true,"signers":[{"address":"0xf084Ea47Ca4D99BB4De3ECB0332b316bE6521EaE","status":"current","valid_from":null,"valid_until":null}],"authority":"0x6B0F4651eD42893ab58139938175E4a69f175F25","certificate":{"service":"presign-guard","signer":"0xf084Ea47Ca4D99BB4De3ECB0332b316bE6521EaE","valid_from":"2026-09-27","authority":"0x6B0F4651eD42893ab58139938175E4a69f175F25","signature":"0xd6905ffe802d8578e09c4f8a9bb6bb0e2492ac9c9ce338d26a3a25b9328493d34b6e5b05c9f8fa649972ce37a56c22814e95d9451bdd3ffe16dff0af2ccfc97b1b"},"certificate_format":"personal_sign by the authority over: fizzl receipt signer\\nservice: <service>\\nsigner: <address>\\nvalid_from: <YYYY-MM-DD>","sign_certificate":"https://presign-guard.fizzl.eu/sign-receipt-key","algorithm":"EIP-191 personal_sign over canonical JSON of the response without receipt.signature","canonicalization":"js-json-stringify-sorted-utf16-ascii-v1: keys sorted by UTF-16 code units at every level, no whitespace, every code unit from U+007F up as lowercase \\uXXXX, numbers as JavaScript's JSON.stringify writes them (1.0 -> 1, 0.000001 -> 0.000001), UTF-8 bytes. Python's json.dumps matches only for ASCII keys and integers; Python equivalent: https://github.com/Fizzl13/presign-guard/blob/main/examples/canonical.py","input_sha256":"sha256 of the canonical JSON of {route, input}: route like 'POST /v1/check' or 'mcp presign_check'; input = the JSON body (POST), the query parameters as strings (GET) or the tool arguments (MCP)","verify":"https://presign-guard.fizzl.eu/v1/verify"}