Python SDK for FormBridge — async and sync HTTP client
Project description
formbridge-sdk
Python SDK for FormBridge — async and sync HTTP client for managing form submissions.
Installation
This SDK is not yet published to PyPI. Install it from source:
git clone https://github.com/agentkitai/formbridge.git
pip install ./formbridge/sdk/python
Quick Start (Async)
import asyncio
from formbridge import FormBridgeClient, Actor
async def main():
async with FormBridgeClient(
url="http://localhost:3000",
api_key="your-api-key",
) as client:
# Create a submission with initial fields
sub = await client.create_submission(
"vendor-onboarding",
fields={"company_name": "Acme Corp"},
actor=Actor(kind="agent", id="agent-1", name="Onboarding Bot"),
)
print(f"Created: {sub.submission_id}, state={sub.state}")
print(f"Missing fields: {sub.missing_fields}")
# Add more fields (resume_token rotates on each call)
result = await client.set_fields(
sub.intake_id,
sub.submission_id,
sub.resume_token,
{"contact_email": "alice@acme.com", "phone": "+1-555-0100"},
)
print(f"Updated: state={result.state}, missing={result.missing_fields}")
# Submit when all fields are filled
final = await client.submit(
sub.intake_id,
sub.submission_id,
result.resume_token,
)
print(f"Submitted: state={final.state}")
# Retrieve a submission
fetched = await client.get_submission(sub.intake_id, sub.submission_id)
print(f"Fields: {fetched.fields}")
asyncio.run(main())
Quick Start (Sync)
from formbridge import FormBridgeClientSync, Actor
with FormBridgeClientSync(api_key="your-api-key") as client:
sub = client.create_submission(
"vendor-onboarding",
fields={"company_name": "Acme Corp"},
actor=Actor(kind="agent", id="agent-1"),
)
print(f"Created: {sub.submission_id}")
Configuration
| Parameter | Env Var | Default |
|---|---|---|
url |
FORMBRIDGE_URL |
http://localhost:3000 |
api_key |
FORMBRIDGE_API_KEY |
— |
timeout |
FORMBRIDGE_TIMEOUT |
10 (seconds) |
Error Handling
from formbridge import FormBridgeClient, FormBridgeError
async with FormBridgeClient() as client:
try:
sub = await client.get_submission("intake-1", "sub-123")
except FormBridgeError as e:
if e.is_connectivity_error:
print("Server unreachable — degrade gracefully")
elif e.status_code == 404:
print("Not found")
else:
print(f"API error: {e.error_type} — {e}")
Retry Behavior
- Retries on: 429 (rate limited), 500, 502, 503, 504
- Does NOT retry on: 400, 401, 403, 404 (client errors)
- Backoff: 0.5s → 1.0s → 2.0s (exponential)
- Max retries: 3 (configurable via
max_retries)
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
formbridge_sdk-0.1.0.tar.gz
(7.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file formbridge_sdk-0.1.0.tar.gz.
File metadata
- Download URL: formbridge_sdk-0.1.0.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a6df13dccb0925da085c31913a6d0f2c86375b60ad21133aa5d5a19ce512880
|
|
| MD5 |
123125f580c1196a36d323682a2fff90
|
|
| BLAKE2b-256 |
36f63ecd53bc6e252a24fbadc567a770f8671add87dfbdb668b8572e966c70c2
|
File details
Details for the file formbridge_sdk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: formbridge_sdk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e002bfd674e420180725c4d0d5bfe0a76480fa4d37c9f883a57b1e94e03154b
|
|
| MD5 |
04dbcbfdebe42aa20d6ec37cb236aab2
|
|
| BLAKE2b-256 |
357ea106d9fd75a095654876b1d1fc61969202eb9c7c225133903287b237c164
|