Python SDK for GrowFlow Booking API
Project description
GrowFlow Booking SDK (Python)
Python SDK for the GrowFlow Booking API. Provides an async client for managing bookings, availability, customers, and quotas.
Installation
pip install growflow-booking-client
Quick Start
import asyncio
from growflow_booking import GrowFlowBookingClient
async def main():
async with GrowFlowBookingClient(api_key="bk_live_xxx") as client:
# Get available slots
slots = await client.get_available_slots(
tenant_slug="my-business",
date="2024-03-15",
service_id="service-uuid-here",
)
# Find an available slot
available = [s for s in slots.slots if s.available]
if available:
# Create a booking
result = await client.create_simple_booking(
tenant_slug="my-business",
service_id="service-uuid-here",
date="2024-03-15",
slot=available[0].time,
customer_name="Mario Rossi",
customer_email="mario@example.com",
)
if result.success:
print(f"Booking created! Code: {result.booking.booking_code}")
asyncio.run(main())
Configuration
Environment Variables
export GROWFLOW_BOOKING_API_KEY="bk_live_xxx"
export GROWFLOW_BOOKING_URL="https://booking.growflow.studio/api/v1" # optional
Direct Configuration
client = GrowFlowBookingClient(
api_key="bk_live_xxx",
base_url="https://booking.growflow.studio/api/v1",
timeout=30.0,
max_retries=3,
)
API Reference
Tenants
# Get public tenant info (for widget)
tenant = await client.get_tenant_public("my-business")
# Get tenant services
services = await client.get_tenant_services("my-business")
# Get full tenant details (authenticated)
tenant = await client.get_tenant_detail("my-business")
Availability
# Get available dates in a range
dates = await client.get_available_dates(
tenant_slug="my-business",
start_date="2024-03-01",
end_date="2024-03-31",
service_id="service-uuid", # optional
)
# Get available time slots for a date
slots = await client.get_available_slots(
tenant_slug="my-business",
date="2024-03-15",
service_id="service-uuid",
)
Bookings
# Create a simple booking
result = await client.create_simple_booking(
tenant_slug="my-business",
service_id="service-uuid",
date="2024-03-15",
slot="10:00",
customer_name="Mario Rossi",
customer_email="mario@example.com",
customer_phone="+39123456789", # optional
notes="Special request", # optional
)
# Create an experience booking
result = await client.create_experience_booking(
tenant_slug="my-business",
experience_type_id="experience-uuid",
date="2024-03-15",
slot="14:00",
participants=4,
customer_name="Mario Rossi",
customer_email="mario@example.com",
)
# Get booking by ID (with email verification)
booking = await client.get_booking(booking_id="uuid", email="mario@example.com")
# List bookings (authenticated)
bookings = await client.list_bookings(
date_from="2024-03-01",
date_to="2024-03-31",
status="confirmed",
)
# Update booking status
booking = await client.update_booking_status(
booking_id="uuid",
status="completed",
)
# Cancel booking
await client.cancel_booking(booking_id="uuid", reason="Customer request")
Customers
# List customers
customers = await client.list_customers(search="mario")
# Create customer
customer = await client.create_customer(
name="Mario Rossi",
email="mario@example.com",
phone="+39123456789",
)
# Update customer
customer = await client.update_customer(
customer_id="uuid",
phone="+39987654321",
)
Quotas (for external integrations like SweatMate)
# Create quota for a customer
quota = await client.create_quota(
customer_external_id="user_123",
total_credits=10,
source="sweatmate",
source_reference="subscription_abc",
)
# Get customer credits
credits = await client.get_customer_credits("user_123")
print(f"Remaining: {credits.remaining_credits}")
# Use quota credit
usage = await client.use_quota(
quota_id="quota-uuid",
credits=1,
booking_id="booking-uuid",
)
Error Handling
from growflow_booking import (
GrowFlowBookingError,
AuthenticationError,
NotFoundError,
ValidationError,
QuotaExhaustedError,
)
try:
result = await client.create_simple_booking(...)
except AuthenticationError:
print("Invalid API key")
except NotFoundError:
print("Tenant or service not found")
except ValidationError as e:
print(f"Invalid data: {e.message}")
except QuotaExhaustedError:
print("No credits remaining")
except GrowFlowBookingError as e:
print(f"API error: {e}")
License
MIT
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
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 growflowbooking_client-1.1.0.tar.gz.
File metadata
- Download URL: growflowbooking_client-1.1.0.tar.gz
- Upload date:
- Size: 22.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65d55a54501e06d51bd8014b9decb6e68807f4be5a23eb0377ac45471055dd8b
|
|
| MD5 |
08c68620302292a5d883413a6b55ace5
|
|
| BLAKE2b-256 |
5feccee3a77b522ab8dc1f2d515009943074b5f7f04d7223a0a33d06c2e725d1
|
File details
Details for the file growflowbooking_client-1.1.0-py3-none-any.whl.
File metadata
- Download URL: growflowbooking_client-1.1.0-py3-none-any.whl
- Upload date:
- Size: 20.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4b7070f0c10b6a12886893020fff0d6351ea589d472abeca9953819ddbb0499
|
|
| MD5 |
b7361d7de3340c0e8931459c5a235c15
|
|
| BLAKE2b-256 |
ae1eaeeaa9c182664bf62c62ef3c244f9346fa1711ecfde8f800f8093a4da444
|