Changelog

What's new

What changed in the K-OTP API, SDKs, console, and website.

Subscribe (Atom feed)

2.0.0

Latest

KakaoTalk AlimTalk only, your service name in messages, and card payments in won

Action required

  • Direct SMS and WebOTP are removed (API 2.0.0). Codes are delivered by KakaoTalk AlimTalk only. The automatic SMS fallback after a failed AlimTalk delivery stays on by default (smsFallback: false still turns it off), and the price is unchanged.

    • channel: "sms" on POST /v1/issue is refused with 400 BAD_REQUEST (data.code CHANNEL_NOT_SUPPORTED) and nothing is sent. Remove it from your requests.
    • A template without an approved AlimTalk template can no longer be issued and is refused with 400 BAD_REQUEST (data.code TEMPLATE_NOT_AVAILABLE). All four templates (otp_default_kr, otp_login_kr, otp_signup_kr, otp_payment_kr) are available.
    • The webOtp option and the webOtp field of the issue response are removed. A request that still sends webOtp (any value except false) is refused with 400 BAD_REQUEST (data.code WEB_OTP_NOT_SUPPORTED), so stop sending it and turn it off in the UI components. Browsers' own one-time-code autofill is unaffected.

    See Channels and SMS fallback.

Added

  • @k-otp/sdk 2.1.0 and server SDKs 0.2.0 support API 2.x. @k-otp/sdk 2.1.0 has no breaking changes: getIssueRequestErrorCode(error) reads CHANNEL_NOT_SUPPORTED, TEMPLATE_NOT_AVAILABLE and WEB_OTP_NOT_SUPPORTED from a 400; channel: "sms", the webOtp option and result and the WebOTP helpers and props of @k-otp/sdk/ui are deprecated; and the form's webOtp setting now defaults to false. API 2.1.0 marks "sms" in a template's channelSupport as deprecated. The server SDKs by language are at 0.2.0, generated from API 2.1.0. See SDKs and Server SDKs by language.

  • Pay by card in Korean won. The Korean console now offers KRW card payment for credit packs and uses it by default: Mini costs ₩6,000, Starter ₩27,000 and Scale ₩109,000, plus 10% VAT, and the receipt is the card slip. USD payment through Creem is still available in the Korean console, and the English console continues to offer USD only. KRW payments are sold by 1990Company and processed by the payment agent Creb Co., Ltd. The Terms of Service, Refund Policy and Privacy Policy are updated, effective October 14, 2026. The update only adds this payment option: your existing rights, credits and prices do not change.

  • Show your service name in OTP messages (API 2.0.0). Each app can now have a service name that appears right after [K-OTP] in its messages, for example [K-OTP] 마이앱 로그인 인증번호는 123456입니다. Set it in the console under the app's Settings (1 to 12 characters: Korean, English letters, digits, single spaces). An operator reviews every new or changed name, and until it is approved your messages go out without a name, as before. The name comes from the console, never from the API request. See Message templates and service name.

Improved

  • More reliable crediting of payments. When the confirmation of a completed payment is interrupted, for example because the browser was closed before checkout finished, the background recovery now handles it first, so a backlog of other work no longer delays its credits.

Changed

  • New credit packs: Mini, Starter and Scale. Mini ($4.90, ₩6,000) gives 250 credits, Starter ($19.90, ₩27,000) gives 1,250 credits (1,000 + 250 bonus) and Scale ($79.90, ₩109,000) gives 6,250 credits (5,000 + 1,250 bonus). Starter and Scale come with 25% bonus credits on top of their base credits. USD prices exclude tax and won prices exclude 10% VAT, as before. The Pro pack is no longer sold. Credits you bought earlier are unchanged: they keep the pack they were sold with (for example Starter with 1,000 + 500 bonus credits, or Pro) and are refunded from that pack under the Refund Policy. The Terms of Service and Refund Policy are updated, effective October 14, 2026.

  • Verified codes stay charged when no delivery result arrives (API 2.1.1). If a code was verified but no final delivery status arrives within the delivery window, the issue is now reported as delivered and its credit stays used, because a verified code shows the message reached the user. Issues whose code was never verified are still refunded when the window ends. See Credits & billing.

1.4.0

Test mode: build and test without sending messages or using credits

