Skip to main content

SlugKit Python SDK

Project description

SlugKit Python SDK

A Python SDK for generating human-readable IDs using SlugKit.dev service.

Please see SlugKit documentation for information on creating series and obtaining API keys.

Installation

pip install slugkit-py-sdk

API Overview

The SDK provides a comprehensive interface to generate human-readable IDs, test patterns, and manage generator state.

Basic Usage

from slugkit import SyncClient

# Initialize the client
client = SyncClient(
    base_url="https://dev.slugkit.dev/api/v1",
    api_key="your-api-key"
)

# Generate a single ID
id = client.series.mint()[0]

# Generate multiple IDs
ids = client.series.mint(count=5)

# Get generator stats
stats = client.series.stats()

# Get series information
series_info = client.series.info()

# Get list of available series
series_list = client.series.list()

# Get subscription limits and features
limits = client.limits()

# Reset the generator
client.series.reset()

Advanced Generator Configuration

# Configure generator with limits and batch sizes
generator = client.series.mint.with_limit(100).with_batch_size(10)

# Start from a specific sequence
generator = generator.starting_from(1000)

# Use dry-run mode (for testing)
generator = generator.with_dry_run()

# Generate IDs with configuration
ids = list(generator)

Pattern Testing (Forge)

# Test a pattern with various options
ids = client.forge(
    pattern="{adjective}-{noun}-{number:3d}",
    seed="optional-seed",
    sequence=1,
    count=5
)

# Get pattern information
pattern_info = client.forge.pattern_info("{adjective}-{noun}-{number:3d}")

# Get dictionary information
dict_info = client.forge.dictionary_info()

# Get dictionary tags
dict_tags = client.forge.dictionary_tags()

# Use different pattern types
ids = client.forge(
    pattern="simple-{noun}-{number:2,hex}",
    count=3
)

Series Management

# Access a specific series
series_generator = client.series["series-slug"]

# Generate IDs for specific series
ids = series_generator(count=10)

# Get stats for specific series
stats = series_generator.stats()

# Get series info for specific series
series_info = series_generator.series_info()

Async Usage

The SDK also provides an async client for use with async/await code:

import asyncio
from slugkit import AsyncClient

async def main():
    # Initialize the async client
    client = AsyncClient(
        base_url="https://dev.slugkit.dev/api/v1",
        api_key="your-api-key"
    )

    # Generate a single ID
    id = await client.series.mint()[0]

    # Generate multiple IDs
    ids = await client.series.mint(count=5)

    # Get generator stats
    stats = await client.series.stats()

    # Get series information
    series_info = await client.series.info()

    # Get list of available series
    series_list = await client.series.list()

    # Get subscription limits and features
    limits = await client.limits()

    # Reset the generator
    await client.series.reset()

    # Test a pattern
ids = await client.forge(
    pattern="{adjective}-{noun}-{number:3d}",
    seed="optional-seed",
    sequence=1,
    count=5
)

# Get pattern information
pattern_info = await client.forge.pattern_info("{adjective}-{noun}-{number:3d}")

# Get dictionary information
dict_info = await client.forge.dictionary_info()

# Get dictionary tags
dict_tags = await client.forge.dictionary_tags()

    # Stream IDs asynchronously
    async for id in client.series.mint:
        print(id)

# Run the async code
asyncio.run(main())

Command Line Interface

The SDK includes a command-line interface for easy usage:

Generate IDs

# Generate a single ID
slugkit mint

# Generate multiple IDs
slugkit mint 5

# Generate IDs with custom batch size
slugkit mint 10 --batch-size 2

Test Patterns

# Test a pattern
slugkit forge "your-pattern"

# Test with specific seed and sequence
slugkit forge "your-pattern" --seed "my-seed" --sequence 1

# Generate multiple test IDs
slugkit forge "your-pattern" --count 5

# Validate a pattern and get information
slugkit validate "your-pattern"

Generator Management

# Get generator stats
slugkit stats

# Get list of available series
slugkit series-list

