Authentication platform — OTP as the distinctive verification channel.
Sign-in, 2FA, mobile approval and AI transaction approval in one integration. Sessions are minted here; OTP remains your deliberately focused verification strength.
Four channels, one endpoint.
If the primary channel fails, the request falls through to the next one — no code changes on your side.
Auth in three steps
Enable auth, get keys
Turn on Auth Methods in the panel; create a publishable key (pk_*) plus OTP delivery keys (kotp_*).
Sign-in + 2FA
Email/password, magic link or OTP sign-in; optional TOTP MFA and OAuth.
Protected routes & approval
Session cookies for protected routes; step-up mobile / AI approval for high-assurance actions.
Built for developers
TypeScript SDK, an OpenAPI schema, and an MCP server for AI agents. Or five lines of curl.
$ curl -X POST https://api.kolayotp.com/v1/auth/sign-in/email-password \
-H "X-KolayOTP-Publishable-Key: pk_live_..." \
-H "Content-Type: application/json" \
-d '{"email":"you@acme.com","password":"••••••••"}'
# Session cookies: __session (JWT) + __client (refresh)
# Optional AAL2: POST /v1/auth/sign-in/mfa/totp
$ curl -X POST https://api.kolayotp.com/api/v1/otp/send \
-H "Authorization: Bearer kotp_live_..." \
-H "idempotency-key: $(uuidgen)" \
-d '{"recipient":"+905551234567","locale":"tr"}'import { AuthClient } from "@kolayotp/auth-client";
import { KolayOTP } from "@kolayotp/sdk";
const auth = new AuthClient({
publishableKey: process.env.PK_KEY!,
baseUrl: "https://api.kolayotp.com",
});
const session = await auth.signInEmailPassword({
email: "you@acme.com",
password: process.env.USER_PASSWORD!,
});
// Cookies / JWT minted by KolayOTP — no local session.create()
const kotp = new KolayOTP({ apiKey: process.env.KOTP_KEY });
const otp = await kotp.send({ recipient: "+905551234567", locale: "tr" });
await kotp.verify({ id: otp.id, code: "482913" });{
"mcpServers": {
"kolayotp": {
"command": "npx",
"args": ["-y", "@kolayotp/mcp"],
"env": {
"KOLAYOTP_API_KEY": "kotp_test_..."
}
}
}
}
# Tools exposed to the agent:
# otp_send otp_verify
# otp_resend otp_status
# balance_getA panel that's production-ready on day one
Auth Methods, user / session management, balance, routing and channel analytics.
Pay only for what you use
Auth MAU + per-channel OTP. No subscription. Garanti in Turkey, Stripe internationally.
See pricingFrequently asked
Send your first OTP in five minutes.
No credit card. Start on a sandbox key and switch to live when you're ready.