Skip to content
KolayOTP
TROpen panel
WhatsApp~2s · highest open rateSMS~4s · works on any phoneEmail~3s · lowest costTelegram~1s · freeWhatsApp~2s · highest open rateSMS~4s · works on any phoneEmail~3s · lowest costTelegram~1s · freeWhatsApp~2s · highest open rateSMS~4s · works on any phoneEmail~3s · lowest costTelegram~1s · free

One API for OTP — on any channel you choose.

A single integration with channel routing, fallback, sandbox keys and a production-ready panel. Send your first OTP in five minutes.

Start freeAPI documentation
Infrastructure & integrations
BasefyioBuildfyioNetGSMResendPayfyio
bash — api.kolayotp.com
09:41
K
KolayOTP
business account
Your verification code:
482913
09:41 ✓✓
Valid for 10 minutes. Don't share it.

Four channels, one endpoint.

If the primary channel fails, the request falls through to the next one — no code changes on your side.

WhatsAppTemplate messages or reverse OTP via Meta Cloud API.~2s · highest open rateDetails →SMSSMSDirect delivery to Turkish carriers through NetGSM.~4s · works on any phoneDetails →EmailResend infrastructure with SPF/DKIM-ready templates.~3s · lowest costDetails →TelegramInstant bot delivery, no per-message cost.~1s · freeDetails →

Integrate in three steps

1

Get your API key

Create live and sandbox keys in the panel. In sandbox, 123456 always verifies.

kotp_live_… / kotp_test_…
2

Send the code

Pick a channel or let your routing config decide; fallback is automatic.

POST /api/v1/otp/send
3

Verify

5 attempts, 10-minute TTL, HMAC-stored codes, idempotency support.

POST /api/v1/otp/verify

Built for developers

TypeScript SDK, an OpenAPI schema, and an MCP server for AI agents. Or five lines of curl.

idempotency-key header prevents duplicate sends on retries
Free sandbox with kotp_test_* keys; 123456 always verifies
Contract-tested OpenAPI schema at /api/v1
Rate-limit and fraud events stream to your webhook
Developer docs
$ curl -X POST https://api.kolayotp.com/api/v1/otp/send \
    -H "Authorization: Bearer kotp_live_..." \
    -H "Content-Type: application/json" \
    -H "idempotency-key: $(uuidgen)" \
    -d '{"recipient":"+905551234567","locale":"tr"}'

{
  "id": "otp_3kQ9fT2a",
  "channel": "whatsapp",
  "status": "sent",
  "expires_at": "2026-09-11T09:51:00Z",
  "attempts_left": 5
}

A panel that's production-ready on day one

Balance and auto top-up, routing editor, per-channel analytics and live delivery logs.

See the panel
Balance
₺4,280
Auto top-up on
Sent this month
18,402
98.7% delivery rate
Avg. verification
11.4s
Across channels

Pay only for what you send

No subscription, no commitment. Per-channel unit pricing drawn from your balance. Garanti in Turkey, Stripe internationally.

See pricing
Monthly OTP volume
10,000 OTP
Estimated monthly costTRY 3,040
Sample mix: 60% SMS, 30% WhatsApp, 10% email. Prices are indicative.

Frequently asked

What's the difference between sandbox and live keys?+
kotp_test_* keys never send a real message, are never billed, and always verify the code 123456. kotp_live_* keys draw from your balance and deliver for real. Both use identical endpoints.
What is WhatsApp reverse OTP?+
Instead of sending a code, you hand the user a prefilled wa.me link. When they send the message, their number is proven — the code-entry step disappears entirely and conversion goes up.
How does rate limiting work?+
Sliding-window limits per recipient, IP and tenant are held in Redis. If Redis is unreachable the system fails closed: verification is rejected and the event is written to the fraud log.
How does resend behave?+
/otp/resend keeps the same verification session, issues a new code and can fall through to a different channel. Cooldown is configurable.
Where is data stored for KVKK/GDPR?+
Phone numbers and email addresses are stored in Basefyio Postgres in the EU region. Codes are never stored in plaintext — only HMAC digests, deleted at TTL.
How is billing handled?+
Prepaid balance. Garanti virtual POS in Turkey, Stripe internationally. Auto top-up triggers when the balance drops below your threshold.

Send your first OTP in five minutes.

No credit card. Start on a sandbox key and switch to live when you're ready.

Start free