# Get series information
slugkit series-info

# Get subscription limits and features
slugkit limits

# Get subscription limits in JSON format
slugkit limits --output-format json

# Reset the generator
slugkit reset

Configuration

The CLI can be configured using environment variables or command-line options:

# Set base URL
export SLUGKIT_BASE_URL="https://dev.slugkit.dev/api/v1"

# Set API key
export SLUGKIT_API_KEY="your-api-key"

# Or use command-line options
slugkit --base-url "https://dev.slugkit.dev/api/v1" --api-key "your-api-key" mint

Output Format

The CLI supports different output formats:

# Text output (default)
slugkit mint

# JSON output
slugkit mint --output-format json

Data Types

The SDK provides structured data types for API responses:

StatsItem

Represents generator statistics:

from slugkit.base import StatsItem

stats = client.series.stats()
for item in stats:
    print(f"Event: {item.event_type}")
    print(f"Total Count: {item.total_count}")
    print(f"Request Count: {item.request_count}")
    print(f"Average Duration: {item.avg_duration_us}μs")

SeriesInfo

Represents series information:

from slugkit.base import SeriesInfo

series_info = client.series.info()
print(f"Pattern: {series_info.pattern}")
print(f"Capacity: {series_info.capacity}")
print(f"Generated: {series_info.generated_count}")
print(f"Last Modified: {series_info.mtime}")

PatternInfo

Represents pattern information:

from slugkit.base import PatternInfo

pattern_info = client.forge.pattern_info("test-{adjective}-{noun}")
print(f"Pattern: {pattern_info.pattern}")
print(f"Capacity: {pattern_info.capacity}")
print(f"Max Slug Length: {pattern_info.max_slug_length}")
print(f"Complexity: {pattern_info.complexity}")
print(f"Components: {pattern_info.components}")

DictionaryInfo

Represents dictionary information:

from slugkit.base import DictionaryInfo

dict_info = client.forge.dictionary_info()
for item in dict_info:
    print(f"Kind: {item.kind}, Count: {item.count}")

DictionaryTag

Represents dictionary tags:

from slugkit.base import DictionaryTag

dict_tags = client.forge.dictionary_tags()
for tag in dict_tags:
    print(f"Kind: {tag.kind}, Tag: {tag.tag}, Words: {tag.word_count}")

SubscriptionFeatures

Represents subscription limits and features:

from slugkit.base import SubscriptionFeatures

limits = client.limits()
print(f"Max Series: {limits.max_series}")
print(f"Requests Per Minute: {limits.req_per_minute}")
print(f"Forge Enabled: {limits.forge_enabled}")
print(f"Max Mint Per Day: {limits.max_mint_per_day}")
print(f"Max Mint Per Month: {limits.max_mint_per_month}")

# All fields are optional - None means not available
if limits.max_forge_per_request is not None:
    print(f"Max Forge Per Request: {limits.max_forge_per_request}")

API Response Examples

Stats Response

[
  {
    "event_type": "mint",
    "date_part": "total",
    "total_count": 104517,
    "request_count": 118,
    "total_duration_us": 1092348,
    "avg_duration_us": 10.45
  },
  {
    "event_type": "forge",
    "date_part": "total",
    "total_count": 15,
    "request_count": 5,
    "total_duration_us": 500,
    "avg_duration_us": 50.0
  }
]

Series Info Response

{
  "slug": "whole-blond-rower-a597",
  "org_slug": "alias-first-glute-67d9",
  "pattern": "{adverb}-{adjective}-{noun}-{number:3d}",
  "max_pattern_length": 80,
  "capacity": "1281739952493000",
  "generated_count": "105",
  "mtime": "2025-08-29T00:54:35.128902+00:00"
}

Pattern Info Response

{
  "pattern": "{adjective}-{noun}-{number:3d}",
  "capacity": "1000000",
  "max_slug_length": 25,
  "complexity": 3,
  "components": 3
}

Dictionary Info Response

