Skip to content

Push and sign‑in infrastructure

FreeNo card to start

Send push to Android, iOS and the web. Approve logins on a trusted phone, add passkeys and send email codes. One API key, billed in rupees.

Works with your stack

Four products,
one API key

Send to a user, a topic or everyone on Android, iOS and the web. Schedule it from your server, or let your team write it in the composer.

Learn more

When someone signs in on a new device, the user's trusted phone asks if it was them. They pick a number and confirm with Face ID.

Learn more

Sign-in with a fingerprint or a screen lock, on your own domain. 10,000 sign-ins a month free, unlimited on Starter.

Learn more

Two calls: send a code, check a code. From our domain or yours, in English or Hindi.

Learn more

Pay in rupees, with a GST invoice

  • Billed in rupees
  • GST invoice
  • UPI autopay or card
  • No card to start
  • Codes in Hindi
  • Xiaomi, Oppo and Vivo handled
See pricing

Offers on time,
written by your team

Write a push, pick a topic, set a time and check the preview. No developer needed.

Learn more

Every event reaches
your server

Sends, approvals, codes and cleaned tokens, each as a signed webhook.

Learn more

One login, four products

Try a passkey, ask the trusted phone, fall back to an email code, then tell the other devices. One call each, one user id.

  1. 1
    PasskeyNo passkey on this laptop yet
    Skipped
  2. 2
    ApprovePush to the trusted Pixel 8, number 47
    Approved in 4 s
  3. 3
    Email OTPUsed only when no trusted phone answers
    Not needed
  4. 4
    Push"New login on Chrome in Pune" to the other devices
    Sent
login.ts
// One login, four products, one user id.
const user_id = "usr_8f21c4";

// 1. A passkey, if this device has one.
const pk = await signops.passkeys.verify(token);
if (pk.verified) return signIn(user_id);

// 2. Ask the trusted phone.
const ok = await signops.approve.createAndWait({
  user_id,
  context: "Chrome on Windows",
});

// 3. No answer: an email code.
if (ok.status !== "approved") {
  await signops.otp.send({ email, app_name: "Kirana" });
  return askForCode();
}

// 4. Tell the other devices.
await signops.push.send({
  user_id,
  title: "New login on Chrome in Pune",
});
return signIn(user_id);

Send your first push today.

Free for 1,000 push devices, 100 approvals a day, 10,000 passkey sign-ins a month and 500 email codes to try. No card until you pass a free amount.