> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shoply.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment methods

> How buyers pay you: cards, PayPal, crypto, skins and vouchers, through accounts of your own

Buyers pay **you**, through an account of your own with a payment provider. You connect it under **Payment Methods**, and Shoply's checkout takes the payment with it. Each provider below has a page of its own that says where its keys are, step by step: press its name, or find it under **Set up a payment method** in the sidebar.

| Method | Provider | Can a payment be sent back |
| - | - | - |
| Cards, Apple Pay, Google Pay | [Stripe](/guides/setup/stripe.md) | Yes |
| Cards | [Authorize.net](/guides/setup/authorizenet.md) | Yes |
| Cards | [NMI](/guides/setup/nmi.md), or a provider that resells it | Yes |
| Cards, iDEAL, Bancontact, Klarna and more | [Mollie](/guides/setup/mollie.md) | Yes |
| Cards, Apple Pay, Google Pay | [SumUp](/guides/setup/sumup.md) | Yes |
| Cards, Apple Pay, Google Pay | [Square](/guides/setup/square.md) | Yes |
| Cards, Revolut Pay, Apple Pay, Google Pay | [Revolut Business](/guides/setup/revolut.md) | Yes |
| Cards, PayPal, Apple Pay, Google Pay | [Lemon Squeezy](/guides/setup/lemonsqueezy.md), as the seller of record | Yes |
| Cards | [Amazon Payment Services](/guides/setup/amazonpaymentservices.md) | Yes |
| Cards, Skrill wallets and local methods | [Skrill](/guides/setup/skrill.md) | No. A refund is store credit, or yours to make in Skrill. |
| Cards, wallets and local methods | [Pandabase](/guides/setup/pandabase.md), as the seller of record | Yes |
| Cards, Shop Pay and wallets | [Shopify](/guides/setup/shopify.md), through your own store | Yes |
| Cards | [Tagada](/guides/setup/tagada.md), through the processors you connect there | Yes |
| Cards and the methods of your merchant account | [Adyen](/guides/setup/adyen.md) | Yes |
| Cards, Pix, boleto and Mercado Pago balances | [Mercado Pago](/guides/setup/mercadopago.md) | Yes |
| Cards, Bizum, PayPal, Apple Pay, Google Pay and more | [MONEI](/guides/setup/monei.md) | Yes |
| Cards, wallets and local methods | [Whop](/guides/setup/whop.md) | Yes |
| PayPal | [PayPal](/guides/setup/paypal.md) | Yes |
| Crypto | [NOWPayments](/guides/setup/nowpayments.md), [Cryptomus](/guides/setup/cryptomus.md), [Heleket](/guides/setup/heleket.md), [OxaPay](/guides/setup/oxapay.md) | No. A refund is store credit. |
| CS2 and Rust skins | [Skinloop](/guides/setup/skinloop.md) | No. A refund is store credit. |
| Rewarble vouchers | [Rewarble](/guides/setup/rewarble.md) | No. A refund is store credit. |

A store can connect several, switch each on and off without losing its keys, and sort them: the first is the one most buyers take. The ones you have connected are rows at the top of **Payment Methods**, in the checkout's order: drag a row by its grip, or press the up and down arrow keys on the grip, to move it. Each row says where the method stands at checkout and what buyers see it called, with a pencil to rename it. Your [custom payment methods](/guides/custom-payment-methods.md) are rows of the same list, marked **Custom**, and go anywhere in it: above your connected ones too. The ones you could add are under **Add a Payment Method**, where you can search by name or by what a method takes, such as cards or crypto. Several of one kind too: Stripe, Authorize.net, NMI, Mollie, SumUp, Square, Revolut Business, Lemon Squeezy, Amazon Payment Services, Skrill, Pandabase, Shopify, Tagada, Adyen, Mercado Pago, MONEI and Whop can all be connected, and each is a row of its own at the checkout, as each crypto provider is. A buyer who starts with one can go on with another, and whichever the money arrives through completes the order. Each provider is connected once: one Stripe account a store, not two.

## NMI

NMI is a payment gateway, sold under its own name and by many providers under theirs. Connect the one you have with what its **Security Keys** page gives you:

| Box | What goes in it |
| - | - |
| Public Security Key | A public key with the Tokenization permission, and Checkout as well if you use 3D Secure or Kount. |
| Private Security Key | A private key with the API and Query permissions. |
| Gateway Address | The address your provider gave you for the gateway, if it is not NMI's own. Leave it empty otherwise. Only an address of an NMI gateway is accepted. |
| Webhook Signing Key | Optional. Copy the **Callback URL** the dialog shows into your gateway's **Webhooks** page, pick the transaction events, and paste the signing key that page shows. |

**Test Connection** asks the gateway whether it knows the private key. The public key can only be tried by a browser, so the first card window is its test.

