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.

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

Contributions are welcome! See CONTRIBUTING.md for guidelines.

License

GPL-3.0-or-later. See COPYING 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.1.tar.gz (23.6 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.1-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: helpscout_mailbox-1.0.1.tar.gz
  • Upload date:
  • Size: 23.6 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.1.tar.gz
Algorithm Hash digest
SHA256 2534c691e7e4573ac1d3b44577cae812e5c321c67f7b0880e8766bf29a86d26f
MD5 dd827dbb0ea01bb57e801bd048a76c10
BLAKE2b-256 df214dcd46099528a18d443d8ab9adf0e3f9d5d5bd339f9d56a5b6049a1fd6a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for helpscout_mailbox-1.0.1.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.1-py3-none-any.whl.

File metadata

File hashes

Hashes for helpscout_mailbox-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 abafaeea15eeb87c4fa4188016d8ae16631a548153e9914986503849ae1f3787
MD5 005b07804a08a9a53c4437ab289eeaa0
BLAKE2b-256 fab3faa7327344461345eb3a9667e0f76e12baa0967c10131c53945fc184b860

See more details on using hashes here.

Provenance

The following attestation bundles were made for helpscout_mailbox-1.0.1-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