[
  {
    "kind": "adjective",
    "count": 1000
  },
  {
    "kind": "noun",
    "count": 2000
  },
  {
    "kind": "verb",
    "count": 1500
  }
]

Dictionary Tags Response

[
  {
    "kind": "adjective",
    "tag": "positive",
    "description": "Positive adjectives",
    "opt_in": true,
    "word_count": 500
  },
  {
    "kind": "noun",
    "tag": "animals",
    "description": "Animal names",
    "opt_in": false,
    "word_count": 300
  }
]

Series List Response

[
  "series-1",
  "series-2",
  "series-3"
]

Error Handling

The SDK provides comprehensive error handling with custom exception types:

from slugkit import SyncClient
from slugkit.base import (
    SlugKitConnectionError,
    SlugKitAuthenticationError,
    SlugKitValidationError,
    SlugKitRateLimitError,
    SlugKitQuotaError,
    SlugKitServerError,
)

client = SyncClient(
    base_url="https://dev.slugkit.dev/api/v1",
    api_key="your-api-key"
)

try:
    ids = client.series.mint(count=10)
except SlugKitRateLimitError as e:
    # Rate limiting with detailed information
    print(f"Rate limited: {e}")
    if e.rate_limit_reason:
        print(f"Reason: {e.rate_limit_reason}")
    if e.retry_after:
        print(f"Retry after: {e.retry_after} seconds")
    if e.rpm_remaining is not None:
        print(f"RPM remaining: {e.rpm_remaining}")
    if e.daily_remaining is not None:
        print(f"Daily remaining: {e.daily_remaining}")
except SlugKitAuthenticationError as e:
    print(f"Authentication failed: {e}")
except SlugKitValidationError as e:
    print(f"Validation error: {e}")
except SlugKitQuotaError as e:
    print(f"Quota exceeded: {e}")
except SlugKitConnectionError as e:
    print(f"Connection failed: {e}")
except SlugKitServerError as e:
    print(f"Server error: {e}")

Rate Limiting

The SDK implements intelligent rate limit handling:

  • Automatic Retry: Rate limit errors with rate-limit-exceeded or daily-limit-exceeded are automatically retried
  • Exponential Backoff: Retry delays increase exponentially with jitter
  • Server Retry-After: Respects X-Slug-Retry-After header from the server
  • Quota Visibility: Shows remaining RPM, daily, monthly, and lifetime quotas
  • Smart Non-Retry: Permanent failures (not-available, request-size-exceeded) and long-term limits (monthly-limit-exceeded, lifetime-limit-exceeded) are not retried

Rate limit reasons returned by the server:

  • rate-limit-exceeded - RPM limit reached (retryable with accurate retry-after)
  • daily-limit-exceeded - Daily limit reached (retryable with accurate retry-after)
  • monthly-limit-exceeded - Monthly quota exceeded (non-retryable, wait until next month)
  • lifetime-limit-exceeded - Lifetime quota exceeded (non-retryable, upgrade required)
  • request-size-exceeded - Request size too large (non-retryable, reduce batch size)
  • not-available - Feature not available to user (non-retryable, check subscription)
  • redis-error - Server error (non-retryable, contact support)

Pattern Language

The SDK supports SlugKit's pattern language for generating structured IDs:

Basic Tokens

  • {adjective} - Random adjective
  • {noun} - Random noun
  • {adverb} - Random adverb
  • {verb} - Random verb

Number Generators

  • {number:3d} - 3-digit decimal number
  • {number:4,hex} - 4-character hexadecimal
  • {number:2r} - up to 2-character roman number, lowercase
  • {number:6R} - up to 6-character roman number, uppercase

Examples

# Simple patterns
pattern1 = "{adjective}-{noun}"
pattern2 = "{color}-{animal}-{number:3d}"

# Complex patterns with constraints
pattern3 = "{adverb}-{adjective}-{noun}-{number:4,hex}[==5]"

# Generate IDs
ids = client.forge(pattern=pattern3, count=5)

MCP Server: AI Assistant Integration

⚡ The SlugKit MCP Server enables AI assistants to generate truly unique identifiers!