At the checkout the buyer presses Pay and the gateway's own card window opens over the page. The card is typed there and never reaches Shoply. Approved, the order completes on the same page and is delivered.

Under the keys are the gateway's switches:

| Switch | What it does |
| - | - |
| Require Billing Information | Asks card buyers for their name and billing address, and sends it with the charge. |
| Check Cards With 3D Secure | The buyer's bank confirms the card is theirs before it is charged. Most buyers see nothing; some are asked for a code by their bank. A card its bank disowns is never charged. |
| Take Verified Cards Only | Also turns away a card the bank could not verify. Safer, but a bank without 3D Secure is turned away too. |
| Decline a Street Address That Doesn't Match | The card is turned away when the bank says the street does not match. |
| Decline a Postal Code That Doesn't Match | The same for the postal code. |
| Decline When the Bank Can't Check the Address | Turns away a card whose bank gave no answer about the address. Many banks outside the United States give none. |
| Decline a Security Code That Doesn't Match | The card is turned away when the bank says the code on its back is wrong. |
| Screen Payments With Kount | For a gateway account that has Kount: each payment is scored before it is charged. |
| Keep Cards for Subscriptions | For a gateway account with Customer Vault on: a subscription's card is kept there, and each renewal is charged to it on its day. See [Subscriptions](/guides/subscriptions.md#charged-automatically). |

A switch that needs another switches it on with it: checking an address needs one asked for. A card one of these turns away is never charged, the buyer is told which detail did not match, and the order's history says so.

* **Refund Order** in the dashboard sends the payment back through the gateway.
* With the webhook set up, a payment you void in your gateway refunds the order here too.
* A chargeback does not show on the order: the gateway reports one in a way Shoply cannot confirm with it.
* An account you have switched to the gateway's **test mode** approves every card and charges nothing, and Shoply cannot tell. Switch it back before you sell.

## Mollie

Connect your Mollie account with one thing: an **API Key**, from **Developers**, **API keys** in your Mollie dashboard. A key that begins `live_` takes real payments. One that begins `test_` completes and delivers orders with no money moving, and the order says so.

Saving asks Mollie about the key and refuses one it does not know. It also refuses a profile with no payment method switched on, since no buyer could pay through it: switch at least one on in Mollie first. **Test Connection** says how many are on.

At the checkout the buyer presses Pay and Mollie's own page opens in a new tab, for exactly the order's total, with the methods your profile offers in that currency. When they have paid, the order completes on the page they left open and is delivered. There is nothing to set up in Mollie for this: each payment tells Mollie where to report.

* Which methods a buyer sees is decided in Mollie, under **Settings**, **Payment methods**. A method that does not take the order's currency is not offered: iDEAL takes euros only.
* A payment that is not finished in time runs out. The checkout says so and Pay starts a new one.
* **Refund Order** in the dashboard sends the payment back through Mollie. A refund you make in Mollie refunds the order here too, and a partial one is noted on it.
* A chargeback makes the order a chargeback.

## SumUp

Connect your SumUp account with two things:

| Box | What goes in it |
| - | - |
| API Key | A secret key, which begins `sup_sk_`. You make one under **API keys** in your SumUp settings. |
| Merchant Code | The code of your SumUp account, shown on your SumUp profile. |

Saving asks SumUp for that account with that key. A key SumUp does not know is refused, and so is a merchant code the key is not for. SumUp's answer also says whether the account is a sandbox one and which currency it charges in, and **Test Connection** tells you both.

At the checkout the buyer presses Pay and SumUp's own page opens in a new tab, for exactly the order's total. It takes cards, Apple Pay and Google Pay. When they have paid, the order completes on the page they left open and is delivered. There is nothing to set up in SumUp for this: each payment tells SumUp where to report.

* A SumUp account charges in **one currency**. An order priced in another is charged in your account's, at the day's rate, and the buyer sees that figure before they pay.
* SumUp's page takes a payment for 30 minutes. After that the checkout says it ran out, and Pay starts a new one.
* A sandbox account completes and delivers orders with no money moving, and the order says so.
* **Refund Order** in the dashboard sends the payment back through SumUp.
* A refund or a chargeback made in SumUp itself does not reach the order when it happens: SumUp reports only that a payment was made. Refund order asks SumUp first, so money that already went back there is never sent twice.

## Square

Connect your Square account with an access token, and if you like, which of your locations takes the money:

| Box | What goes in it |
| - | - |
| Access Token | Your app's access token, from **Credentials** in your app in the Square Developer Console. Make an app there if you have none. |
| Location ID | Which location takes the money, from **Locations** in your application in the Square Developer Console. Left empty, your main location. |
| Webhook Signature Key | Optional, below. |

Saving asks Square for that location with the token. A token Square does not know is refused, and so is a location the token has none of, one that is not active, and one that cannot take card payments yet. Square's answer also says whether the token is a sandbox one and which currency the location charges in, and **Test Connection** tells you both.

