Telegram bots, Mini Apps, web shops and links
Get paid in USDC,wherever you already sell.
In a chat, a Mini App, a web shop or a plain link, Plinth charges every order automatically, in USDC, on the network your customer already uses. The money lands in a vault only you can open.
- USDC on the network your buyer uses
- No gas for your customer
- Money goes to your own vault
Northwind Mini App
Mini App
Order #1042
2 items, delivery included.
25.00 USDC
Payment received
25.00 USDC on Base
Order confirmed.
We are packing it now.
Receipt sent
Pay with USDC
Non-custodial25.00
Pay on
An illustration. Names and amounts are placeholders.
0.20%
per payment, taken by the contract
Taken inside the settlement transaction; the contract refuses any fee above 1%. Today the relayer pays the network fee and records it. Pricing
?
Mini App users
No audited figure is public. Numbers quoted online range from about 150 million to 500 million, and none comes from a primary source, so we do not quote one.
Figures are as of the dates given. Telegram is a trademark of its owner. Plinth is independent and is not affiliated with or endorsed by Telegram.
Our thesis
Telegram has its own payment rails. The sellers we are building for want something different: dollars, on the network their customers already use, with the money in their own hands. Plinth is the layer that makes that automatic.
Telegram audience
- Mini Apps
- Shops
- Resellers
- Creators
Plinth gateway
automatic, per order
USDC
into the seller's own vault
Telegram is where we start, and it is full of very different sellers. They share one problem: getting paid, automatically, without handing over control of the money. The same gateway works anywhere you can show a button or send a link.
Mini Apps
Games, tools and stores that already have users and need a clean way to charge them. Open the checkout from the app and unlock the order when it is paid.
Independent shops
Sellers of goods and services who take orders in chat today and chase screenshots afterwards. Every order is charged at its real total and confirmed on its own.
Resellers
People who buy and resell, often across borders. Dollars on the network the buyer already uses, with the money in the reseller's own vault.
Creators and communities
Paid access, tips and one-off sales for people with an audience, from a single link or built into their own tools.
- 1
Your app asks for the payment
At checkout, your Mini App, bot or shop asks Plinth for a payment at the order total and shows a Pay button. Nothing is set up per product, and no links are made by hand.
Order #1042
2 items, delivery included.
Pay 25 USDC - 2
They pay in USDC
The customer chooses a network and pays with their wallet, or sends USDC to a one-time address. No account, no card.
25.00 USDC, on the network they already use
BaseArbitrumOP MainnetPolygonEthereumArc - 3
We check it on the chain
Status never comes from a click or a screenshot. Plinth reads the chain and waits until the network says the payment is final.
- The transfer is on the chain
- The token is the network's official USDC
- The amount covers the price
- The network says it is final
- 4
You are told, and your bot acts
The money is already in your vault. A signed message tells your server to ship the order, unlock access or reply.
Payment receivedOrder confirmed. We are packing it.Sent by your app, triggered by a signed message from Plinth.
Take payments inside your Mini App, bot or shop.
When someone checks out, your app asks Plinth for a payment at the order total and shows a Pay button. Nothing to set up per product, and no links to make by hand. Your AI assistant can add it to the project you already run.
Order #1042
Your app, a moment later
Order confirmed.
Or paste a link. One price, no code.
For one service, one course or a single sale. Make a link in the dashboard and drop it into a message. Nothing to install.
Payment link
25.00 USDC
plinth.zerolayer.online/l/…
Issues USDC and EURC, the only two assets Plinth counts. Each address comes from Circle's published list.
Circle's own blockchain, and where Plinth is live on mainnet. USDC pays the network fee, and a payment is final after one confirmation.
Sign in with Google, email or a wallet. No password to keep.
Logos belong to their owners and show what Plinth is built on, not a partnership or an endorsement.
Each invoice address is computed from five inputs. Your customer can be shown it immediately. The contract behind it is created only when money arrives, and it exists to sweep to your vault.
How the address is derived
- merchant
- invoice
- USDC contract
- your vault
- chain
- 01
Invoice created
The address is computed. Nothing is deployed.
No gas spent
- 02
Customer pays
USDC lands on an address that has no code yet.
No gas spent by you or us
- 03
Contract appears and sweeps
One transaction creates the contract and moves the funds to your vault.
Relayer pays the fee
- Withdraw from your vaultYou canPlinth cannotThe payer cannot
- Change where funds are forwardedActivates after a delay you can watchYou canPlinth cannotThe payer cannot
- Send a sweep anywhere but your vaultThe function takes no argumentsYou cannotPlinth cannotThe payer cannot
- Create payments and read their statusWith your API keyYou canPlinth cannotThe payer cannot
- Pay an invoiceYou cannotPlinth cannotThe payer can
The owner is your wallet
The vault has one authority. There is no operator, admin or upgrade role.
Payout rules wait, in the open
Forwarding changes activate after a delay you can watch. Going back to keep-in-vault is instant.
Every claim is checkable
Each one maps to a contract call or an event you can read on a block explorer.
- MetaMaskConnected
- Coinbase Wallet
- WalletConnect
value 25.00 USDC to router
One signature. You pay no network fee.
One signature, no gas for the customer.
- Customer needs
- A browser or mobile wallet holding USDC
- Network fee
- None for them where the network's USDC supports signed authorisations. The relayer pays.
- How it works
- They sign one typed message to our router and we relay it on-chain.
- When it is not offered
- If the network or wallet cannot do it, the checkout says so and offers the address instead.
Every payment shows its settling sequence and the network it ran on. The demo is read-only and uses sample data, so you can look around without an account.
Payments
ArcReceived
465.00
Settled to vault
325.00
In flight
140.00
| Reference | Network | Status | Progress | USDC |
|---|---|---|---|---|
| order-1046 | Settled | 25.00 | ||
| order-1045 | Confirming | 120.00 | ||
| order-1044 | Awaiting payment | 8.50 | ||
| order-1043 | Settled | 300.00 | ||
| order-1042 | Underpaid | 42.00 |
Sample data. Nothing in this window is a real payment.
USDC, the only asset Plinth counts
Live on Arc. 23 more networks with native USDC are coming soon, each opening after its own on-chain check.
Each network's USDC address comes from Circle's published list and is probed on-chain before the network can be enabled. A look-alike token is recorded and ignored, never credited.
Read the network registryArc
chain 5042
- USDC contract
- 0x3600…0000
- Final after
- 1 confirmation
- Network fees in
- USDC
- Relayer
- active
- Checkout
- wallet and address
Every network where Circle issues USDC natively is on the list.
See each networkWallets the checkout can connect to for one-signature payments.
Marks belong to their owners and show compatibility, not partnership.
- Exact amounts
- Decimal strings with integer twins. No floats.
- Idempotent
- Retry a request with the same key and get the same payment.
- Signed webhooks
- HMAC-SHA256, 5 minute window, 8 retries over about 10 hours.
- Truthful status
- Derived from verified on-chain facts, never from a redirect.
curl -X POST $PLINTH_API/v1/payment-intents \
-H "Authorization: Bearer sk_test_…" \
-H "Idempotency-Key: ORDER_ID" \
-H "Content-Type: application/json" \
-d '{ "amount": "25.00", "order_reference": "ORDER_ID" }'
# → { "status": "AWAITING_PAYMENT", "checkout_url": "…" }Events you can subscribe to
Describe what you want in plain English. The assistant works inside the project you already have, with the real order total, and tells you whether the four checks passed.
A hosted MCP server
One URL and your key in a header, nothing to install. 29 tools for payments, links, invoices, refunds, webhooks and reports, plus the integration playbook.
Docs written for agents
/llms.txt and /llms-full.txt, generated from the same playbook the MCP server serves, and an OpenAPI 3.1 document.
A prompt per project
One for a store, a SaaS, a bot or bookings. Each ends with the four checks the agent must pass.
Safe by design
Idempotency keys and signed webhooks make a repeated call harmless. No tool changes where money goes: payout wallets, vaults, keys and the team need you, signed in.
claude mcp add --transport http plinth https://plinth-api.onrender.com/mcp --header "Authorization: Bearer sk_test_…"
I will read the playbook, create a test payment and check the result.
get_integration_playbook()
list_networks()
create_payment({ amount: "25.00" })
get_payment("AWAITING_PAYMENT")
- A real total is charged
- Paid only from the webhook
- A forged webhook is rejected
- A replayed one is ignored
An illustration of a session. Tool names are the MCP server's own.
Any assistant that can use an MCP server or read /llms.txt.
Marks belong to their owners and show compatibility, not partnership.
Claude Code
OpenAI Codex
Cursor
GitHub Copilot
Gemini CLI
- Windsurf
Cline
Devin
The checkout is a normal web page, so a Mini App can open it, and your server is told by a signed message when it is paid. It has not been tuned for Mini App themes yet, and there is no dedicated Mini App component today.
Telegram sets its own rules for what may be sold inside Mini Apps, especially digital goods on phone app stores. Check the current rules for your case. Plinth links also work in plain chat messages and in an ordinary browser.
Nobody in between. Each invoice has its own address, and funds are swept from it into a vault that only your wallet can withdraw from. Plinth runs the relayer that pays the network fee for the sweep, and that relayer cannot choose a destination or withdraw.
Not with Pay with wallet, where the network's token supports signed authorisations: they sign once and our relayer pays. With Send to address they pay the normal network fee for the transfer themselves; on Arc that fee is paid in USDC.
When you receive the signed payment.confirmed webhook. It fires only after the transfer meets the network's finality rule, which differs per network. Never fulfil from a redirect or a client-side callback.
Each case has its own state and its own webhook: underpaid, overpaid and late payment. Nothing is silently rounded or guessed. Several transfers to the same invoice are added up.
Only the official token the payment was created in counts: USDC, or EURC on Arc. Anything else sent to the address is recorded as an invalid asset and is not credited.
Not yet audited, and live on Arc mainnet. The contracts have not been independently audited, so start with small amounts. Every other network opens only after its own on-chain check and an explicit approval.
0.20% of each payment, taken inside the settlement transaction, with a 1% cap fixed in the contract. The pricing page has the details.
A refund is a transfer you sign from the account that received the funds, your vault or your payout wallet. It is marked complete only when that transfer is verified on-chain. The fee is not refunded.
No. Plinth is independent and is not affiliated with or endorsed by Telegram. The Telegram name and mark belong to their owner and are used here only to say where it can be used.
Start in minutes.Test it for free.
Create an account, set up a vault and take your first payment in USDC on Arc mainnet. The contracts are not yet independently audited, so start small.