
PortOne connects multiple Korean PGs (Toss, KG Inicis, NICE, Kakao Pay, Naver Pay, and more) through a single API. This guide covers signup, PG contracts, channel registration, and V2 API calls.
Platform fee
Free (PG fees only)
Supported PGs
15+
Required docs
Business registration · PG contract
Overview
PortOne (formerly Iamport) abstracts multiple PGs behind one API. PortOne itself is free, but you need a separate contract with each PG. For new projects, use V2 (GraphQL/REST); V1 is still supported.
Business registration
Both individuals and corporations qualify.
Pick a PG
Toss, KG Inicis, NICE, and more.
V2 vs V1
V2 recommended for new projects.
Webhook server
Requires an HTTPS endpoint.
Step by Step
SIGNUP
Sign up at admin.portone.io.
PG
Sign a PG contract to enable live payments. You can apply from the PortOne console.
TEST
Finish the integration in test mode before signing.
KEYS
Use V2 for new projects.
CHANNEL
Register live channels when switching to real payments.
CLIENT
Open the payment window from the frontend.
VERIFY
Never trust the frontend alone — re-verify on the server.
WEBHOOK
Receive payment state changes instantly.
Pitfalls
Trusting only the frontend result
Results can be manipulated from the browser console. Always re-query the PortOne API on the server and verify amounts.
Leaked API Secret
Hardcoding secrets and pushing them to GitHub happens often. Rotate immediately if exposed.
Mixing test and live channels
Test keys fail against live channels and vice versa. Separate them with environment variables.
Skipping webhook signature verification
Anyone can POST to your webhook endpoint. Updating state without verification allows order forgery.
Building from V1 docs only
Most online material targets V1. For new projects, start with the V2 docs.
Projects at JAICYLAB include everything from developer account setup to launch and ops.