At the checkout the buyer presses Pay and Square's own page opens in a new tab, for exactly the order's total, with their email already filled in. It takes cards, Apple Pay and Google Pay, and Cash App Pay and Afterpay where your account offers them. It asks for no tip, no coupon and no shipping address. When they have paid, the order completes on the page they left open and is delivered.

For payments to be confirmed sooner, add the **Callback URL** Shoply shows you as a webhook subscription in your app in the Square Developer Console, for `payment.created` and `payment.updated`, and paste its signature key into **Webhook Signature Key**. Without it every payment is still followed, a little later.

* A Square location charges in **one currency**. An order priced in another is charged in your location's, at the day's rate, and the buyer sees that figure before they pay.
* Square's page takes a payment for as long as the order waits to be paid: the time under **Unpaid Orders**, below.
* A sandbox token completes and delivers orders with no money moving, and the order says so.
* **Refund Order** in the dashboard sends the payment back through Square. A refund you make in Square reaches the order by the webhook, and a partial one is noted on it. Refund Order asks Square first, so money that already went back is never sent twice.
* A dispute opened at Square does not reach the order. Answer it in Square.

## Revolut Business

Connect your Revolut Business account with one thing: the **Secret Key** under **Merchant API** in your Revolut Business settings (APIs). The public key beside it is not the one.

Saving asks Revolut about the key, says whether it is a live one or a sandbox one, and sets up the webhook that tells Shoply about your payments and disputes. You paste nothing into Revolut for it. Revolut keeps at most ten webhooks an account: if yours already has ten, remove one you no longer use and save again.

At the checkout the buyer presses Pay and Revolut's own page opens in a new tab, for exactly the order's total, with their email already filled in. It takes cards, Revolut Pay, and Apple Pay and Google Pay where the buyer's device has them. When they have paid, the order completes on the page they left open and is delivered.

* Revolut takes 27 currencies, US dollars, euros and pounds among them. An order priced in another is charged in one of those, at the day's rate, and the buyer sees that figure before they pay.
* Revolut's page takes a payment for as long as the order waits to be paid: the time under **Unpaid Orders**, below.
* **Refund Order** in the dashboard sends the payment back through Revolut. A refund you make in Revolut reaches the order the next time Shoply asks about it, which Refund Order does first, so money that already went back is never sent twice.
* A dispute shows on the order, and a lost one makes it a chargeback.
* A sandbox key completes and delivers orders with no money moving, and the order says so.

## Lemon Squeezy

Lemon Squeezy is the seller of record: it sells to the buyer itself, handles sales tax and VAT for you, and pays you out. It sells only products of your Lemon Squeezy store, so first make one product there for your Shoply orders, with a one-time price of any amount, and publish it. Each order is sold as that product, at the order's own total and under the order's name.

| Box | Where it is in Lemon Squeezy |
| - | - |
| API Key | **Settings**, **API**. Make a key there; a key made in test mode is a test key. |
| Product ID | The ID Lemon Squeezy gives the product. A number that is not a product of your store is refused when you save. |
| Store ID | Only if the key can see more than one store: the number under **Settings**, **Stores**. Left empty, your only store. |

Saving asks Lemon Squeezy about the three: a product that is not published, that belongs to another store, or that has only a subscription price is refused. It also says whether the key is a test one, and which currency your store charges in, and **Test Connection** tells you both. Saving sets up the webhook that tells Shoply about your payments too: you paste nothing into Lemon Squeezy for it.

At the checkout the buyer presses Pay and Lemon Squeezy's own page opens in a new tab, for the order's total, with their email already filled in and no discount box. Lemon Squeezy may add tax to what they pay. When they have paid, the order completes on the page they left open and is delivered.

* Your Lemon Squeezy store charges in **one currency**. An order priced in another is charged in your store's, at the day's rate, and the buyer sees that figure before they pay.
* Lemon Squeezy's page takes a payment for as long as the order waits to be paid: the time under **Unpaid Orders**, below.
* Lemon Squeezy's webhook is how a payment reaches the order, and it is tried for only a few minutes. If it never arrives, Shoply looks for the payment by the buyer's email a few minutes later, and completes the order when only one payment could be it. Otherwise mark the order paid yourself.
* **Refund Order** in the dashboard sends the payment back through Lemon Squeezy. A refund you make in Lemon Squeezy refunds the order here too, and a partial one is noted on it.
* A dispute at Lemon Squeezy does not reach the order. Answer it in Lemon Squeezy.
* A test key completes and delivers orders with no money moving, and the order says so.

## Amazon Payment Services

Connect your Amazon Payment Services account (once PayFort) with what its back office shows under **Integration Settings**, and the currency your account charges in:

