If you sell anything digital inside Telegram (a premium feature, credits, a level pack), you sell it for Telegram Stars. Telegram requires Stars for digital goods in bots and Mini Apps, and the currency code is XTR .
The happy path takes about ten lines. Everything around it is what keeps your ledger right: double deliveries, a second charge, refunds you didn't start, a client that says "paid" when nothing was charged. Our small team runs a Telegram Mini App that takes Stars every day, and this is the flow we ended up with. The examples use plain fetch against the Bot API so they translate to any language.
const API = `https://api.telegram.org/bot${process.env.BOT_TOKEN}` ;
async function tg ( method , body ) { const res = await fetch ( `${API}/${method}` , { method : "POST" , headers : { "Content-Type" : "application/json" } , body : JSON . stringify ( body ) , } ) ; const json = await res . json ( ) ; if ( ! json . ok ) throw new Error ( `${method}: ${json.description}` ) ; return json .…