01Where this stands
02Two ways for customers to pay
Use either, or both. They differ in what the customer sees and in whether an unpaid order exists in Shopify.
| Manual payment method | Theme button | |
|---|---|---|
| Customer sees | Shopify's normal checkout (address, shipping, discounts, tax) with a payment method you name, such as "Pay with crypto". After ordering they get a link to the pay page | A "Pay with crypto" button on your cart page that goes straight to the pay page |
| Order in Shopify | Created immediately, as payment pending | Only after the payment is confirmed. Until then it is an unused draft order |
| Unpaid orders | Yes, until paid or expired | No |
| Shipping, discount codes, address-based tax | All of Shopify's | None. Digital goods, services and all-inclusive prices only |
Pick the manual payment method for physical goods or anything with shipping and discount codes. Pick the button for a simple, all-inclusive digital product.
03Two ways to connect your store
- The Payaries Shopify app. You install it from a custom-distribution link. Custom distribution needs no Shopify review, and the Partner account it requires belongs to whoever runs the connector, not to you.
- A custom-app token, no Partner account at all. In your own store admin go to *Settings, Apps and sales channels, Develop apps* and create an app. Grant
read_ordersandwrite_orders(andread_draft_ordersandwrite_draft_ordersif you use the button), install it, then paste its Admin API token and API secret key into the connector's connect page together with your Payaries API key, API secret and webhook secret.
On the token route the connector checks that the token really belongs to the store you named, and that Payaries accepts your key, before it saves anything. A token-connected store has no order-confirmation page extension, so customers get their pay link by email, in your payment method's instructions, and on a "find my payment" page that asks for the order number and the email on the order.
04What you set up in Payaries
- 01Submit your business profile, create an API key and create a webhook secret.
- 02Set your webhook URL to the address the connector gives you for your store.
- 03Add the connector's host to your redirect domains (Settings, Invoices) so customers are sent back to your store after paying. Without it they simply stay on the pay page; the order is still marked paid.
- 04Choose one coin and chain for the store in the connector's settings, then save and run its connection test.
- 05Keep your invoice lifetime long enough to pay. When an invoice expires unpaid, the connector cancels the Shopify order (or deletes the draft) and restocks.
- 06For the manual method, add a payment method whose name contains the text you configure (default
crypto). For the button, add the connector's snippet to your cart template and enable it in settings.
05How an order is paid
- 01The customer chooses crypto. With the manual method Shopify creates the order as payment pending; with the button the connector creates a draft order so Shopify prices the cart.
- 02The connector creates one Payaries invoice for Shopify's total, in your store currency, and sends the customer to the hosted pay page.
- 03The customer pays on-chain. Payaries sends a signed webhook to the connector.
- 04At
confirmed, when the money is on-chain with the required confirmations and credited to you, the connector marks the order paid and tags itpayaries-paid. For the button it completes the draft into a paid order. - 05The customer is returned to your store. The connector does not trust that return: it asks Payaries what the invoice is now, and acts on that.
The order is marked paid at confirmed, not at the later settled sweep, which can lag. Prices never come from the browser: Shopify builds the total and the invoice is for Shopify's number.
07What the connector will not do
- Mark an order paid on a claim. Only a signature-verified Payaries webhook, or the connector reading the invoice from Payaries itself, can do that. A forged return URL changes nothing. This is the same rule as in verifying webhooks.
- Create two invoices for one order. Payaries dedupes on the order reference, so a webhook, a retry and a customer refresh can race safely.
- Keep customer personal data. The email is used once, to send the pay link, and isn't stored. It keeps the order number, amount, payment state and the order-status link.
08Limits
- One coin and chain per store. The customer can't choose.
- Priced in your store currency, not the customer's presentment currency.
- The theme button has no shipping, discount codes or address-based tax. Use the manual payment method if you need them.
- Refunds are manual. A Shopify refund doesn't move crypto. Withdraw from Payaries, then refund in Shopify by hand.
- It is early access. Run a test order that you pay, and another that you let expire, before real customers.
Questions
- Do I need Shopify Payments-partner approval to accept crypto this way?
- No. Customers pay on Payaries's hosted page rather than inside Shopify's payment step, and the connector marks the Shopify order paid when the payment confirms. Connecting with a custom-app token from your own store admin needs no Partner account either.
- When is my Shopify order marked as paid?
- When Payaries reports the invoice as confirmed, meaning the payment is on-chain with the required confirmations and credited to you, learned from a signed webhook or by the connector reading the invoice. The customer returning to your store is never what marks it paid.
- Can customers use shipping rates and discount codes?
- With the manual payment method, yes: it is Shopify's normal checkout. The cart-page button builds the order from items only, so it supports no shipping, discount codes or address-based tax.
- How do I refund a crypto order on Shopify?
- By hand. A Shopify refund doesn't move crypto, so withdraw the amount from Payaries to the customer and then record the refund in Shopify.
- Is the Shopify connector production-ready?
- It is in early access. It has been tested against simulated Shopify and Payaries responses but not yet against a live store, so pilot it on a development store with a small payment first.
Keep reading
- Hosted crypto checkout: send the customer, get them backUse Payaries's hosted payment page without building a checkout: create an invoice with a success and cancel URL, redirect the customer, verify the signed return and fulfil from the webhook.
- How to verify crypto payment webhook signaturesVerify a crypto payment webhook's HMAC-SHA256 signature against the raw body, guard against replays, dedupe retries and acknowledge fast — with working Node.js code.
- Handling underpaid, late and unmatched crypto paymentsWhat to do when a customer underpays, pays after an invoice expires or sends money that matches no invoice — and how to build order logic for each.
- Crypto payment API quickstart: from signup to your first payoutTake your first crypto payment through the Payaries API: create a key, submit the business profile, create an invoice, handle the webhook and withdraw. Real requests and responses.