| Box | Where it is |
| - | - |
| Merchant Identifier | **Integration Settings**, **Security Settings** in your Amazon Payment Services back office. |
| Access Code | The same page. |
| SHA Request Phrase | The same page. |
| SHA Response Phrase | The same page. |
| Currency | The one currency your account charges in, as three letters: AED, SAR, USD. |

Saving checks them with Amazon Payment Services, works out whether the account is a sandbox one and which SHA type you chose there (SHA-256, SHA-512, HMAC-256 or HMAC-512), and **Test Connection** tells you both. A merchant identifier, an access code or a phrase it does not take is refused at its box.

For payments to be confirmed sooner, open **Technical Settings** in your back office, press **Add New Technical Settings** with **Redirection** as the **Integration Type**, and add the **Callback URL** Shoply shows you as both the **Notification URL** and the **Direct Transaction Feedback**, with **Send Response Parameters** set to **Yes**. Without it every payment is still followed, a little later.

At the checkout the buyer presses Pay and Amazon Payment Services' own page opens in a new tab, for exactly the order's total. When they have paid they are sent back to the order, which completes and is delivered.

* Your account charges in **one currency**, the one you typed. An order priced in another is charged in yours, at the day's rate, and the buyer sees that figure before they pay.
* Its page takes a payment for as long as the order waits to be paid: the time under **Unpaid Orders**, below.
* **Refund Order** in the dashboard sends the payment back through Amazon Payment Services. A refund made in its back office reaches the order the next time Shoply asks about it, which Refund Order does first, so money that already went back is never sent twice.
* A dispute does not reach the order. Answer it in Amazon Payment Services.
* A sandbox account completes and delivers orders with no money moving, and the order says so.

## Skrill

Connect your Skrill business account with three things:

| Box | What goes in it |
| - | - |
| Merchant Email | The email address your Skrill business account signs in with. |
| Secret Word | The secret word set under **Settings**, **Developer Settings** in Skrill. |
| Account Currency | The currency your Skrill account holds, as three letters: EUR, USD, GBP. |

Saving checks with Skrill that it takes payments for that email address, and **Test Connection** does the same. The secret word and the currency are proved by the first payment: Skrill signs every payment it confirms with your secret word, and one that does not match it completes nothing and is reported to you. So the word has to be exactly the one in Skrill.

At the checkout the buyer presses Pay and Skrill's own page opens in a new tab, for exactly the order's total, with their email already filled in. It takes cards, a buyer's Skrill wallet and the local methods of their country. When they have paid, Skrill tells Shoply, and the order completes on the page they left open and is delivered. You paste nothing into Skrill for this: every payment carries the address Skrill tells.

* Your account holds **one currency**, the one you typed. Every order is charged in it, at the day's rate where it is priced in another, and the buyer sees that figure before they pay.
* Skrill's page has to be opened within 15 minutes of pressing Pay. After that the checkout offers Pay again, which starts a new one.
* A bank transfer can take a few days to reach Skrill. The order waits for it and is delivered when Skrill confirms it.
* A Skrill payment **cannot be sent back from Shoply**: Skrill takes refund requests only from server addresses you list in your Skrill account. Refund it in Skrill and record the refund on the order, or refund it as store credit. A refund you make in Skrill does not reach the order by itself.
* A chargeback Skrill reports makes the order a chargeback.
* Skrill's own test merchant, `demoqco@sun-fish.com` with the secret word `skrill`, takes Skrill's test cards. An order paid to it is delivered with no money moving, and says so.

## Pandabase

Connect your Pandabase store with two things:

| Box | What goes in it |
| - | - |
| Store ID | Your store's ID in Pandabase, which starts with `shp_`. |
| API Token | A token made under **Settings**, **Developers**, **API Tokens** in Pandabase: its secret, which starts with `sk_`, not its ID. Give it Store, Orders and Webhooks read, and Orders, Refunds and Webhooks write. |

Saving asks Pandabase for your store with the token, which proves the two belong together and says the one currency your store charges in, and sets up the webhook that tells Shoply about your payments. You paste nothing into Pandabase for it. **Test Connection** names the store and its currency.

At the checkout the buyer presses Pay and Pandabase's own page opens in a new tab, for exactly the order's total. Pandabase is the seller of record: it sells to the buyer, adds any tax their country wants, and pays you. When they have paid, the order completes on the page they left open and is delivered.

* Your Pandabase store charges in **one currency**. An order priced in another is charged in your store's, at the day's rate, and the buyer sees that figure before they pay.
* Pandabase takes payments from 1.00 to 10,000.00. A buyer whose order is outside that is told so at Pay, and pays another way.
* Pandabase's page takes a payment for six hours after Pay is pressed. After that the checkout offers Pay again, which starts a new one.
* A payment a bank has not finished waits, and the order is delivered when Pandabase says it is paid.
* **Refund Order** in the dashboard sends the whole order back through Pandabase, which takes a refund within 30 days of the order and while no dispute is open. A refund you make in Pandabase reaches the order by its webhook.
* A chargeback Pandabase reports makes the order a chargeback. An open dispute does not show on the order: answer it in Pandabase.

