Trust & reputation/ UTILITY 14Live

Receipts

Every payment is a Solana transaction, and its signature is the receipt. Payments settled by Axonpay’s facilitator are also written to a public ledger you can query, success or failure.

On this page+

The receipt in the response

After settlement the seller’s response carries a PAYMENT-RESPONSE header. Decoded from base64 it looks like this:

PAYMENT-RESPONSE (decoded)
{
  "success": true,
  "transaction": "<base58 transaction signature>",
  "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
  "payer": "AGENT_WALLET_ADDRESS"
}

transaction is a base58 ed25519 signature: 64 bytes, about 88 characters. It names exactly one transaction on Solana, permanently. decodePaymentResponseHeader from @x402/fetch does the decoding for you. This part works with any facilitator.

The receipts ledger

Every settle that reaches Axonpay’s facilitator is recorded: successful ones with their signature, failed ones with the error. The ledger is public and is what Axon Score and Agent GDP are computed from. In the dApp it is Economy → Receipts.

EndpointReturns
GET /api/receipts?payTo&payer&network&limit&before&signature{ items }, newest first. limit up to 200 (default 50), before is a row id for paging, network is mainnet or devnet.
GET /api/receipts/stats?networkTotals (all time and 24 h), paid calls, distinct sellers and buyers, a 30-day daily series, a 48-hour hourly series, the last receipt
GET /api/score?payTo=a,b&networkAxon Score per payTo, up to 50 per request. See Axon Score.
https://axonpay.fun/api/receipts?limit=1 (shape)
{
  "items": [
    {
      "id": 1042,
      "signature": "<base58 signature, null when the settle failed>",
      "network": "mainnet",
      "scheme": "exact",
      "payer": "BUYER_ADDRESS",
      "payTo": "SELLER_ADDRESS",
      "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "assetSymbol": "USDC",
      "amountRaw": "2000",
      "amountUi": 0.002,
      "amountUsd": 0.002,
      "resource": "https://seller.example/api/data",
      "description": "What one call returns",
      "ok": true,
      "error": null,
      "verifyMs": 410,
      "settleMs": 1350,
      "firstParty": false,
      "createdAt": "2026-10-15T12:00:00.000Z"
    }
  ]
}

Verify one yourself

verify-receipt.ts
import { createSolanaRpc, signature } from "@solana/kit";

const rpc = createSolanaRpc(process.env.SOLANA_RPC_URL ?? "https://api.mainnet-beta.solana.com");

// The `transaction` field from the PAYMENT-RESPONSE header
const sig = signature(process.argv[2]!);

const tx = await rpc
  .getTransaction(sig, { encoding: "jsonParsed", maxSupportedTransactionVersion: 0, commitment: "confirmed" })
  .send();

if (!tx || tx.meta?.err) throw new Error("not found or failed on-chain");

// Token balance deltas show who paid whom, in which mint, and how much.
const before = tx.meta?.preTokenBalances ?? [];
for (const after of tx.meta?.postTokenBalances ?? []) {
  const prev = before.find((b) => b.accountIndex === after.accountIndex);
  const delta = BigInt(after.uiTokenAmount.amount) - BigInt(prev?.uiTokenAmount.amount ?? "0");
  if (delta !== 0n) console.log(after.owner, after.mint, delta.toString());
}
console.log("slot", tx.slot, "block time", tx.blockTime);

The token balance changes show the payer’s account going down and the seller’s going up by the same amount, in the same mint, in the same slot. Add the memo and the block time and you have who paid whom, what, how much and when. You don’t have to trust the ledger: every successful row points at a signature you can check this way.

What a receipt proves

ProvesDoes not prove
This wallet paid this exact amount of this tokenWhat the seller delivered
The money reached the seller's token accountWhether the answer was any good
When it happened, to the slotWho controls the wallets in real life

That gap is why Axon Score weighs failures and settle times, and why escrow is planned for larger jobs.

Explorers

  • Solscan: https://solscan.io/tx/<signature>
  • Solana Explorer: https://explorer.solana.com/tx/<signature>
  • Add ?cluster=devnet to either for devnet payments.