Added

  • Test mode (API 1.9.0). pk_test_ and sk_test_ API keys simulate OTP issue, delivery and verification without sending a message or using credits, so you can build and run CI against the real API for free. Test keys accept only test phone numbers (010-0000-00xx, +44 7700 9000xx, +1 NXX 555-01xx); the last two digits choose a scenario, such as successful delivery, failed or slow delivery, expiry, a wrong code or a 429, 402 or 503 error, and the fixed code 000000 verifies. Responses include mode (live or test). Create test keys in the console on the Test tab of an app's API keys, and follow simulated issues in the app's Test inbox. See Test mode.

Changed

  • Live keys reject the test phone numbers (API 1.9.0). A live key that sends one of the numbers reserved for test mode (010-0000-00xx, +44 7700 9000xx, +1 NXX 555-01xx) now gets 400 TEST_NUMBER_IN_LIVE_MODE (in data.code) instead of sending a message to it.

1.3.0

USD payments through Creem, and server SDKs for more languages

Added

  • Pay for credit packs in USD through Creem. Creem is the merchant of record for USD payments. Prices exclude tax: Creem calculates any tax for your location, adds it at checkout and shows the total before you pay. Before checkout, the console explains Creem's role and asks for your separate consent to provide your email address and your organization, member and credit pack identifiers to Creem (Estonia).

  • Server SDKs for more languages (preview). Generated clients for C#, Java, Kotlin, PHP, Go, Python, Ruby and Dart cover every public API operation. See Server SDKs.

  • @k-otp/sdk 1.3.0 adds @k-otp/sdk/kiota, a server-only client for every public API operation built on the official Kiota runtimes.

Changed

  • Updated Terms of Service, Refund Policy and Privacy Policy, effective October 7, 2026. They name Creem for USD payments: USD prices exclude tax, refunds of USD payments are made by Creem to the original payment method and include the matching share of the tax, and the privacy policy describes what is shared with Creem.

1.2.0

Turn off the SMS fallback, and sign in with Kakao

Added

  • smsFallback: false (API 1.8.0). Turn off the automatic SMS fallback for a single request: the code is then delivered by KakaoTalk AlimTalk only, at the same price. Leaving it out keeps the fallback on. Supported in @k-otp/sdk 1.2.0. See Channels and SMS fallback.

  • Kakao Login for the console, next to the emailed sign-in link and code, Google, GitHub and passkeys. K-OTP asks Kakao only for your email address and nickname; see the Kakao Login supplement of the Privacy Policy.

Improved

  • Clearer billing. The pricing page and the credits guide explain what a credit buys: 1 credit per OTP send on every channel, whether or not the user verifies, with verify calls free. A send the messaging provider refuses uses no credit, and a credit is returned when delivery later fails.

1.1.0

KakaoTalk AlimTalk by default

Added

  • Terms of Service, Refund Policy and Referral Program Terms are in force. Purchased credits do not expire; free credits (signup bonus, referral rewards) can be used for one year and are not refundable. Unused purchased credits are refunded pro rata as described in the refund policy.

Changed

  • Codes are delivered by KakaoTalk AlimTalk by default, with automatic SMS fallback (API 1.7.0). Leave out channel to use it; channel: "sms" still sends by SMS. Each send still costs 1 credit, and the fallback never costs a second one. WebOTP autofill applies when the code arrives by SMS. @k-otp/sdk 1.1.0 documents the new default and reads promotional credit balances (promoBalance, promoNextExpiry).

1.0.0

K-OTP launches

Added

  • New website, console and docs. k-otp.dev in English and Korean with a "Try it now" demo of the issue and verify flow that runs entirely in your browser, the console at app.k-otp.dev and the documentation at docs.k-otp.dev.

  • OTP API (API 1.6.0). Issue and verify one-time codes for Korean phone numbers in two calls. Every issue carries an idempotency key, so retrying a request never sends a second message (Idempotency). Opt-in WebOTP lets Android Chrome fill in a code that arrives by SMS on the origins you allow.

  • Console for your team. Organizations with members and roles, apps, browser keys (pk_, limited to the exact origins you list) and server keys (sk_) with scopes and optional per-key rate limits, daily usage, issue history, and one credit wallet per organization shared by all of its apps.

  • Sign-in options. Sign in with an emailed link or 6-digit code, Google, GitHub or a passkey, and connect or disconnect sign-in methods in your account settings. A social sign-in joins an existing account only when both the provider and K-OTP have verified the email address.

  • Free credits. 100 free credits on your first organization, valid for one year, and a referral program: when an organization you referred makes its first payment, both organizations get 250 credits.

  • JavaScript/TypeScript SDK. @k-otp/sdk (install 1.0.1 or later) with browser and server clients, React, Vue and Svelte bindings, and headless UI components with an optional theme.

  • Privacy Policy published.