PortOne · AsyncAPI Specification
Portone Webhooks
Version
View Spec
View on GitHub
PaymentsPayment OrchestrationFintechKoreaBillingIdentity VerificationAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-07-17'
method: searched
source: https://developers.portone.io/opi/ko/integration/webhook/readme-v2
spec_type: Webhooks
notes: >-
PortOne V2 delivers asynchronous payment/billing-key lifecycle events to a
customer-registered endpoint. No machine-readable AsyncAPI document is
published, so this is a captured webhook catalog (type: Webhooks). Message
bodies and signing follow the Standard Webhooks spec
(https://www.standardwebhooks.com/): the request carries webhook-id,
webhook-timestamp, and webhook-signature headers, verified with HMAC-SHA256
against a console-issued webhook secret. The JVM and JS server SDKs ship a
WebhookVerifier. Webhook secrets are issued per mode (live / test) in the admin
console (결제 연동 → 연동 관리 → 결제알림(Webhook) 관리).
verification:
standard: Standard Webhooks (standardwebhooks.com)
algorithm: HMAC-SHA256
headers: [webhook-id, webhook-timestamp, webhook-signature]
secret_source: PortOne admin console, per-mode (live/test)
sdk_helper: "@portone/server-sdk WebhookVerifier (JS/JVM)"
delivery:
retries: true
retry_note: PortOne V2 implements advanced webhook retry (see blog 2024-02 v2-webhook).
source_ip: 52.78.5.241
ip_change_policy: PortOne emails customers before adding/changing the webhook source IP.
envelope:
fields:
- {name: type, description: Event type that triggered the webhook (e.g. Transaction.Paid).}
- {name: timestamp, description: Event occurrence time (RFC 3339).}
- {name: data, description: Event detail payload (e.g. paymentId, storeId, transaction data).}
events:
transaction:
- {type: Transaction.Ready, meaning: Payment record created / ready.}
- {type: Transaction.Paid, meaning: Payment completed (approved).}
- {type: Transaction.VirtualAccountIssued, meaning: Virtual account issued and awaiting deposit.}
- {type: Transaction.PayPending, meaning: Payment is pending.}
- {type: Transaction.Failed, meaning: Payment failed.}
- {type: Transaction.CancelPending, meaning: Async cancellation requested.}
- {type: Transaction.PartialCancelled, meaning: Payment partially cancelled/refunded.}
- {type: Transaction.Cancelled, meaning: Payment fully cancelled/refunded.}
- {type: Transaction.Confirm, meaning: Confirm webhook (pre-approval confirmation flow).}
- {type: Transaction.DisputeCreated, meaning: A dispute/chargeback was created.}
- {type: Transaction.DisputeResolved, meaning: A dispute/chargeback was resolved.}
billing_key:
- {type: BillingKey.Ready, meaning: Billing key ready.}
- {type: BillingKey.Issued, meaning: Billing key issued.}
- {type: BillingKey.Updated, meaning: Billing key updated.}
- {type: BillingKey.Failed, meaning: Billing key issuance failed.}
- {type: BillingKey.Deleted, meaning: Billing key deleted.}
tax_invoice:
- note: B2B tax-invoice status-change webhooks are documented separately at developers.portone.io/platform/ko/guides/webhook.
docs:
- https://developers.portone.io/opi/ko/integration/webhook/readme-v2
- https://developers.portone.io/platform/ko/guides/webhook
- https://developers.portone.io/blog/posts/2024-02/v2-webhook