Skip to main content

Python client for the HelpScout Mailbox API v2

Project description

helpscout-mailbox

PyPI Python Versions License Tests

A Python client for the HelpScout Mailbox API v2.

Disclaimer: This package is unofficial and not associated with or endorsed by HelpScout. It is provided "as is" without warranty of any kind. Please use GitHub Discussions for support — there is no guarantee that Connectify staff will respond.

Features

  • OAuth2 client-credentials authentication with automatic token refresh
  • Retry logic for rate limiting (429), server errors (5xx), and transient failures
  • Conversation management: search, read, snooze, tag
  • Thread operations: notes, replies, drafts, attachments
  • Clean API with type hints and comprehensive docstrings

Installation

pip install helpscout-mailbox

Quick Start

import os
from datetime import date, datetime, timedelta, timezone
from helpscout_mailbox import HelpScoutClient

# Set credentials (create app at HelpScout → Your Profile → My Apps)
os.environ["HELPSCOUT_APP_ID"] = "your-app-id"
os.environ["HELPSCOUT_APP_SECRET"] = "your-app-secret"

# Initialize client (fetches OAuth2 token automatically)
client = HelpScoutClient()

# Search conversations
for conv in client.search_conversations('subject:"Invoice"', since=date(2026, 6, 1)):
    print(f"#{conv['number']}: {conv['subject']}")

# Get conversation details
conversation = client.get_conversation(12345)
print(conversation["subject"])

# Add a note
client.add_note(12345, "Processed invoice #INV-001")

# Snooze until tomorrow
tomorrow = datetime.now(timezone.utc) + timedelta(days=1)
client.snooze_conversation(12345, tomorrow)

# Add tags
client.add_tags(12345, ["billing", "processed"])

API Coverage

Conversations

  • search_conversations(query, since) - Search with client-side date filtering
  • get_conversation(conversation_id) - Fetch conversation details
  • snooze_conversation(conversation_id, snoozed_until) - Snooze conversation
  • add_tags(conversation_id, tags) - Add tags (preserves existing)

Threads

  • conversation_threads(conversation_id) - List threads (cached)
  • conversation_body(conversation_id) - Concatenated HTML body
  • add_note(conversation_id, text) - Create note thread
  • update_thread_text(conversation_id, thread_id, text) - Update thread body
  • create_reply(conversation_id, customer_id, text, draft) - Create reply
  • send_draft(conversation_id, thread_id) - Send draft reply

Attachments

  • attachment_data(conversation_id, attachment_id) - Download attachment bytes

Environment Variables

Variable Required Description
HELPSCOUT_APP_ID Yes OAuth2 app ID (from My Apps)
HELPSCOUT_APP_SECRET Yes OAuth2 app secret (from My Apps)

Authentication

The client uses OAuth2 client-credentials flow. Create an app at HelpScout → Your Profile → My Apps:

  1. Click "Create My App"
  2. Give it a name (e.g., "Invoice Processor")
  3. Copy the App ID and App Secret
  4. Set them as environment variables

The client automatically:

  • Fetches access tokens on initialization
  • Refreshes tokens before expiry
  • Retries on 401 with fresh token

Error Handling

All API errors raise HelpScoutError:

from helpscout_mailbox import HelpScoutClient, HelpScoutError

try:
    client = HelpScoutClient()
    client.get_conversation(99999)
except HelpScoutError as e:
    print(f"API error: {e}")

The client automatically retries:

  • 429 rate limits (respects Retry-After header)
  • 5xx server errors (exponential backoff)
  • Transport failures (connection resets, timeouts)

Documentation

Full API documentation: https://connectify.github.io/helpscout-mailbox/

HelpScout API reference: https://developer.helpscout.com/mailbox-api/

Development

# Clone repository
git clone https://github.com/Connectify/helpscout-mailbox.git
cd helpscout-mailbox

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run linters
pre-commit run --all-files

# Build documentation
pip install -e ".[docs]"
pdoc -o docs/ helpscout_mailbox

Contributing

Patches via pull request are welcome — please file an issue first to discuss the change before submitting a PR. Issues are not for technical support; use Discussions for that. See CONTRIBUTING.md for guidelines.

License

BSD-3-Clause. See LICENSE for details.

Support

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

helpscout_mailbox-1.0.2.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

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

helpscout_mailbox-1.0.2-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file helpscout_mailbox-1.0.2.tar.gz.

File metadata

  • Download URL: helpscout_mailbox-1.0.2.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for helpscout_mailbox-1.0.2.tar.gz
Algorithm Hash digest
SHA256 ee1b9ffc6776574f3882de9e437fa7d2c9e3ef88fa394b1ca5e8f1cec9d4c260
MD5 b7611722f927946e0082dabb2893c98f
BLAKE2b-256 9fefd54c462674267bff35e9a2f5b1940d19cf12ec1e9a61c1b729fc0247abaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for helpscout_mailbox-1.0.2.tar.gz:

Publisher: publish.yml on Connectify/helpscout-mailbox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file helpscout_mailbox-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for helpscout_mailbox-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 67a7afbefe11e13cf3071123d2580416a91ce042a964c845b959d7016b7f4b4c
MD5 d08a341005c5efcd35668f713cbc09e3
BLAKE2b-256 3bc27bca43b92bcd34c51122f323d7c5b07fb79ada8bc789cd2b890a99ff59fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for helpscout_mailbox-1.0.2-py3-none-any.whl:

Publisher: publish.yml on Connectify/helpscout-mailbox

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page