Form validation is essential for data quality and user experience. TinyFn provides validation endpoints that work consistently across any language or framework - no regex knowledge required.

Available Validation Endpoints

Email Validation

GET /v1/validate/email?email=user@example.com

Validates email syntax including international domains. Returns parsed parts (local, domain).

URL Validation

GET /v1/validate/url?url=https://example.com

Validates URL format. Returns parsed components (protocol, host, path, query).

Phone Validation

GET /v1/validate/phone?phone=%2B12125551234&country=US

Validates phone numbers with international support. Returns formatted versions.

Credit Card Validation

GET /v1/validate/credit-card?number=4532015112830366

Validates credit card numbers using Luhn algorithm. Identifies card type.

Password Strength

GET /v1/validate/password-strength?password=MySecurePass123!

Analyzes password strength. Returns score and improvement suggestions.

IP Address Validation

GET /v1/validate/ip?ip=192.168.1.1

Validates IPv4 and IPv6 addresses. Identifies type and range.

Example: React Registration Form

RegistrationForm.jsx
import { useState } from 'react';

const API_KEY = process.env.REACT_APP_TINYFN_KEY;

async function validateField(type, value) {
  const endpoints = {
    email: `/v1/validate/email?email=${encodeURIComponent(value)}`,
    url: `/v1/validate/url?url=${encodeURIComponent(value)}`,
    phone: `/v1/validate/phone?phone=${encodeURIComponent(value)}&country=US`
  };

  const response = await fetch(`https://api.tinyfn.io${endpoints[type]}`, {
    headers: { 'X-API-Key': API_KEY }
  });
  return response.json();
}

export function RegistrationForm() {
  const [email, setEmail] = useState('');
  const [errors, setErrors] = useState({});

  const handleEmailBlur = async () => {
    const result = await validateField('email', email);
    if (!result.is_valid) {
      setErrors(prev => ({ ...prev, email: 'Please enter a valid email' }));
    } else {
      setErrors(prev => ({ ...prev, email: null }));
    }
  };

  return (
    <form>
      <input
        type="email"
        value={email}
        onChange={(e) => setEmail(e.target.value)}
        onBlur={handleEmailBlur}
        placeholder="Email address"
      />
      {errors.email && <span className="error">{errors.email}</span>}
    </form>
  );
}

Example: Python Backend Validation

validators.py
import requests
from functools import lru_cache

API_KEY = os.environ.get('TINYFN_KEY')
BASE_URL = 'https://api.tinyfn.io/v1'

@lru_cache(maxsize=1000)
def validate_email(email: str) -> tuple[bool, str | None]:
    """Validate email with caching."""
    response = requests.get(
        f'{BASE_URL}/validate/email',
        params={'email': email},
        headers={'X-API-Key': API_KEY}
    )
    data = response.json()

    if data['is_valid']:
        return True, None
    return False, 'Invalid email address'


def validate_registration(data: dict) -> dict[str, str]:
    """Validate all registration fields."""
    errors = {}

    # Email validation
    is_valid, error = validate_email(data.get('email', ''))
    if not is_valid:
        errors['email'] = error

    # Password strength
    response = requests.get(
        f'{BASE_URL}/validate/password-strength',
        params={'password': data.get('password', '')},
        headers={'X-API-Key': API_KEY}
    )
    strength = response.json()
    if strength['score'] < 3:
        errors['password'] = f"Password too weak. {strength['feedback']}"

    return errors


# Usage in Flask/FastAPI
@app.post('/api/register')
def register(data: RegisterRequest):
    errors = validate_registration(data.dict())
    if errors:
        raise HTTPException(400, detail=errors)
    # Continue with registration...

Why Use TinyFn for Validation?

No Regex Maintenance

Email regex patterns are notoriously complex. We handle edge cases so you don't have to maintain fragile patterns.

Consistent Across Stack

Same validation logic in your React frontend and Python backend. No drift between client and server validation.

International Support

Phone numbers, international emails, Unicode - all handled correctly without additional libraries.

Detailed Responses

Get parsed components, suggestions, and error messages. Build better UX with rich validation feedback.

Start Validating Today

Get your free API key and validate 100 fields per month for free.

Get Free API Key