synquic-slide
Official Python SDK for the Slide API
Slide is a multichannel customer engagement platform. Use this SDK to send WhatsApp messages, trigger emails, place AI voice calls, manage contacts, query Shopify orders, and more.
Supports both sync and async usage. Fully typed with Python type hints.
Installation
pip install synquic-slide
Requires Python 3.9+.
Getting Your API Key
- Log in to your Slide dashboard
- Go to Settings → API Keys
- Click Create API Key
- Select the scopes you need (e.g.
email:send,whatsapp:send,voice:calls:write) - Copy the key — it starts with
sk_live_and is shown only once
# .env
SLIDE_API_KEY=sk_live_your_key_here
Quick Start
import os
from synquic_slide import SlideClient
slide = SlideClient(api_key=os.environ["SLIDE_API_KEY"])
# Send a WhatsApp template
msg = slide.whatsapp.send_template(
to="+919876543210",
template_name="order_shipped",
language_code="en",
)
print(msg["wamid"])
# Send a transactional email
slide.email.send(
recipient={"to": "customer@example.com", "firstName": "Priya"},
template_id="tmpl_order_confirm",
from_name="Acme Store",
from_email="orders@acme.com",
variables={"orderId": "#1042", "total": "₹2,499"},
)
# Initiate an outbound AI voice call
call = slide.voice.initiate_outbound_call(
agent_id="agent_abc123",
to_number="+919876543210",
call_context={"customerName": "Priya", "orderId": "#1042"},
)
print(call["id"], call["status"])
Async Usage
import asyncio
import os
from synquic_slide import AsyncSlideClient
async def main():
async with AsyncSlideClient(api_key=os.environ["SLIDE_API_KEY"]) as slide:
contacts = await slide.contacts.list(page=1, limit=50)
print(contacts["meta"]["total"])
msg = await slide.whatsapp.send_template(
to="+919876543210",
template_name="order_update",
language_code="en",
)
print(msg["wamid"])
asyncio.run(main())
Resources
Contacts
# List contacts
result = slide.contacts.list(page=1, limit=50, search="priya")
result["data"] # list of contacts
result["meta"]["total"]
Scope: contacts:read
# Send an email
slide.email.send(
recipient={"to": "user@example.com", "firstName": "Rahul"},
template_id="tmpl_welcome",
from_name="Acme",
from_email="hello@acme.com",
subject="Welcome!", # optional override
reply_to="support@acme.com", # optional
variables={"coupon": "SAVE20"},
)
# List templates
templates = slide.email.list_templates()
# Get a template
tmpl = slide.email.get_template("tmpl_welcome")
# List contacts
contacts = slide.email.list_contacts(page=1, search="rahul")
# Create / update a contact
slide.email.upsert_contact(
email="user@example.com",
first_name="Rahul",
phone="+919876543210",
tags=["vip", "customer"],
custom_fields={"city": "Mumbai"},
)
Scopes: email:send · email:templates:read · email:contacts:read · email:contacts:write
# Send a template
sent = slide.whatsapp.send_template(
to="+919876543210",
template_name="order_shipped",
language_code="en",
components=[
{
"type": "body",
"parameters": [
{"type": "text", "text": "#1042"},
{"type": "text", "text": "Delhivery"},
],
}
],
)
# Upload header media
with open("banner.jpg", "rb") as f:
media = slide.whatsapp.upload_header_media(
file=f.read(),
filename="banner.jpg",
mime_type="image/jpeg",
expected_format="IMAGE",
)
# Read message logs
logs = slide.whatsapp.list_logs(direction="outbound", status="delivered")
# List templates
templates = slide.whatsapp.list_templates(status="APPROVED", category="UTILITY")
Scopes: whatsapp:send · whatsapp:logs:read · whatsapp:templates:read
profile = slide.instagram.get_profile()
convos = slide.instagram.list_conversations(page=1, limit=20)
slide.instagram.send_message(
recipient_igsid="123456789",
message="Thanks for reaching out!",
)
insights = slide.instagram.get_insights(period="day", since="2024-01-01", until="2024-01-31")
Scopes: instagram:messages:read · instagram:messages:send · instagram:insights:read
Shopify
results = slide.shopify.search_products(q="running shoes", limit=10)
types = slide.shopify.get_product_types()
product = slide.shopify.get_product("gid://shopify/Product/123")
collections = slide.shopify.list_collections()
items = slide.shopify.get_collection_products("col_789", limit=50)
order = slide.shopify.get_order_status(identifier="#1042")
history = slide.shopify.get_customer_orders(identifier="+919876543210")
discount = slide.shopify.validate_discount(code="SAVE20")
Scopes: shopify:products:read · shopify:orders:read · shopify:discounts:read
Voice
agents = slide.voice.list_agents()
agent = slide.voice.get_agent("agent_abc123")
call = slide.voice.initiate_outbound_call(
agent_id="agent_abc123",
to_number="+919876543210",
call_context={"customerName": "Priya"},
)
calls = slide.voice.list_calls(status="COMPLETED", direction="OUTBOUND")
detail = slide.voice.get_call("call_xyz")
recording = slide.voice.get_call_recording("call_xyz") # URL valid 1 hour
analytics = slide.voice.get_analytics(from_date="2024-01-01", to_date="2024-01-31")
Scopes: voice:agents:read · voice:calls:read · voice:calls:write
Error Handling
from synquic_slide import (
SlideError,
SlideAuthError,
SlideScopeError,
SlideNotFoundError,
SlideValidationError,
)
try:
slide.email.send(...)
except SlideAuthError:
print("Invalid API key — check SLIDE_API_KEY")
except SlideScopeError as e:
print(f"Missing scope: {e}") # e.g. "email:send"
except SlideValidationError as e:
print(f"Bad request: {e.body}")
except SlideNotFoundError:
print("Resource not found")
except SlideError as e:
print(f"HTTP {e.status_code}: {e}")
Context Manager
# Sync
with SlideClient(api_key="sk_live_...") as slide:
slide.contacts.list()
# Async
async with AsyncSlideClient(api_key="sk_live_...") as slide:
await slide.contacts.list()
License
MIT © Synquic
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 synquic_slide-0.1.0.tar.gz.
File metadata
- Download URL: synquic_slide-0.1.0.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f10dbd121b85f0cf1cd28bf9925821227fdbd4b1887e910815477994115b210
|
|
| MD5 |
002fe86e9d7846eba5a1abf43c9f4756
|
|
| BLAKE2b-256 |
c044c8e59bce090546f8e6c003464ed51207ff5f9af00a3927fe2c9ac6d4a1fa
|
File details
Details for the file synquic_slide-0.1.0-py3-none-any.whl.
File metadata
- Download URL: synquic_slide-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e939a0a21be75ccd0ae66b60be4b03c2a7b190e0b6541a96a4e3b79fa6d2245b
|
|
| MD5 |
dc8feee37535b22a35cb4faf3ebd8c9c
|
|
| BLAKE2b-256 |
f045d6b0b53a432d17a54b8881819b58c13832d2d3b24def6efcb649fb3b8682
|