Skip to main content

sitegpt

Official SiteGPT SDK for Python — a small, dependable, zero-dependency client for the SiteGPT API v2 (standard library only, Python 3.9+).

  • Envelope-aware — the API responds with { ok, data, meta }; the SDK returns data directly (plain dicts/lists) and raises a SiteGPTError (with the API's error code, message, and actionable hint) whenever ok is false.
  • Full API reach — convenience methods cover the highest-value groups (chatbots, knowledge, conversations, leads, messages, onboarding); every one of the 119 API v2 operations is reachable through request().

Install

pip install sitegpt

Quickstart

Create an API token in the SiteGPT dashboard (Settings → API tokens), then:

import os

from sitegpt import SiteGPT

sitegpt = SiteGPT(api_token=os.environ["SITEGPT_API_TOKEN"])

# List your chatbots
chatbots = sitegpt.chatbots.list()["chatbots"]
chatbot_id = chatbots[0]["id"]

# Add knowledge to a chatbot
sitegpt.knowledge.add_links(
    chatbot_id, urls=["https://example.com/docs/getting-started"]
)

# Send a chat message (starts a new conversation)
reply = sitegpt.messages.send(chatbot_id, message="What are your pricing plans?")

# Review conversations and captured leads
conversations = sitegpt.conversations.list(chatbot_id, limit=20)
leads = sitegpt.leads.list(chatbot_id)

Agent onboarding bootstrap (no token required)

The onboarding bootstrap is a public endpoint — an AI agent can provision a SiteGPT workspace with no credentials at all, and the response carries the temporary workspace token to use for everything that follows:

from sitegpt import SiteGPT

# No API token yet — the bootstrap endpoint is public:
bootstrap = SiteGPT()
started = bootstrap.onboarding.start(websiteUrl="https://example.com")

# The response includes a temporary workspace token:
sitegpt = SiteGPT(api_token=started["apiToken"])
sitegpt.knowledge.document_stats(started["workspace"]["chatbotId"])

health() is public too; every other endpoint responds 401 until an api_token is set.

Error handling

from sitegpt import SiteGPT, SiteGPTError

try:
    sitegpt.chatbots.get("nonexistent-id")
except SiteGPTError as error:
    print(error.status)      # HTTP status, e.g. 404
    print(error.code)        # machine-readable code, e.g. NOT_FOUND
    print(error.message)     # human-readable message
    print(error.hint)        # actionable next step, when the API provides one
    print(error.request_id)  # for support and debugging

Convenience namespaces

Namespace Methods
sitegpt.chatbots list, get, create, update, delete, dashboard
sitegpt.knowledge list_documents, get_document, update_document, delete_document, delete_documents, document_stats, resync_documents, add_links, add_website, add_sitemap, add_youtube, set_text, list_sources, get_source, create_source, update_source, revoke_source, ingest_source, list_sync_jobs, get_sync_job
sitegpt.conversations list, get, create, update, delete, escalate, switch_to_ai
sitegpt.leads list, get, update, delete, run_action
sitegpt.messages send, send_to_conversation, list, update
sitegpt.onboarding start, get_workspace, claim_workspace, delete_workspace

Plus sitegpt.me() and sitegpt.health().

Destructive operations require confirmation

The API requires confirm=true on delete-family endpoints, and the SDK keeps that intent explicit instead of confirming on your behalf: chatbots.delete, knowledge.delete_document, knowledge.delete_documents, knowledge.revoke_source, conversations.delete, and leads.delete take a confirm=True keyword argument and raise a CONFIRMATION_REQUIRED SiteGPTError client-side (before any request) without it:

sitegpt.conversations.delete(chatbot_id, thread_id, confirm=True)
sitegpt.chatbots.delete(chatbot_id, confirm=True)

Body fields and query filters are passed as keyword arguments using the API's own field names (camelCase, exactly as documented in the OpenAPI document):

sitegpt.knowledge.list_documents(chatbot_id, limit=10, source=["WEBSITE"])
sitegpt.knowledge.get_document(chatbot_id, document_id, includeContent=True)

Every other endpoint: request()

# Custom responses, personas, instructions, settings, members, tags, billing…
personas = sitegpt.request(f"/api/v2/chatbots/{chatbot_id}/personas")

sitegpt.request(
    f"/api/v2/chatbots/{chatbot_id}/settings",
    method="PATCH",
    body={"general": {"title": "Support Bot"}},
)

request_with_meta() additionally returns the envelope meta — including meta["nextCursor"] for pagination:

data, meta = sitegpt.request_with_meta(
    f"/api/v2/chatbots/{chatbot_id}/conversations", query={"limit": 50}
)
if meta.get("nextCursor"):
    more = sitegpt.conversations.list(chatbot_id, cursor=meta["nextCursor"])

Custom base URL

base_url defaults to https://sitegpt.ai and only needs to change if SiteGPT gives you a different API origin.

Related

License

MIT © SiteGPT

Download files

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

Source Distribution

sitegpt-0.1.0.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

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

sitegpt-0.1.0-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file sitegpt-0.1.0.tar.gz.

File metadata

  • Download URL: sitegpt-0.1.0.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.11

File hashes

Hashes for sitegpt-0.1.0.tar.gz
Algorithm Hash digest
SHA256 62b09075f9ae827aa0a41a6f45ae194d985b0373e753d296854b5d40c89c4c73
MD5 3ba3ca9bc6fd5ca6e55a0b4a3eed5119
BLAKE2b-256 1a419f929c7f05208818cb78d6db259d78820636c3e4777b8d3d27d9c6f5f98c

See more details on using hashes here.

File details

Details for the file sitegpt-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sitegpt-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.11

File hashes

Hashes for sitegpt-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ed68fddc1596dd78085a21c2f931cb22c85670aa462962e9ba29c1a3abb16b0b
MD5 28a06f9962b6813434f7d8dd51336c5f
BLAKE2b-256 9e0cbbc4e1dbdd87cddd17f9940f58e17de162aeafaf22be2fa2c9e5ff10ea8d

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.0

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page