Forms¶
The Konigle SDK provides functionality to manage forms and form submissions from the Konigle Forms service. Forms allow you to collect data from users, with built-in spam detection, CAPTCHA support, and email notifications.
Overview¶
Forms are managed through a separate service at https://forms.konigle.com and
support:
- Form creation with auto-generated slugs
- CAPTCHA integration for spam prevention
- Submission tracking with metadata (IP, country, user agent)
- Built-in spam detection with confidence scoring
- Email notification tracking
Prerequisites¶
Before using the Forms API, ensure you have the Konigle forms account configured with the project. The SDK automatically fetches the necessary credentials from this connection.
Creating Forms¶
Basic Form Creation¶
import konigle
from konigle.models.core import FormCreate
client = konigle.Client(api_key="your-api-key")
# Create a simple contact form
form_data = FormCreate(
name="Contact Form"
)
form = client.forms.create(form_data)
print(f"Created form: {form.id}")
print(f"Form slug: {form.slug}") # Auto-generated from name
print(f"Form name: {form.name}")
The slug is automatically generated from the form name (e.g., "Contact Form" becomes "contact-form").
Listing Forms¶
Basic Listing¶
import konigle
client = konigle.Client(api_key="your-api-key")
# List all forms
forms = client.forms.list()
print(f"Found {forms.count} forms")
for form in forms.payload:
print(f" • {form.name} (slug: {form.slug})")
Paginated Listing¶
# List forms with pagination
page1 = client.forms.list(page=1, page_size=10)
print(f"Page {page1.current_page} of {page1.num_pages}")
print(f"Total forms: {page1.count}")
for form in page1.payload:
print(form)
# Navigate to next page
if page1.has_next():
page2 = client.forms.list(page=2, page_size=10)
Getting Form Submissions¶
# Get submissions for a specific form
submissions = client.forms.list_submissions(
slug="contact-form",
page=1,
page_size=20
)
print(f"Found {submissions.count} submissions for 'contact-form'")
for submission in submissions.payload:
print(f"\nSubmission ID: {submission.id}")
print(f" Submitted at: {submission.submitted_at}")
print(f" IP Address: {submission.ip_address}")
print(f" Country: {submission.country or 'Unknown'}")
print(f" Is Spam: {submission.is_spam}")
# Access form data
print(f" Form Data: {submission.form_data}")
# Check spam details
if submission.is_spam:
print(f" Spam Confidence: {submission.spam_confidence:.2f}")
print(f" Spam Reason: {submission.spam_reason}")
CLI Usage¶
Use the CLI for quick form management:
# List all forms
konigle forms list
# List with pagination
konigle forms list --page 1 --page-size 5
# Create a new form
konigle forms create --name "Newsletter Signup"
# Get details of a specific form
konigle forms get contact-form
# List submissions for a form
konigle forms submissions contact-form
# List submissions with pagination
konigle forms submissions contact-form --page 1 --page-size 20
Async Operations¶
import asyncio
import konigle
async def manage_forms():
async with konigle.AsyncClient(api_key="your-api-key") as client:
# List forms asynchronously
forms = await client.forms.list()
print(f"Found {forms.count} forms")
# Get submissions for each form
for form in forms.payload:
print(f"\nProcessing submissions for: {form.name}")
submissions = await client.forms.list_submissions(
slug=form.slug,
page_size=10
)
# Count spam vs legitimate
spam_count = sum(1 for s in submissions.payload if s.is_spam)
legit_count = len(submissions.payload) - spam_count
print(f" Total: {submissions.count} submissions")
print(f" Legitimate: {legit_count}")
print(f" Spam: {spam_count}")
# Run async operation
asyncio.run(manage_forms())