## Shopify

Take payments through your own Shopify store: each order is paid on your Shopify checkout, through a draft order Shoply makes there when the buyer presses Pay.

To connect it, make an app for your store in Shopify's Dev Dashboard ([dev.shopify.com](https://dev.shopify.com/dashboard)), signed in to the organization your store is in:

1. Create an app. Use the **App URL** and the **Allowed Redirection URL** the Shopify dialog in **Payment Methods** shows you, exactly as they are shown.
2. Give it the access scopes `write_draft_orders` and `write_orders`, and webhook version 2026-10.
3. Copy the app's **Client ID** and **Client Secret** from its Settings.

| Box | What goes in it |
| - | - |
| Store Address | Your store's myshopify.com address, such as mystore.myshopify.com. Its address in the Shopify admin works too. |
| Client ID | The app's Client ID. |
| Client Secret | The app's Client Secret, not an access token. |

Saving sends you to Shopify to install the app on your store. Install it, and Shopify sends you back to **Payment Methods** with Shopify connected. Until then its card says **Not Installed**, and buyers aren't offered it.

At the checkout the buyer presses Pay and your Shopify checkout opens in a new tab, for exactly the order's total, with their email already filled in. The draft order has one line, named as the order's invoice is ("Order a2855h0p1y4-71329ed4d95-1000427"). When they have paid, the order completes on the page they left open and is delivered.

* Your Shopify store charges in **one currency**. An order priced in another is charged in your store's, at the day's rate, and the buyer sees that figure before they pay.
* Your Shopify checkout takes a payment for as long as the order waits to be paid: the time under **Unpaid Orders**, below.
* The line asks for no shipping address, and Shopify adds no tax to it: tax you set in Shoply is in the total already.
* A payment that has not cleared yet waits, and the order is delivered when Shopify says it is paid.
* **Refund Order** in the dashboard sends the payment back through Shopify. A refund you make in Shopify reaches the order too.
* A chargeback Shopify reports makes the order a chargeback.
* An order Shopify calls a test (its Bogus Gateway, or a payment provider in test mode) is delivered, and says no money moved.
* Each draft order stays in your Shopify admin, and the paid ones become orders there.

## Tagada

Take card payments through your Tagada account, which charges each one through the processors you have connected in Tagada. Your Tagada store needs a payment flow with at least one processor in it: that is what charges the card.

Connect it with two things:

| Box | What goes in it |
| - | - |
| Store ID | Your store's ID in Tagada, which starts with `store_`. It is in your store's settings in Tagada. |
| API Key | A secret API key, made under **Settings**, **API Keys** in Tagada. A public key (`tp_pk_`) is refused. |

Saving asks Tagada about the key, which says whether it is a live key or a sandbox one, and for your store with it, which proves the two belong together and says which currencies your store charges in. It also sets up the webhook that tells Shoply about refunds. You paste nothing into Tagada for it. **Test Connection** names the store and its currencies.

At the checkout the buyer presses Pay and types their card into boxes on the checkout itself. The card goes from their browser straight to Tagada's card vault, and Shoply is only handed a token for it. Their bank may want to check it is them: its page opens over the checkout, or, for a processor that runs the check itself, on the processor's own page in a new tab. Approved, the order completes on the same page and is delivered.

* An order priced in a currency your Tagada store doesn't charge in is charged in one it does, at the day's rate, and the buyer sees that figure before they pay.
* A declined card can be tried again, or another card used.
* A bank check the buyer never finishes is given up after 30 minutes, and the order can be paid again. The buyer can also give it up themselves and use another card.
* **Refund Order** in the dashboard sends the payment back through Tagada. A refund you make in Tagada reaches the order by its webhook.
* A dispute does not show on the order: Tagada's webhook does not report one. Answer it in Tagada.
* A sandbox key charges nothing. Test with the card number 4242 4242 4242 4242, any future expiry date and any three-digit code. The order is delivered, and says no money moved.

## Adyen

Take payments through your Adyen merchant account, on Adyen's own payment page. It offers cards, and the payment methods you have switched on in the merchant account for the buyer's currency.

Connect it with four things:

| Box | What goes in it |
| - | - |
| API Key | A key of one of your API credentials, made under **Developers**, **API credentials** in your Customer Area. |
| Merchant Account | Your merchant account's name, as the account switcher in the upper left of your Customer Area shows it. |
| Live URL Prefix | For a live account, the prefix under **Developers**, **API URLs** in your live Customer Area. Left empty, the account is a test one. |
| HMAC Key | The key of the Standard webhook you add in your Customer Area for the **Callback URL** Shoply shows you, under **Developers**, **Webhooks**. |

