Add users to your sites
in minutes, not months

Get users signing up, logging in, and resetting passwords today. Support Google, Apple, Facebook, Microsoft, X, GitHub, SSO, magic links, OTP, and more without building it from scratch. No lock-in—export your data anytime.

Get Started Free

Ship user authentication today

Everything you need to add users to your app, with zero lock-in and full data portability.

⚡ Quick Setup

Add signup, login, and password reset to your app in under 10 minutes. Just copy our URLs or embed our widget.

🔐 Multiple Providers

Support Google, Apple, Facebook, Microsoft, X (Twitter), GitHub, SSO, magic links, OTP, and traditional email/password authentication without managing multiple integrations.

🚪 No Lock-in

Export all user data, including password hashes and algorithms, whenever you want. Move to your own auth system anytime.

Just one callback function

See how easy it is to verify users across different languages and frameworks

$ curl "http://signin.fast/@your-domain.com/verify?token=abc123"

{
  "success": true,
  "user": {
    "id": 12,
    "email": "john@example.com",
    "name": "John Smith",
    "photo": "https://signin.fast/photos/user_12345.jpg",
    "provider": "google",
    "verified": true,
    "password_digest": "$2b$12$7iO9oU0pC1F7x8Xk1ZcNDeeFzE0cZ3WkzJYjz1t0KJHk9cPZQ0lFe",
    "created_at": "2024-01-15T10:30:00Z"
  },
  "session": {
    "long_lived_token": "sess_abc123def456"
  }
}
def callback
  token = params[:token]
  resp = HTTParty.get("http://signin.fast/@your-domain.com/verify?token=#{token}")
  user = User.where(email: resp["user"]["email"]).first_or_create!
  session[:user_id] = user.id 
  redirect_to dashboard_path, notice: "Logged in!"
end
function callback() {
    $token = $_GET['token'];
    $response = file_get_contents("http://signin.fast/@your-domain.com/verify?token=" . $token);
    $userData = json_decode($response, true)['user'];
    
    // Create or find user
    $user = findOrCreateUser($userData['email']);
    $_SESSION['user_id'] = $user['id'];
    
    header('Location: /dashboard');
}
public function callback(Request $request) 
{
    $token = $request->get('token');
    $response = Http::get("http://signin.fast/@your-domain.com/verify?token={$token}");
    $userData = $response->json()['user'];
    
    $user = User::firstOrCreate(['email' => $userData['email']]);
    Auth::login($user);
    
    return redirect('/dashboard')->with('message', 'Logged in!');
}
import requests
from flask import session, redirect, request

def callback():
    token = request.args.get('token')
    resp = requests.get(f"http://signin.fast/@your-domain.com/verify?token={token}")
    user_data = resp.json()['user']
    
    # Create or find user
    user = User.get_or_create(email=user_data['email'])
    session['user_id'] = user.id
    
    return redirect('/dashboard')
import requests
from django.contrib.auth import login
from django.shortcuts import redirect

def callback(request):
    token = request.GET.get('token')
    resp = requests.get(f"http://signin.fast/@your-domain.com/verify?token={token}")
    user_data = resp.json()['user']
    
    user, created = User.objects.get_or_create(email=user_data['email'])
    login(request, user)
    
    return redirect('/dashboard')
const axios = require('axios');

app.get('/callback', async (req, res) => {
  const { token } = req.query;
  const response = await axios.get(`http://signin.fast/@your-domain.com/verify?token=${token}`);
  const userData = response.data.user;
  
  // Create or find user
  const user = await User.findOrCreate({ email: userData.email });
  req.session.userId = user.id;
  
  res.redirect('/dashboard');
});

That's it! One simple callback to handle user authentication across any platform.