Online orders and payments
Once your online store is published and at least one way to pay is turned on, shoppers can put products in a cart and order them for pickup in your shop. There's no delivery yet.
The money always goes straight to you. Shoppers pay you in the shop, into your own UPI ID, or into your own Stripe, PayPal, Razorpay or Square account. SupplySynk never receives, holds or splits your money and takes no fee on sales. Card details are typed on the provider's own secure page, never on SupplySynk.
Ways to pay
| Way to pay | Who confirms the payment | Available |
|---|---|---|
| Pay at pickup | You, when the shopper pays at the counter | Everywhere |
| UPI | You, after checking the payment reached your UPI ID | Businesses whose currency is Indian rupees (INR) |
| Stripe (cards, Apple Pay, Google Pay) | Stripe, automatically | Everywhere Stripe works, except India |
| PayPal (PayPal and cards) | PayPal, automatically | Most currencies PayPal takes; not within India |
| Razorpay (UPI, cards, netbanking) | Razorpay, automatically | India, INR |
| Square online checkout (cards) | Square, automatically | Businesses connected to Square (US, CA, GB, AU, JP, IE, FR, ES) |
Settings → Payments only shows the ones that work for your business's country and currency. Each one shows whether it's Connected, Needs attention (with what to fix), or Not set up on this server (SupplySynk hasn't added it yet; nothing for you to do).
Turn it on (owners and admins)
- Go to Settings → Payments.
- Pay at pickup: turn it on. Optionally change how long items are held for an order (48 hours unless you choose 1 to 168) and add a note to shoppers, such as "Ask at the counter". Press Save. Shoppers see the note when they choose how to pay, on their order page, and in the order received and ready for pickup emails.
- UPI (India): enter your UPI ID (like
yourshop@okicici) and the name shown when paying, press Save, then turn it on. A business (merchant) UPI ID works best: some UPI apps limit payments to personal IDs. UPI is only offered when your business currency is INR. - Card payments: connect one or more of the providers below.
- Publish your store in Settings → Online store if you haven't.
Staff, managers and viewers can see the settings but not change them.
Stripe
- In Settings → Payments → Stripe, press Connect with Stripe.
- Stripe opens. Sign in to your Stripe account (or create one) and approve SupplySynk. You come back to Settings → Payments.
- If Stripe asks you to finish setting up your account (bank details, identity), do that in Stripe first: SupplySynk shows "Finish setting up your Stripe account" until Stripe lets it take payments.
- Turn on Offer Stripe at checkout.
Payments are made on your own Stripe account and paid out by Stripe to your bank as usual; Stripe's normal fees apply, SupplySynk adds none. Disconnect removes SupplySynk's access (you can also do that in Stripe → Settings → Connected platforms).
PayPal
PayPal needs a business account and your own "REST app" (free):
- Sign in at developer.paypal.com with your PayPal business account → Apps & Credentials. Choose Live (or Sandbox to test) → Create App → name it "SupplySynk store".
- Copy the app's Client ID and Secret.
- In Settings → Payments → PayPal, choose Live or Sandbox, paste the client ID and secret, and press Save keys. SupplySynk checks them with PayPal and adds the webhook to your app for you. Leave Webhook ID empty unless Settings asks you to add the webhook yourself.
- Press Test connection, then turn on Offer PayPal at checkout.
Shoppers approve the payment on PayPal and come back to their order page, where the payment is taken. If they close the window after approving, the webhook takes it a moment later.
Razorpay (India)
- In the Razorpay Dashboard go to Account & Settings → API keys and generate a key (Test mode to try it first, Live mode for real payments). Copy the Key ID and Key secret.
- In Settings → Payments → Razorpay, paste them and press Save keys. The page then shows your webhook address.
- In Razorpay go to Account & Settings → Webhooks → Add new webhook:
- Webhook URL: the address from step 2 (use the copy button);
- Secret: make up a long password and type it here;
- Events:
payment_link.paid,payment_link.expired,payment.capturedandrefund.processed.
- Back in SupplySynk, paste the same secret in Webhook secret, press Save keys, then Test connection, and turn on Offer Razorpay at checkout.
Razorpay is only offered when your business currency is INR.
Disconnecting (Disconnect on the card) is refused while shoppers are still paying with that provider; you can disconnect anyway, which cancels those orders and puts their items back on sale. If a payment still arrives later, SupplySynk records it and emails you to refund it.
Square online checkout
- Connect Square in Settings → Square and link your Square location to your shop's location (see Square).
- In Settings → Payments → Square online checkout, press Allow online payments in Square and approve in Square (once).
- Back in Settings → Payments, press Use my Square connection, then turn it on.
Online payments land in your Square account next to your in-store sales. They confirm the online order; they aren't counted again as an in-store sale.
Testing with test keys
Use Stripe test mode, PayPal Sandbox keys or Razorpay Test mode keys on the staging site: shoppers see the provider's test page and can pay with the provider's test cards or sandbox buyer account. Settings shows a Test mode badge. Switch to live keys before you open the store.
What shoppers do
- On a product page they choose options (size, colour), a quantity and Add to cart. Products that are out of stock can't be added.
- In the cart they check quantities. Prices are always today's prices from SupplySynk; if something sold out or is no longer sold, the cart says so.
- At checkout they enter their name, email and phone, choose where to pick up (your active locations of type store, or your default location) and how to pay, and place the order. If you've turned on the "Get offers" sign-up form (Marketing → Settings), checkout also shows unticked boxes to get your offers by email and, once they've typed a phone, on WhatsApp. They don't need to tick anything to order. See Marketing for what's recorded.
- They see a page with their order number and what to do next, and get
an order received email with the same.
- Pay at pickup: "Pay when you collect". Nothing more to do until you email them that it's ready.
- UPI: a QR code to scan with any UPI app (on a computer) or a Pay with UPI app button (on a phone), for exactly the order total. After paying they type the 12-digit UPI reference (UTR) from their app on the order page.
- Stripe, PayPal, Razorpay, Square: they go straight to the provider's secure page to pay, then come back to their order page. It says Waiting for confirmation for a few seconds, then Payment received, and they get a payment confirmed email. If they leave without paying, the order page has a Continue to payment button until the hold ends.
You get an email for each new order
Every owner and admin gets a New online order email when a shopper places an order: the order number, what was ordered, the shopper's name, email and phone, where they'll pick up, how they're paying, until when the items are held, and a link to the order. One email per order, whether it came from your store or from your own website (Storefront API).
To change it, go to Settings → Online store → New order emails (owners and admins): turn Email us about new orders off, or add one more address under Also send to, such as a shared inbox.
Stock is held while they pay
Placing an order reserves the items at the pickup location straight away, so they can't be sold twice (online, in the shop, or through Square). If nobody pays in time the order is cancelled and the items go back on sale:
| Way to pay | Held for |
|---|---|
| Pay at pickup | 48 hours (your setting, 1-168 hours) |
| UPI | 30 minutes to pay and enter the UTR |
| Stripe, PayPal, Razorpay, Square | 35 minutes (the payment page closes after 31) |
The hold stops expiring once the shopper enters a UPI reference (you then check it), or once you mark the order Ready for pickup (cancel it yourself if they never come). Paid orders never expire.
If the shopper leaves the Stripe or Razorpay page without paying and it closes, the hold ends straight away. In the rare case a payment arrives after the hold ended, it's recorded and the order notes say to refund it (or re-create the order); PayPal payments are never taken after the hold ended. Owners and admins also get an email. If a provider reports a payment for a different amount than the order, the order shows Payment to verify, the items stay held, and owners and admins are emailed: check it in the provider's dashboard, then Mark paid or Refund.
Handle an online order (staff and up)
Online orders appear in Orders with channel online; choose Online store in the channel filter to see only those. Open one to see the Online order card: how they're paying, the UPI reference they typed (with a copy button), the pickup location, their phone, and until when the stock is held.
- Mark paid
- Pay at pickup: when they pay at the counter.
- UPI: first check the payment with that reference arrived in your bank or UPI app, then mark it paid.
- Stripe, PayPal, Razorpay and Square: nothing to do. The order is marked paid when the provider confirms it, usually within seconds.
- The shopper gets a payment confirmed email. Marking paid twice records it once.
- Ready for pickup when it's packed. The shopper gets a ready for pickup email (once), telling them to bring their order number and, if unpaid, to pay when they collect.
- Picked up when they collect it. This fulfils the order: the stock leaves your inventory. For an unpaid pay-at-pickup order, use Paid and picked up to record the payment at the same time.
To cancel an online order use Cancel as for any order; the held stock is released and the shopper's order page shows it's cancelled.
Refunds. For Stripe, PayPal, Razorpay and Square payments an owner or admin can press Refund on the Online order card: the whole payment goes back to the shopper from your own account and the order shows Refunded. Refunding doesn't put stock back; cancel the order too if the items should go back on sale. Refunds you make in the provider's own dashboard are noted on the order automatically. Refunds of pay-at-pickup and UPI payments are made from your till, bank or UPI app.
Viewers see online orders but can't change them.
Emails shoppers get
| When | |
|---|---|
| Order received | Straight after ordering, with how to pay and a link to their order page |
| Payment confirmed | When you mark it paid (or the provider confirms it) |
| Ready for pickup | When you mark it ready |
Emails come from SupplySynk in your business's name and include your phone and email from your business profile.
Tax at checkout
Tax follows your tax settings. In India prices include GST, so the total is the price on the shelf (rounded to the nearest ₹1) and the checkout shows the GST inside it. In the US, once you turn sales tax on, it's added to the subtotal. Until you set tax up, nothing is added.
Not yet
- Delivery and shipping.
- Customer accounts: shoppers check out as guests.
- Partial refunds from SupplySynk (make them in the provider's dashboard).
For developers
- Settings:
GET/PUT /api/v1/payments/connections(read:settings/write:settings). Test the stored keys withPOST /api/v1/payments/connections/{provider}/test; disconnect withDELETE /api/v1/payments/connections/{provider}. Keys are never returned. - Orders:
GET /api/v1/orders?channel=online,GET /api/v1/orders/{id}/online, andPOST /api/v1/orders/{id}/mark-paid,/ready-for-pickup,/picked-up(write:orders). Refund:POST /api/v1/orders/{id}/refund(owners and admins signed in; not API keys or AI assistants). - Webhook events
order.paidandorder.ready_for_pickup, alongsideorder.created(channelonline),order.updated,order.fulfilledandorder.cancelled. - AI assistants:
get_payment_settings,update_payment_settings,get_online_order_details,mark_order_paid,mark_order_ready_for_pickup,mark_order_picked_up. - The store's own pages call public endpoints under
/api/store/<site>/(see API and webhooks).