Many payment gateways,
connected through one API.
Register the keys from your payment gateway (PG) contract in the Sayren dashboard. Sayren handles payment approval, cancellation and partial refund amounts.
- Toss PaymentsCards · wallets · bank transfer · mobilePG
- PortOne V2Payment methods of the PGs on your channelPG aggregator
- KakaoPayDirect wallet integrationWallet
- NaverPayDirect integration (payment type)Wallet
+ More payment gateways are on the way.
Payment methods and features by PG.
| Feature | Toss Payments | PortOne V2 | KakaoPay | NaverPay |
|---|---|---|---|---|
| Credit and debit cards | Supported | Channel setting | Not supported | Not supported |
| Wallet payments | NaverPay · KakaoPay · TossPay · PAYCO | Channel setting | KakaoPay | NaverPay |
| Bank transfer · mobile | Supported | Channel setting | Not supported | Not supported |
| Partial cancellation | Supported | Supported | Supported | Supported |
| Cash receipts | Supported | Supported | Not supported | Not supported |
| Sayren test key | Supported | Supported | Supported | Supported |
PortOne uses the payment methods accepted by the PGs connected to your channel. Virtual accounts are not yet supported for live payments.
Your storefront only opens the payment window.
When the customer completes payment, the Sayren server approves it. Approval keys never stay in the browser.
- 01Checkout · Get the list of payment options (PG · payment method · wallet provider).
- 02Start payment · The SDK opens the PG payment window.
- 03Approval · The PG returns to Sayren, and the server checks the amount before approving.
- 04Return · Read the result on your storefront's return page.
import { createPayments } from "@sayren/storefront-sdk/payments";
const payments = createPayments({ client: sdk, returnUrl });
// Checkout — payment options come with it
const checkout = await sdk.checkout.create({ cartItemIds });
// Start payment — opens the PG payment window
await payments.start(checkout.checkoutId, {
option: checkout.paymentOptions[0],
shippingAddress,
});
// Return page
const result = await payments.result();Run test payments before you sign a PG contract.
Turn on test mode keys and the payment window opens with test keys provided by Sayren. For real payments, switch to live keys after signing a PG contract.
Turn on test mode keys
Test payments right away, no contract needed
Connect your test keys
Test the connection with test keys from your PG
Test payment · refund
One payment and one refund of that payment
Go live
Switch after testing the live key connection
Sayren also handles what comes after payment.
Partial refund settlement
Calculates coupon allocation and return shipping fees based on the order snapshot.
Duplicate payment cancellation
If a customer pays twice, the later payment is canceled automatically.
Unresolved payment checks
Payments with a lost response are confirmed by querying the PG again.
Cash receipts
Issued for bank transfer payments and adjusted when you refund.
Sales report
Payments, refunds and net sales by PG and payment method
Payment failure alerts
Get an email when the same failure repeats because of a merchant setting issue.
Sales proceeds settle directly from the PG to you.
Sayren never holds your sales proceeds. Payment fees are your contracted PG rate, unchanged.
- CustomerPays
- PGSettles
- SellerReceives
Frequently asked questions
Can I use more than one PG?
Yes. The payment options at checkout list the payment methods of every PG you turn on, and the payment goes through the PG of the option the customer picks.
Can I start without a PG contract?
You can run test payments with test mode keys. Real payments require a PG contract and registered live keys.
Is card information stored on Sayren servers?
No. Customers enter card details in the PG payment window, and Sayren receives only the approval result.
Can I integrate without the SDK?
Yes. Integrate directly with the payment start and status APIs and the PG script. Native apps send the PG app SDK result to the approval API.
How are PG keys stored?
They are encrypted per store and stored only on the server. The dashboard shows only the first 4 characters, and only public keys reach the browser.