Saving asks Adyen which payment methods your merchant account has, which proves the key, the account and the address go together. A key Adyen does not know is refused, and so are an account the key cannot take payments for and an account with no payment method. **Test Connection** says whether it is a test account and how many payment methods it has.

At the checkout the buyer presses Pay and Adyen's payment page opens in a new tab, for exactly the order's total, with their email given to it. When they have paid, the order completes on the page they left open and is delivered.

* Adyen's link to its page lasts a day. Past it the buyer presses Pay again, which makes another.
* Adyen takes every currency Shoply prices in but the Bulgarian lev. A buyer shown prices in the lev is charged your store's own figure in your store's currency, and a store that prices in the lev is charged in euros at the day's rate. The buyer sees that figure before they pay.
* A payment is confirmed by asking Adyen about its link. The webhook brings it sooner, and is the only way Adyen says which payment paid the link, which **Refund Order** needs.
* **Refund Order** in the dashboard sends the payment back through Adyen: the whole of it, cancelled if it was not captured yet. If Adyen then does not send it, the order and your notifications say so, and the money is yours to send in Adyen.
* A refund you make in Adyen reaches the order by the webhook, and a partial one is noted on it.
* A chargeback Adyen reports makes the order a chargeback, and a notice of one opens a dispute on it.
* What the webhook says of a refund or a chargeback is believed only under your HMAC Key. A webhook that does not match is turned away, so Adyen sends it again and shows it failing on your webhook, and you are told once a day.
* A test account completes and delivers orders with no money moving, and the order says so.

## Mercado Pago

Take payments through your Mercado Pago account, on Mercado Pago's own checkout page. It offers the payment methods of your account's country: cards, and where your country has them, Pix, boleto and Mercado Pago balances.

| Box | What goes in it |
| - | - |
| Access Token | Your application's production access token, from **Production credentials** in **Your integrations**. It starts with `APP_USR-`. |
| Webhook Secret | Optional. The secret of a webhook you add for Shoply's **Callback URL** under **Webhooks** in your application. |

Saving asks Mercado Pago which account the token is for, which says its country and so its currency. Shoply connects accounts in Argentina, Brazil, Mexico, Chile and Colombia. A test credential is refused: Checkout Pro is tried with a test account's production token.

At the checkout the buyer presses Pay and Mercado Pago's page opens in a new tab, for exactly the order's total, with their email given to it. When they have paid, the order completes on the page they left open and is delivered. A declined card, or a payment that is declined after it was on its way, leads them back to the same page to try again.

* Your account charges in **one currency**, its country's. An order priced in another is charged in it, at the day's rate, and the buyer sees that figure before they pay.
* Every payment tells Mercado Pago where to send its notifications, so there is nothing to set up for them. The **Webhook Secret** only lets Shoply check a notification's signature.
* Mercado Pago's page takes a payment for as long as the order waits to be paid: the time under **Unpaid Orders**, below.
* A purchase paid two ways counts both payments.
* **Refund Order** in the dashboard sends the payment back through Mercado Pago, within 180 days and while your Mercado Pago balance covers it. A refund you make in Mercado Pago reaches the order, and a partial one is noted on it.
* A payment Mercado Pago charges back makes the order a chargeback.
* A payment made by a test account is delivered, and the order says no money moved. Mercado Pago sends no notifications for test payments: Shoply finds them by asking.

## MONEI

Take payments through your MONEI account, on MONEI's own hosted payment page. It offers the payment methods switched on in your account: cards, Apple Pay and Google Pay, and where you have them, Bizum, PayPal and others.

| Box | What goes in it |
| - | - |
| API Key | Your API key, from **Settings**, **API Access** in your MONEI Dashboard. A live key starts with `pk_live_`, a test key with `pk_test_`. |

Saving asks MONEI which payment methods your account allows, which proves the key and says whether it is a test key. An account with no payment method switched on is refused.

At the checkout the buyer presses Pay and MONEI's page opens in a new tab, for exactly the order's total, with their email given to it. When they have paid, the order completes on the page they left open and is delivered. A payment MONEI declines ends there: the buyer presses Pay again, which makes another.

