Verify a statement. Every monthly statement from the console is signed. Drop the JSON file here, and its CSV if you have it, to check that both came from UplinkSwitch and have not been changed. The check runs in this browser; nothing is uploaded.
Public key: GET https://api.uplinkswitch.com/v1/statements/public-key
Check it in your own code
Node 20+
import { readFileSync } from 'node:fs';
const doc = JSON.parse(readFileSync('uplinkswitch-statement-2026-10.json', 'utf8'));
const { jwk } = await (await fetch('https://api.uplinkswitch.com/v1/statements/public-key')).json();
const key = await crypto.subtle.importKey('jwk', { kty: jwk.kty, crv: jwk.crv, x: jwk.x },
{ name: 'Ed25519' }, false, ['verify']);
const ok = await crypto.subtle.verify({ name: 'Ed25519' }, key,
Buffer.from(doc.signature, 'base64url'), new TextEncoder().encode(doc.payload));
console.log(ok ? 'valid' : 'NOT valid');Python · cryptography
import base64, json, urllib.request
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
doc = json.load(open("uplinkswitch-statement-2026-10.json"))
jwk = json.load(urllib.request.urlopen("https://api.uplinkswitch.com/v1/statements/public-key"))["jwk"]
b64 = lambda s: base64.urlsafe_b64decode(s + "=" * (-len(s) % 4))
key = Ed25519PublicKey.from_public_bytes(b64(jwk["x"]))
key.verify(b64(doc["signature"]), doc["payload"].encode()) # raises if not valid
print("valid")