The Problem with AI-Generated IDs

AI assistants cannot generate truly unique strings because they:

  • Have no persistence between conversations
  • Cannot coordinate across multiple instances
  • Generate probabilistic, not truly random content
  • Have no concept of sequential uniqueness

This makes AI-generated identifiers unsuitable for production use where uniqueness is critical.

The Solution: SlugKit MCP Integration

The SlugKit MCP (Model Context Protocol) server connects AI assistants like Claude Desktop, Cursor, and Warp directly to SlugKit's guaranteed-unique ID generation service.

Key Benefits:

  • Guaranteed Uniqueness - Mathematical guarantees, not probabilistic generation
  • Sequential Consistency - Proper sequential IDs across all sessions
  • Production Ready - Battle-tested for high-volume applications
  • Zero Collisions - Impossible to generate duplicate IDs
  • Pattern Flexibility - Generate IDs matching your exact requirements

Quick Setup

Cloud Instance (Recommended):

{
    "mcpServers": {
        "SlugKit": {
            "command": "npx",
            "args": [
                "-y", "mcp-remote",
                "https://dev.slugkit.dev/api/v1/mcp",
                "--header", "x-api-key:YOUR_API_KEY_HERE"
            ]
        }
    }
}

Local Installation:

pip install slugkit-py-sdk
{
    "mcpServers": {
        "SlugKit": {
            "command": "slugkit-mcp",
            "env": {
                "SLUGKIT_API_KEY": "YOUR_API_KEY_HERE"
            }
        }
    }
}

Usage Examples

Once configured, ask your AI assistant:

"Generate 10 unique user IDs with the pattern user-{adjective}-{noun}-{number:4d}"

→ Returns guaranteed-unique IDs like "user-happy-dolphin-0001", "user-bright-falcon-0002"

"Analyze this pattern: {color}-{animal}-{number:3,hex} - how many unique IDs can it generate?"

→ Shows capacity analysis: "1.2M unique combinations, medium complexity"

"Compare these URL slug patterns and recommend the best one: {adjective}-{noun} vs {verb}-{noun}-{number:2d}"

→ Generates samples, analyzes capacity, recommends optimal choice

Available Capabilities

The MCP server provides AI assistants with access to:

  • ID Generation: forge (custom patterns), mint (series), slice (preview)
  • Pattern Analysis: validate_pattern, analyze_pattern, compare_patterns
  • Information: dictionary_info, series_info, key_info, stats
  • Management: series_list, reset (dev/test)
  • Documentation: get_help_topic, pattern syntax references

📚 For detailed setup instructions, troubleshooting, and advanced configuration, see README_MCP.md

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slugkit_py_sdk-1.0.0.tar.gz (2.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slugkit_py_sdk-1.0.0-py3-none-any.whl (56.7 kB view details)

Uploaded Python 3

File details

Details for the file slugkit_py_sdk-1.0.0.tar.gz.

File metadata

  • Download URL: slugkit_py_sdk-1.0.0.tar.gz
  • Upload date:
  • Size: 2.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.6

File hashes

Hashes for slugkit_py_sdk-1.0.0.tar.gz
Algorithm Hash digest
SHA256 912f19488887f714ff27d9f99efbdd8a96ddc4f9b4ef808df130c3ddbbddb00f
MD5 3ebf8b43f6aa68c0bd1dea123486d274
BLAKE2b-256 2ac9f7dc8615404ef5a2a37e013c472faf220d6007b61d9f4155f16344a9b9cb

See more details on using hashes here.

File details

Details for the file slugkit_py_sdk-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: slugkit_py_sdk-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 56.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.6

File hashes

Hashes for slugkit_py_sdk-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5a01a441283b4e86d640f3f20e36806c0b6360e6f021027a9f0a81a21bc30bee
MD5 4be22a48eed2283335c025393859ce4b
BLAKE2b-256 28cdc3240d67bd650735a35a07d2bf1cfa129decabe9ac09533b2d07da22e719

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page