* Which currencies your account takes is MONEI's to say. A payment in one it does not take is refused at Pay, the buyer is asked to choose another way to pay, and you are told what MONEI said.
* Every payment tells MONEI where to send its result, so there is nothing to set up for payments.
* MONEI's page takes a payment for as long as the order waits to be paid: the time under **Unpaid Orders**, below.
* **Refund Order** in the dashboard sends the payment back through MONEI: the whole of it, or what is left after a refund made in MONEI.
* A refund you make in MONEI reaches the order when you make it if you add the **Callback URL** as a webhook in MONEI for `charge.refunded` and `charge.partially_refunded` ([how](/guides/setup/monei.md#refunds-you-make-in-monei-optional)). Without it, it is found when you press **Refund Order**. A partial one is noted on the order.
* A chargeback MONEI reports does not reach the order.
* A test key completes and delivers orders with no money moving, and the order says so.

## Whop

Connect the business you have on Whop with two things from your Whop dashboard:

| Box | Where it is in Whop |
| - | - |
| API Key | **Developer**, under your account's API keys. Give it the Admin role, or the permissions to manage checkouts, payments and webhooks. |
| Business ID | It starts with `biz_`, and is in your dashboard's address and under **Settings**. |

Saving checks the two against Whop, says whether the key is a live one or a sandbox one, and sets up the webhook that tells Shoply about your payments. You paste nothing into Whop for it.

At the checkout the buyer presses Pay and Whop's own checkout page opens in a new tab, for exactly the order's total. When they have paid, the order completes on the page they left open and is delivered. The payment lands in your Whop balance, in a product named after your store that is hidden from your Whop storefront.

* **Refund Order** in the dashboard sends the payment back through Whop. A refund you make in Whop refunds the order here too, and a partial one is noted on it.
* A dispute shows on the order, and a lost one makes it a chargeback.
* A promo code of your own that a buyer uses on Whop's page lowers what they pay, so the order is not completed and you are told. Keep promo codes off the product Shoply makes.
* Whop links may ask for up to 2,500 US dollars until Whop has approved your business for more. A total over that cannot be paid this way.
* A sandbox key completes and delivers orders with no money moving, and the order says so.

## Crypto

Four providers take crypto for you, and a store can connect any of them, or several at once. Each is an account of your own with that company, and each is a row of its own at the checkout, under its name: "Cryptocurrency (Cryptomus)". Rename a row in its settings if you would rather it said something else.

| Provider | What to paste | Where it is |
| - | - | - |
| NOWPayments | API Key, IPN Secret Key | Your NOWPayments dashboard |
| Cryptomus | Merchant ID, Payment API Key | Your merchant's Settings tab in Cryptomus, once the merchant is approved |
| Heleket | Merchant ID, Payment API Key | Your merchant's settings in Heleket |
| OxaPay | Merchant API Key | Merchant Service in your OxaPay dashboard |

Use the key for taking payments. Cryptomus, Heleket and OxaPay each have a second key for sending money out, which Shoply never asks for.

It works the same way whichever you connect:

* The buyer picks a coin on the checkout, from the ones your account with that provider takes. A coin on more than one network is listed once for each, and says which: "Tether (TRON)".
* A coin that cannot take an order this small is said at the picker, before the buyer presses Pay.
* Pay shows an address, the exact amount in the coin, a QR code and a clock, on the checkout itself. Nobody is sent to another page.
* When the payment is seen the order waits for it to confirm, and then completes and delivers. Nothing needs pressing.
* A payment that arrives up to 1% short still completes the order, and the order's history says by how much. One that arrives further short does not complete it: you are told, the order's history says what did arrive, and the coins are in your account with the provider to send back or to keep and mark the order as paid.
* A payment that arrives over the amount completes the order, and the history says how much more came.
* A crypto payment is never sent back through the provider. **Refund Order** puts the amount on the buyer's store balance.

**Test Connection** in a provider's dialog says whether the keys work and how many coins the account takes. An account with no coin switched on is refused there, since no buyer could pay with it.

## Skinloop

Buyers pay with their CS2 or Rust skins, traded from their Steam inventory on Skinloop's own page. Skinloop pays your Skinloop balance in US dollars. Under **Add a Payment Method** it is under **Other**: it is neither fiat nor crypto.

Connecting takes four steps, three of them in Skinloop:

1. Make an **API Key** in Skinloop, under **API & Webhooks**, with `checkout:create` and `checkout:read` and the games you take. Paste it into Shoply.
2. In Skinloop, under **Checkout Configuration**, add the **Checkout Address** Shoply shows you to **Checkout Redirect Origins**. Without it Skinloop refuses every checkout, and buyers cannot pay.
3. In Skinloop, under **API & Webhooks**, add the **Callback URL** Shoply shows you as a webhook endpoint, for `payment.completed` and `payment.reverted`. Paste the signing secret it shows you into **Webhook Signing Secret**.
4. Switch on **Take CS2 Skins**, **Take Rust Skins**, or both, as your key allows.

Saving asks Skinloop whose the key is and refuses one it does not know. **Test Connection** does the same. Whether the key may make checkouts, for which games, and whether the address is approved, Skinloop says only when a buyer pays, so make one small payment of your own before you sell.

At the checkout its row shows the logo of each game you switched on, CS2's and Rust's, under its name, where a card method shows its card brands. The buyer presses Pay and Skinloop's page opens in a new tab, for exactly the order's total in US dollars. They pick their skins and send the trade. Their email goes with it, and Skinloop does not ask them for it again.

* A **Rust** trade completes the order as soon as Skinloop has verified it.
* A **CS2** trade is held by Steam for **up to 8 days**. The order stays pending meanwhile, and the checkout tells the buyer so. It is delivered when Skinloop says the trade is complete, and is never cancelled as unpaid while the trade is held.
* An order priced in another currency is charged in US dollars, at the day's rate, and the buyer sees that figure before they pay.
* Skinloop's page waits an hour for a trade. After that the checkout offers Pay again.
* A buyer may send skins worth more than the order. The order completes as usual, for the same order.
* A trade Skinloop reverses after the order completed makes the order a chargeback. It reaches the order only by the webhook, which is why `payment.reverted` is one of the two events.
* Skins cannot be sent back. **Refund Order** puts the amount on the buyer's store balance.

## Rewarble

Buyers pay with Rewarble vouchers: they type each voucher's code on the checkout, and it is redeemed into your Rewarble account. Under **Add a Payment Method** it is under **Other**.

| Setting | What it is |
| - | - |
| API Key | A key from the **Client API** page of your Rewarble account. Rewarble gives one only to an account with 500 EUR of deposits over its life. Leave the key's **IP whitelist** empty: Shoply's address is not one you can list. |

Saving asks Rewarble whether it knows the key, in a way that redeems nothing, and refuses one it does not know. **Test Connection** does the same.

At the checkout the buyer presses Pay, types a voucher's code and presses **Redeem Voucher**. A voucher is used up whole, and what it is worth is known only once it is redeemed, so:

* A voucher worth less than the order is counted toward it, and the buyer adds another code, then another, until the order is covered. The checkout lists each one and what is left to pay.
* The voucher that covers the order completes it, and it is delivered. Anything the vouchers paid beyond the total goes on the buyer's [store balance](/guides/customers-and-balance.md), to spend at your store.
* A buyer who stops short, pays the rest another way, or lets the order run out loses nothing either: what their vouchers paid goes on their store balance.
* A voucher in another currency than the order's is counted at the day's rate.
* A code Rewarble refuses (unknown, already used, expired) counts nothing, and the buyer is told why.
* An order takes ten codes an hour, so nobody can try codes against your account without end.
* Each voucher redeemed is in the order's timeline, with what it was worth, the last four characters of its code and Rewarble's transaction number. The whole code is never kept.
* Rewarble cannot send a voucher back. **Refund Order** puts the amount on the buyer's store balance.

## Custom payment methods

For a way to be paid that is none of these, such as a bank transfer or a page of your own, add a [custom payment method](/guides/custom-payment-methods.md) under **Custom Payment Methods**. It joins the list of your methods at the top, last, and you drag it where you want it. The buyer pays you outside Shoply and says so, and you approve each order yourself.

## Several card processors

With two or more card methods connected, [Payment Routing](/guides/payment-routing.md) puts them behind one **Credit/Debit Card** row, shares checkouts between them by your rules, and moves a declined card on to the next.

## Unpaid orders

An order nobody pays is cancelled by itself, and any coupon it used is released. **Unpaid Orders**, under **Payment Options**, then **Order Settings**, says how long one is kept: 24 hours unless you change it, from 1 hour to 14 days.

A payment method can have a time of its own, set under **Set a Time for One Method**, for an order a buyer has started paying with it: three days for crypto, say, while an abandoned card checkout goes in an hour. Either way the time counts from when the order was placed, and a buyer who has just pressed **Pay** always has an hour to finish. A payment already on its way keeps the order whatever the time says: coins confirming, a bank that has not answered, or a CS2 trade in Steam's hold.

An invoice you send is kept until its own due date instead.

With an [API key](/guides/api-keys.md) that has **Change Payment Methods**, your server can set both: see [Set how long an unpaid order is kept](/api-reference/payment-methods/set-how-long-an-unpaid-order-is-kept.md).

## Paying with balance

Where you allow it, a buyer can pay with their [store balance](/guides/customers-and-balance.md), alone or with a payment method for the rest.

## For one product

A product or a single variant can refuse some payment methods, and a product can add a fee for one, as a percent, a fixed amount, or both. The fee follows whichever method the buyer pays with. With [Payment Routing](/guides/payment-routing.md) on, the card methods behind it share one **Credit/Debit Card** fee, whichever of them takes the payment.

## Credentials

A payment method's keys are entered in the dashboard, where you are asked to confirm it is you, and are kept encrypted. They are never shown again and never answered by the API: a key can read which methods are connected and switch them on and off, and nothing more.

## A payment that did not arrive

A crypto payment has a time it is good for. When it runs out the checkout says so and offers a new one. If money arrives late for an order that was cancelled, the order still completes.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.