Documentation
How StayCrypto actually works, in as much detail as you need.
Everything from server requirements to what a buyer sees on the payment screen — written for someone setting this up for the first time, not just for developers.
Four steps from download to your first crypto payment.
Download the plugin
Free once it's live on WordPress.org — message us on Telegram if you want it before then.
Install and activate it
"Plugins → Add New → Upload," like any other WordPress plugin.
Enter your wallet addresses
WooCommerce → Settings → Payments → StayCrypto. One public address per network you want to accept — that's it, no private keys involved. Details on choosing and entering addresses safely are in the section below.
Done — crypto's at your checkout
Buyers see it as a regular payment method right next to card and bank transfer.
Crypto becomes a regular payment method at your checkout.
Built into the standard WooCommerce checkout
Crypto shows up in the payment-method list right next to card and bank transfer — no separate page and no redirects to a third-party site.
Direct wallet-to-wallet transfer, no fees
Crypto goes straight from the buyer's wallet to the seller's wallet, no middleman. The plugin doesn't take a cut of every transaction like other crypto-acceptance services, and doesn't store payment data on someone else's servers. The seller gets notified of the payment.
Payment status shows right on the order
A paid crypto order looks the same in the WooCommerce dashboard as any other — no manual reconciliation in a separate wallet.
Doesn't need a separate checkout or site
Sits on top of the store you already have — no need to set up extra infrastructure.
Translation-ready out of the box
Built to WordPress.org's internationalization standards, so the interface can be translated into any language through WordPress's own community translation system — same as any WordPress.org plugin.
One address per network, no private keys involved — but a few rules that actually matter.
One address usually covers three of the four networks
Ethereum, BNB Chain and Polygon are EVM-compatible networks, so a single wallet address — the kind a wallet like MetaMask generates — works identically across all three. TRON uses a different address format (it starts with the letter "T") and needs its own wallet.
You only need to fill in the networks you plan to accept
In WooCommerce → Settings → Payments → StayCrypto, there is a separate address field for each of the four networks. Leave a field blank and that network simply won't be offered to the buyer at checkout — there is no need to support all four from day one.
Use each address for StayCrypto payments only
StayCrypto identifies which order a payment belongs to by the transfer amount, not by who sent it — that's what lets one address serve every order without a separate address per customer. If the same address also receives unrelated transfers, a coincidentally similar amount could get matched to the wrong order. This rule applies equally to every network you enable.
Use a hardware wallet, never an exchange or hot wallet
There is no processor standing between the buyer and you, so the receiving wallet is the only thing protecting the money — if its private key is stolen, there is no middleman to fall back on. Use a hardware (cold) wallet, a physical device that keeps the private key offline. Never enter an exchange deposit address or a regular "hot" wallet connected to the internet: a single compromise there puts every future payment to the store at risk at once, not just one transaction.
Changing an address later
If an order is currently waiting on payment to the address you're about to change, StayCrypto warns you before the change is saved, and links to that address's payment history — so a customer who is already looking at a payment page isn't left stranded. The change itself is never blocked; the decision stays with you.
What actually happens between checkout and a paid order.
WooCommerce
Order is created, StayCrypto generates a unique payment amount for it.
StayCrypto
Watches the chain in the background — no customer wait, no redirect.
RPC providers
Reads several independent public providers per network — one going down doesn't stop payments.
Confirmations
Waits a few blocks before trusting a payment — see Security below.
Order paid
Closed the standard WooCommerce way — reports, hooks, and other plugins all see it normally.
How StayCrypto actually reads the blockchain.
What an RPC node is
StayCrypto doesn't run its own server to watch your wallet. Instead it asks a public RPC node — think of it as an information desk for a blockchain — "have any new payments arrived at this address?" It's a read-only question: the node has no ability to move funds, only to answer what's already on the public ledger.
Works out of the box, nothing to set up
A working public node is already selected for every supported network the moment you activate the plugin. Changing it is not required — this only matters later, if you want to point StayCrypto at a node of your own because you have a more reliable option, or the public ones start responding slowly.
Automatic failover between providers
Each network is backed by more than one independent public provider. If the primary node stops responding, StayCrypto automatically tries the next one on the list — payment detection doesn't stall because a single provider had downtime.
Why a payment can occasionally take a couple of extra minutes to register.
Two separate checks are actually running
While the buyer keeps the payment page open, that page itself checks for the payment every few seconds — this is what makes confirmed payments feel instant. If the buyer closes the tab before the payment is found, that live check stops along with it. A second, independent check exists specifically for that case.
The safety net: a scheduled recheck every couple of minutes
On a fixed schedule, all orders still awaiting payment get re-checked automatically, using WordPress's own built-in scheduling system, known as cron. This is what catches a payment even if the buyer never comes back to the payment page.
The catch: WordPress cron only runs when someone visits the site
WordPress has no true background process of its own — its schedule is only "nudged" forward by site traffic. On a quiet store with little traffic between visits, this safety-net check can end up running noticeably less often than every couple of minutes, rather than strictly on schedule.
For reliability, set up an external trigger
To make the safety net run on a fixed schedule regardless of traffic, point an external service at your site's scheduling address on a timer — a service like cron-job.org, or a real system cron your hosting provider sets up on request, both work. The address to trigger is:
your-site.com/wp-cron.php
A separate risk: cron can be disabled without you knowing
Some hosts and site-speed plugins turn off WP-Cron's automatic trigger entirely, using a setting called DISABLE_WP_CRON — sometimes without the store owner ever being told. If this happened and no external trigger was set up to replace it, the safety net stops working completely and silently, with no error message anywhere.
StayCrypto watches for this itself
If the background check hasn't run in a while and an order is still waiting on payment, a warning appears in the WordPress admin area, and a Telegram alert goes out too if notifications are configured. Treat this as a backup warning rather than the primary way to find out — if you're setting the store up, it's worth confirming the schedule is actually running before you rely on it.
Get pinged the moment a payment arrives, without checking the dashboard.
What the Telegram bot actually notifies you about
It sends a message to a chat you choose whenever a payment arrives and is credited to an order, or whenever a payment arrives but cannot be confidently matched to one. It's entirely optional — payment detection itself works the same with or without it.
Setting it up, step by step
- In Telegram, message @BotFather and send the /newbot command, then give the bot a name — it needs to be a brand-new bot, your own personal account won't work for this. BotFather replies with a token: a long string like 123456789:AA...
- Paste that token into the "Bot token" field on the StayCrypto status page in your WordPress admin, and save it.
- Open your new bot in Telegram and press "Start" (or send it any message) — otherwise Telegram won't let the plugin find out where to send notifications.
- Back on the status page, click "Detect automatically" next to the Chat ID field — it appears once the token is saved. This is not the bot's own ID; it's the ID of the specific chat notifications get sent to, filled in for you automatically.
Confirming it actually works, and keeping the token safe
A "Send test" button next to the fields checks that the token and Chat ID combination actually works — use it right after setup. Because the token gives full access to the bot, it's hidden as dots on the settings page once saved; to enter a different one, use the "Change" option.
Prices stay in your currency; buyers pay in stablecoins.
How a local-currency price becomes a stablecoin invoice
A product keeps its price in whatever currency the store already uses — say, an item priced at 466 KZT. At checkout, StayCrypto converts that into the equivalent amount in USDT or USDC (about $1 in that example) and that's what the buyer is invoiced for. The store's own pricing and reports never switch currency.
The exchange rate is fetched automatically and cached for a day
StayCrypto pulls the current rate from an external source once a day and reuses it for every order during that day, so two orders placed hours apart aren't invoiced at two different rates for no reason. Usually nothing here needs to be configured.
An optional rate adjustment
The payment method settings include an optional "Rate adjustment" percentage — a way to make the final rate slightly higher or lower than the one fetched automatically, for example to build in a small margin against rate movement during the payment window. It defaults to zero, meaning the rate is used exactly as fetched.
Protection against a bad rate reading
If a freshly fetched rate arrives with a sharp, implausible jump compared to the previous known value, StayCrypto doesn't trust it and doesn't apply it — a one-off glitch at the data source can't quietly miscalculate order amounts.
A manual fallback rate, as a last resort
The status page has a fallback-rate field you can fill in by hand — checking another site for the current rate, for instance. It's only used automatically if both the primary and backup automatic sources are unavailable at the same time. As long as either one is working normally, this field has no effect and can safely be left blank.
What a buyer actually sees after choosing crypto at checkout.
Choosing a network and coin
After selecting StayCrypto as the payment method, the buyer picks a network and coin on the next screen: USDT or USDC on Ethereum, BNB Chain and Polygon, or USDT only on TRON. Which networks are offered depends entirely on which ones the store owner filled in during setup.
A wallet address and an exact amount, down to the cent
The payment screen shows the receiving address and the exact amount to send, including a unique fraction of a cent at the end — that small unique "tail" is how StayCrypto later recognizes which specific order this payment belongs to, even though every order shares the same receiving address.
Two kinds of QR code
By default, the QR code encodes only the wallet address — the buyer still types in the exact amount themselves inside their wallet app, same as they would from any address. For Ethereum, BNB Chain and Polygon, a second QR option is available with the amount already encoded into it, turned on with a separate button rather than shown automatically — not every wallet app reads that richer format correctly, so the most compatible option is the default, with the more convenient one available on request. TRON has no equivalent amount-embedded QR standard, so it's always address-only there.
The page updates itself — no refreshing needed
Once the payment screen is showing, it quietly checks in the background every few seconds for the payment to arrive. As soon as it's found, the buyer is taken automatically to the order-confirmation page — there's nothing for them to click or refresh.
The payment window, and what happens if it runs out
The buyer has about 10 minutes to send the payment, plus a short additional window for the network's own confirmation time. If nothing arrives before that expires, the buyer sees a plain explanation with an option to return to the store, and the order is cancelled automatically — nothing is left in a stuck or ambiguous state.
The parts of the design that exist specifically to protect the payment.
Non-custodial by architecture
StayCrypto only ever reads the public blockchain (read-only RPC queries). It never holds a private key and never has access to the funds — payment goes straight from the buyer's wallet to yours.
A unique amount per order
The receiving address is the same for every order, but each one gets its own payment amount down to the smallest unit — that's what ties an incoming payment to a specific order without needing a separate address per customer.
Waits for network confirmations
A payment is only trusted once enough new blocks have been added on top of it — 12 on Ethereum, 15 on BNB Chain, 20 on TRON, 30 on Polygon — as protection against a rare chain reorganization undoing it. In practice this adds no more than a minute or two (around 60–75 seconds on Polygon), and comfortably fits inside the payment window shown to the buyer.
Multiple independent RPC providers
Each network is read through several separate public providers, so a single provider's downtime doesn't stall payment detection.
Sensitive data masked in logs
Wallet addresses, customer emails, and any private RPC URL you add yourself are partially masked before they're written to the WooCommerce log — so a log shared with support doesn't leak more than it needs to.
Exact match closes the order by itself. Anything unclear waits for you.
There are three possible outcomes once a payment lands in the wallet, and each one is handled differently — worth knowing before your first real test payment.
The amount matches exactly — the order closes on its own
If the amount received matches exactly what was expected, the order is marked paid automatically. No action is needed from you, and no confirmation step gets in the buyer's way.
The amount is close but doesn't match exactly
A common cause is a wallet or exchange rounding the transfer, or taking a network fee out of it before it arrives. When this happens, a "StayCrypto: unmatched payment" box appears directly on that order's page in WooCommerce, showing the expected amount, the amount actually received, a link to the transaction on the blockchain, and two buttons: confirm the payment manually, or reject it. Nothing gets credited automatically here — the decision is always yours.
The payment arrived but isn't linked to any order at all
These payments show up on a separate "Unassigned payments" page — a view-only list (there's nothing to "credit" here, since there's no order to credit it to) that exists so money already sitting in the wallet doesn't get forgotten. Once you've sorted out where it belongs — for example, by contacting the buyer and creating an order the usual way — the entry can be cleared from the list with a "Mark resolved" button.
How to tell, at a glance, exactly what happened with a given order.
What status an order moves to after payment
Until payment is found, the order sits in "Pending payment." Once StayCrypto finds and credits the payment, WooCommerce itself decides the final status by its own usual rules — "Processing" if the order contains a physical item that needs shipping, or "Completed" if everything in it is digital. If payment never arrives within the allotted time, the order moves automatically to "Cancelled," with a note explaining why.
A diagnostics panel right on the order page
Every StayCrypto order gets a small panel in the WooCommerce order screen showing exactly when the order was created, exactly when payment was received, and how much time passed between the two — plus a direct link to view the actual transaction on the relevant blockchain explorer. This is the fastest way to confirm a test payment really went through, without digging through logs.
Need something the base plugin doesn't cover? That's a paid add-on, not a plugin feature.
Guaranteed translation
The interface is translation-ready by default, but if your language isn't covered yet by WordPress's community translators, we do a professional translation for you right away, instead of waiting on the community queue.
Custom-branded invoices
A payment page and invoice designed to match your store's branding, instead of the default layout.
Additional blockchain networks
Need a network beyond Ethereum, BNB Chain, Polygon, or TRON? We add support for the chain your business actually uses.
Custom plugin development
Need something else entirely? We design and build custom functionality around your specific setup.
Common situations and what they mean.
The payment method doesn't show up at checkout
Check that WooCommerce is active and that StayCrypto is enabled under WooCommerce → Settings → Payments. If your host has the bcmath or mbstring PHP extension disabled, StayCrypto shows an admin notice naming the missing one instead of registering the payment method.
A payment didn't close the order automatically
The amount received didn't exactly match what was requested — a common cause is a wallet or exchange rounding the transfer, or taking a network fee out of it. It's not lost: check StayCrypto → Unassigned Payments to review and confirm it manually.
I need to change my wallet address
If there's an order currently waiting on payment to the address you're about to change, StayCrypto warns you first — so you don't move the address out from under a customer who's already looking at the payment page.
A payment is taking longer to confirm than I expected
That's normal on some networks — StayCrypto waits for a small number of network confirmations before trusting a payment (see Security above), which usually takes anywhere from a few seconds to about a minute depending on the network.
A USDC payment on Polygon shows up labeled "USDC.e" — is that a problem?
No — it's expected. Two different USDC tokens circulate on Polygon at the same time, and most wallets label both of them simply "USDC," even though they're technically different: the regular, native one issued directly by Circle, and an older "bridged" version that moved over from Ethereum before the native one existed. To a buyer, they look identical. StayCrypto recognizes and accepts both the same way, and the order note or the unassigned-payments list will simply say "USDC.e" specifically so you know which variant you received. Worth knowing: your own wallet may also display the two separately rather than combining them into one USDC balance — if a payment is credited on the order but you don't see it in your main balance right away, check the full asset list, not just the USDC total.
Can StayCrypto accept coins besides USDT and USDC?
No. StayCrypto only works with stablecoins — coins pegged to the US dollar. Native network coins such as BNB, MATIC, ETH or TRX are not supported, and there are no plans to add them.
Can the same wallet address be used for more than one store?
It's not recommended. StayCrypto identifies which order a payment belongs to purely by its amount — if the same address is also receiving payments for another store, or for anything unrelated, the risk of two payments accidentally matching the same order amount goes up.
What happens to StayCrypto's data if the plugin is deleted?
By default, almost nothing important is removed — only temporary technical lock flags. Settings, wallet addresses, the exchange rate, and order payment history are all kept, so accidentally deleting the plugin (say, to reinstall a fresh copy) doesn't wipe anything out. A full cleanup of that data only happens if the "Delete all StayCrypto data on plugin removal" checkbox was deliberately turned on beforehand in the payment method settings — if you're not sure, leave it off.