Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Accept Streaming Payments

Charge for time-based services with per-second metering.


For streaming connections, long-running tasks, or any service where cost scales with time, use per-second metering. The server accumulates usage continuously and settles the total at each interval.

Server setup

import { AMP } from "@valeo/amp-server"
 
const amp = new AMP({
  wallet: serverKeypair,
  connection,
  pricing: {
    mode: "per-second",
    rate: "1000",  // $0.001 per second
    token: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    minDeposit: "5000000",
    settleInterval: 3600,
  },
})
 
app.get("/v1/stream", amp.middleware(), (req, res) => {
  res.setHeader("Content-Type", "text/event-stream")
  res.setHeader("Connection", "keep-alive")
 
  const interval = setInterval(() => {
    res.write(`data: ${JSON.stringify({ tick: Date.now() })}\n\n`)
  }, 1000)
 
  req.on("close", () => clearInterval(interval))
})

Metering modes

ModeUnitUse case
per-callFixed per requestStandard APIs
per-secondPer second of connectionStreaming, WebSocket
per-bytePer byte transferredData-heavy endpoints
per-computePer compute unitVariable-cost operations

Per-byte example

const amp = new AMP({
  // ...
  pricing: {
    mode: "per-byte",
    rate: "1",  // $0.000001 per byte
    token: "...",
    minDeposit: "1000000",
    settleInterval: 3600,
  },
})

Next steps