...

Did you log in from a new device?

Near

Toronto, Ontario

Device

Apple iPhone

When

Apr 20, 2024

IP

99.239.5.148

...

Did you log in from a new device?

Near

Toronto, Ontario

Device

Apple iPhone

When

Apr 20, 2024

IP

99.239.5.148

Suspicious login
detection in minutes.

Send beautiful email notifications to your users when any suspicious login happens. View an example email

Sign up for free Request Demo

Built for developers

Zenlogin is built to make developers lives easier. Preset sensitivity intervals, simple integration and prebuilt notification emails.

Designed for security

A security API through and through. We guarantee this is the easiest way to add a layer of security to your application, website or service.

Sensitivity Controls

Get refined control of when your users get notified of suspicious logins.

Maps Integration

Beautiful maps built into email notifications so your users can quickly visualize if their account has been compromised.

Custom Rules

Create special rules so your team members can get notified whenever a login attempt happens on their account.

Detailed Logs

Keep track of all suspicious logins for your users including all the details you'll want to track.

The fastest way to add an extra layer of security for

Using Zenlogin for suspicious login detection means you don't have to build it in-house. We'll detect suspicious login attempts and notify your users via email.

Setup in minutes
(Single endpoint)

Premium Phone Support

Minimalist email notifications

No PII Stored

 View a real example email

...

Did you log in from a new device?

Near

Toronto, Ontario

Device

Apple iPhone

When

Apr 20, 2024

IP

99.239.5.148

A single endpoint and just a few lines of code.

Get up and running in minutes instead of weeks. Paste in a few lines of code and you're good to go. View a real example email

curl https://api.zenlogin.co/v1/applications/appl0123456789/logins/checks \
--header "X_API_SECRET_KEY: your_secret_key" \
--data identity_key="usr12345" \
--data identity_email_address="name@website.com" \
--data user_agent="Mozilla/5.0 (Windows NT 6.1; rv:74.0) Gecko/20100101 Firefox/74.0" \
--data ip_address="18.118.12.222"
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.zenlogin.co/v1/applications/appl0123456789/logins/checks');
$postData = array();
$postData['identity_key'] = 'usr12345';
$postData['identity_email_address'] = 'name@website.com';
$postData['user_agent'] = 'Mozilla/5.0 (Windows NT 6.1; rv:74.0) Gecko/20100101 Firefox/74.0';
$postData['ip_address'] = '18.118.12.222';
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'X_API_SECRET_KEY: your_secret_key'
));
$response = curl_exec($ch);
$response = json_decode($response, true);
curl_close($ch);
const axios = require('axios');
const endpoint = 'https://api.zenlogin.co/v1/applications/appl0123456789/logins/checks',
  postData = {},
  options = {};
postData.identity_key = 'usr12345';
postData.identity_email_address = 'name@website.com';
postData.user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:74.0) Gecko/20100101 Firefox/74.0';
postData.ip_address= '18.118.12.222';
options.headers = {};
options.headers.X_API_SECRET_KEY = 'your_secret_key';
axios.post(endpoint, postData, options).then(function(response) {
  console.log(response.data);
}).catch(function(error) {
  console.error(error.response.data);
});
import requests
url = 'https://api.zenlogin.co/v1/applications/appl0123456789/logins/checks'
postData = {
  'identity_key': 'usr12345',
  'identity_email_address': 'name@website.com',
  'user_agent': 'Mozilla/5.0 (Windows NT 6.1; rv:74.0) Gecko/20100101 Firefox/74.0',
  'ip_address': '18.118.12.222'
}
headers = {'X_API_SECRET_KEY': 'your_secret_key'}
response = requests.post(url, data=postData, headers=headers)
print response.content
require 'uri'
require 'net/http'

uri = URI('https://api.zenlogin.co/v1/applications/appl0123456789/logins/checks')
req = Net::HTTP::Post.new(uri.path)
req['X_API_SECRET_KEY'] = 'your_secret_key'
postData = {}
postData['identity_key'] = 'usr12345'
postData['identity_email_address'] = 'name@website.com'
postData['user_agent'] = 'Mozilla/5.0 (Windows NT 6.1; rv:74.0) Gecko/20100101 Firefox/74.0'
postData['ip_address'] = '18.118.12.222'
req.set_form_data(postData);

https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true

response = https.request(req)
puts response.body
View all integration options
...

Stay focused on what matters.
We'll handle the suspicious logins.

Security issues are on the rise. Get peace of mind when it comes to suspicious logins and let us do all the detection for you, so you can focus on other things.

Usage based, simple pricing for all.

Businesses need security now more than ever. Pick a plan that makes the most sense for you.

Pro
$ 199

per month

25,000 Requests /mo

2,500 Suspicious Login Emails

Detailed Logs

Custom Rules

Maps Integration

Remove Branding

Try it free for 30 days

Always Free

As long as you have less than 500 requests and send less than 50 email notifications per month, Zenlogin is free to use!

Get started for free
?

Will Zenlogin work with my server side language?

Absolutely. We support all major server side languages! Check out the docs

?

Do you store Personally Identifiable Information?

We don't store any of your users PII. For sending emails we use Postmark and this data is only stored there for 45 days.

?

Is there a money back guarantee?

Yup! We offer a 14-day money back guarantee on any paid plan.

?

Can I use my own email templates?

At this time, we offer what we believe is the perfect email design for suspicious email notifications. It's been thoroughly tested and works in all modern email clients.

Get started

Get Zenlogin, protect your users.

Don't build suspicous login detection from scratch. Zenlogin is faster, secure and we'll worry about all the mundane details.

Get started for free