Manages Interledger STREAM receipts

Usage no npm install needed!

<script type="module">
  import coilReceiptVerifier from 'https://cdn.skypack.dev/@coil/receipt-verifier';


Receipt Verifier

Manages Interledger STREAM receipts

npm version

STREAM receipts allow recipients or third parties to verify received payments at the recipient's Interledger wallet.

The Receipt Verifier:

  1. pre-shares a secret key with the receiving wallet for generating receipts, by acting as a proxy for SPSP queries to the recipient's payment pointer
  2. verifies receipts
  3. tracks balances where receipt amounts are credited

For Web Monetization, website visitors submit receipts to the website in monetizationprogress events. The website backend can send receipts to the Receipt Verifier to credit the balance for the particular Monetization ID and can subsequently spend against the Monetization ID balance as desired to confirm the payment.


npm install
sudo docker run -p 6379:6379 -d redis
SPSP_ENDPOINT=https://receiver-endpoint.com npm start

Environment Variables


  • Type: String
  • Description: Base64-encoded secret value used to generate receipt secret keys.
  • Default: random seed


  • Type: Number
  • Description: The number of seconds since a stream's start time to consider a receipt valid.
  • Default: 300


  • Type: String
  • Description: The URI at which to connect to Redis. Use mock for in-memory Redis (NOT RECOMMENDED for production)
  • Default: redis://


  • Type: String
  • Description: The receiver's SPSP endpoint to which SPSP queries are proxied.


  • Type: Number
  • Description: The port that SPSP proxy will listen on.
  • Default: 3001


  • Type: Number
  • Description: The port that Receipt Verifier API will listen on.
  • Default: 3000

API Documentation

POST /balances/{ID}:creditReceipt

Verifies receipt and credits the receipt value to the specified balance

Request Body:
  • Type: String
  • Description: base64-encoded STREAM receipt
Return Value:
  • Type: String
  • Description: updated balance for ID

POST /balances/{ID}:spend

Debits an amount from the specified balance if the balance is sufficient

Request Body:
  • Type: String
  • Description: amount to debit the balance
Return Value:
  • Type: String
  • Description: updated balance for ID