You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Inbox API commands are namespaced under hs inbox .... Uses OAuth2 client credentials for authentication.
Authentication
The CLI uses HelpScout's OAuth2 client credentials flow. You'll need an App ID and App Secret from your HelpScout app settings (Your Profile > My Apps > Create App).
Interactive login (recommended)
hs inbox auth login
This prompts for your App ID and App Secret, validates them against the API, and stores them securely in your OS keyring.
Non-interactive setup
hs inbox config set --inbox-app-id your-app-id --inbox-app-secret your-app-secret
hs inbox config set --inbox-default-mailbox 12345 --format json
hs inbox config set --inbox-pii-mode customers --inbox-pii-allow-unredacted
An allowlist-based permission system that restricts which Inbox operations are permitted. When HS_INBOX_PERMISSIONS is set, only explicitly granted resource:operation pairs are allowed. When unset, everything is allowed (backward compatible).
# Read-only access to conversations and customers
HS_INBOX_PERMISSIONS="conversations:read,customers:read"# Read-only across all resources
HS_INBOX_PERMISSIONS="*:read"# Full access to conversations, read-only everything else
HS_INBOX_PERMISSIONS="conversations:*,*:read"# Unrestricted (explicit)
HS_INBOX_PERMISSIONS="*:*"
# Show current policy, source, and per-command allow/deny table
hs inbox permissions
# With a policy set
HS_INBOX_PERMISSIONS="conversations:read" hs inbox permissions
Denied commands
When a command is denied:
Error: permission denied: conversations:write not allowed
Current policy: conversations:read,customers:read
To allow, add conversations:write to HS_INBOX_PERMISSIONS
Commands
Config
# Set one or more config values
hs inbox config set --inbox-app-id xxx --inbox-app-secret yyy
hs inbox config set --inbox-default-mailbox 12345
hs inbox config set --format json
hs inbox config set --inbox-pii-mode customers
hs inbox config set --inbox-pii-allow-unredacted
# Disable/unset PII features explicitly
hs inbox config set --inbox-pii-allow-unredacted=false
hs inbox config set --inbox-pii-mode off --inbox-pii-allow-unredacted=false
# View all config values
hs inbox config get
# View a single value
hs inbox config get inbox-app-id
# Print config file path
hs inbox config path
config set flags
Flag
Type
Description
--inbox-app-id
string
HelpScout App ID
--inbox-app-secret
string
HelpScout App Secret
--inbox-default-mailbox
int
Default mailbox ID
--format
string
Output format: table, json, json-full, csv
--inbox-pii-mode
string
PII redaction mode: off, customers, all
--inbox-pii-allow-unredacted
bool
Allow per-request --unredacted override
--docs-api-key
string
HelpScout Docs API key
Mailboxes
# List all mailboxes
hs inbox mailboxes list
hs inbox mb list # alias# Get mailbox details
hs inbox mailboxes get 12345
# Mailbox folders, custom fields, and routing
hs inbox mailboxes folders list 12345
hs inbox mailboxes custom-fields list 12345
hs inbox mailboxes routing get 12345
hs inbox mailboxes routing update 12345 --json '{"enabled":true}'# JSON output
hs inbox mailboxes list --format json
# Fetch all pages
hs inbox mailboxes list --no-paginate
mailboxes routing update flags
Flag
Type
Required
Description
--json
string
yes
Routing update payload as JSON object
Conversations
# List conversations
hs inbox conversations list
hs inbox conv list # alias# Filter by status
hs inbox conversations list --status closed
hs inbox conversations list --status pending
hs inbox conversations list --status all
# Filter by mailbox
hs inbox conversations list --mailbox 12345
# Advanced filters
hs inbox conversations list --folder 12 --tag billing --assigned-to 99
hs inbox conversations list --modified-since "2026-01-01T00:00:00Z"
hs inbox conversations list --number 23053
# Search
hs inbox conversations list --query "billing issue"# Sort and custom fields
hs inbox conversations list --sort-field createdAt --sort-order desc
hs inbox conversations list --custom-fields-by-ids "10:foo,11:bar"# Embed threads in response
hs inbox conversations list --embed threads
# Get conversation details
hs inbox conversations get 67890
hs inbox conversations get 67890 --embed threads
# Create a conversation
hs inbox conversations create \
--mailbox 12345 \
--subject "New issue" \
--customer user@example.com \
--body "Description of the issue" \
--type email \
--status active \
--tags "bug,urgent" \
--assign-to 999 \
--created-at "2026-01-02T15:04:05Z" \
--imported \
--auto-reply \
--field "10=foo" \
--field "11=bar"# Update a conversation
hs inbox conversations update 67890 --subject "Updated subject"
hs inbox conversations update 67890 --status closed
# Delete a conversation
hs inbox conversations delete 67890
# Set conversation tags
hs inbox conversations tags set 67890 --tag vip,bug
# Set conversation custom fields
hs inbox conversations fields set 67890 --field "10=foo" --field "11=bar"# Snooze and unsnooze
hs inbox conversations snooze set 67890 --until "2026-02-20T00:00:00Z"
hs inbox conversations snooze clear 67890
# Upload/list/get/delete conversation attachments
hs inbox conversations attachments upload 67890 --thread-id 123 --file ./invoice.pdf --filename report.pdf --mime-type application/pdf
hs inbox conversations attachments list 67890
hs inbox conversations attachments get 67890 555
hs inbox conversations attachments delete 67890 555
conversations list flags
Flag
Type
Description
--status
string
Filter: active, closed, pending, spam, all (default: active)
# List customers
hs inbox customers list
hs inbox cust list # alias# Search customers
hs inbox customers list --query "alice@example.com"# Advanced filters
hs inbox customers list --mailbox 12345 --first-name Alice --last-name Smith
hs inbox customers list --modified-since "2026-01-01T00:00:00Z"
hs inbox customers list --sort-field firstName --sort-order asc
# Get customer details
hs inbox customers get 11111
# Create a customer
hs inbox customers create \
--first-name Alice \
--last-name Smith \
--email alice@example.com \
--phone "555-1234" \
--job-title "Engineer" \
--location "Paris" \
--gender female \
--background "VIP customer" \
--age "35" \
--photo-url "https://example.com/photo.jpg" \
--organization-id 42
# Create with raw JSON (overrides all flags, supports nested objects)
hs inbox customers create \
--json '{"firstName":"Alice","emails":[{"type":"work","value":"alice@example.com"}]}'# Update a customer
hs inbox customers update 11111 --first-name "Alicia"# Overwrite a customer (same flags as create)
hs inbox customers overwrite 11111 --first-name "Alice"# Delete a customer
hs inbox customers delete 11111
# Delete asynchronously (returns 202)
hs inbox customers delete 11111 --async
customers list flags
Flag
Type
Description
--query
string
Search query (e.g. email)
--mailbox
string
Filter by mailbox ID
--first-name
string
Filter by first name
--last-name
string
Filter by last name
--modified-since
string
Filter by last-modified timestamp
--sort-field
string
Sort field
--sort-order
string
Sort direction
--embed
string
Embed sub-resources (deprecated)
customers get flags
Flag
Type
Description
--embed
string
Embed sub-resources (deprecated)
customers create flags
Also used by overwrite.
Flag
Type
Required
Description
--first-name
string
yes
First name
--last-name
string
Last name
--email
string
Email address
--phone
string
Phone number
--job-title
string
Job title
--background
string
Background info
--location
string
Location
--gender
string
Gender: male, female, unknown
--age
string
Age
--photo-url
string
Photo URL
--organization-id
int
Organization ID
--json
string
Raw JSON body (overrides all flags)
customers update flags
Flag
Type
Description
--first-name
string
First name
--last-name
string
Last name
--phone
string
Phone number
customers delete flags
Flag
Type
Description
--async
bool
Delete asynchronously (returns 202)
Tags
# List tags
hs inbox tags list
# Get tag details
hs inbox tags get 123
Users
# List users
hs inbox users list
hs inbox users list --email agent@example.com --mailbox 12345
# Get user details
hs inbox users get 22222
hs inbox users me
hs inbox users delete 22222
# User statuses
hs inbox users status list
hs inbox users status get 22222
hs inbox users status set 22222 --status away
hs inbox users status set 22222 --json '{"status":"away","autoReply":"I am out of office"}'
users list flags
Flag
Type
Description
--email
string
Filter by email
--mailbox
string
Filter by mailbox ID
users status set flags
Flag
Type
Description
--status
string
Status value
--json
string
Full status payload as JSON
Teams
# List teams and team members
hs inbox teams list
hs inbox teams members 77
# List workflows
hs inbox workflows list
hs inbox wf list # alias
hs inbox workflows list --mailbox-id 12345 --type manual
# Activate or deactivate a workflow
hs inbox workflows update-status 33333 --status inactive
hs inbox workflows update-status 33333 --status active
# Run a workflow on specific conversations
hs inbox workflows run 33333 --conversation-ids 100,200,300
workflows list flags
Flag
Type
Description
--mailbox-id
int
Filter by mailbox ID
--type
string
Filter by workflow type
workflows update-status flags
Flag
Type
Required
Description
--status
string
yes
Status: active or inactive
workflows run flags
Flag
Type
Required
Description
--conversation-ids
strings
yes
Conversation IDs (comma-separated)
Webhooks
# List webhooks
hs inbox webhooks list
hs inbox wh list # alias# Get webhook details
hs inbox webhooks get 44444
# Create a webhook
hs inbox webhooks create \
--url https://example.com/hook \
--events "convo.created,convo.updated" \
--secret my-webhook-secret \
--payload-version V2 \
--mailbox-ids 12345,67890 \
--notification \
--label "Primary Hook"# Update a webhook
hs inbox webhooks update 44444 \
--url https://example.com/new-hook \
--payload-version V1 \
--mailbox-ids 12345 \
--notification=false
# Delete a webhook
hs inbox webhooks delete 44444
webhooks create flags
Flag
Type
Required
Description
--url
string
yes
Webhook URL
--events
strings
yes
Events to subscribe to (comma-separated)
--secret
string
yes
Webhook secret
--payload-version
string
Payload version: V1, V2
--mailbox-ids
ints
Mailbox IDs to scope (comma-separated)
--notification
bool
Send lightweight notification payloads
--label
string
Human-readable label
webhooks update flags
Same flags as create, none required.
Saved Replies
# List and get saved replies
hs inbox saved-replies list --mailbox-id 12345
hs inbox saved-replies list --query "welcome"
hs inbox saved-replies get 44
# Create a saved reply
hs inbox saved-replies create --mailbox-id 12345 --name "Welcome" --body "Hi there" --subject "Welcome!" --private
# Update a saved reply
hs inbox saved-replies update 44 --name "Welcome v2" --body "Updated greeting" --subject "Welcome back!"# Delete
hs inbox saved-replies delete 44
saved-replies list flags
Flag
Type
Description
--mailbox-id
string
Filter by mailbox ID
--query
string
Search query
saved-replies create flags
Flag
Type
Required
Description
--mailbox-id
string
yes
Mailbox ID
--name
string
yes
Reply name
--body
string
yes
Reply body text
--subject
string
Reply subject
--private
bool
Mark as private
--json
string
Full payload as JSON (overrides flags)
saved-replies update flags
Flag
Type
Description
--mailbox-id
string
Mailbox ID
--name
string
Reply name
--body
string
Reply body text
--subject
string
Reply subject
--private
bool
Mark as private
--json
string
Full payload as JSON (overrides flags)
Tools
Workflow commands that aggregate data from the Inbox API. Namespaced under hs inbox tools ....
# Team overview — conversation counts per agent
hs inbox tools briefing
# Filter by status
hs inbox tools briefing --status pending
hs inbox tools briefing --status all
# Agent summary — list conversations for a specific user
hs inbox tools briefing --assigned-to 531600
# Agent briefing with full thread data
hs inbox tools briefing --assigned-to 531600 --embed threads
# JSON output (clean — no HAL _embedded/_links)
hs inbox tools briefing --assigned-to 531600 --embed threads --format json
Conversation list (same columns as conversations list)
Agent + threads
briefing --assigned-to <id> --embed threads
Conversation list with thread count and last activity
When --format json is used with --embed threads, the output is a JSON array where each conversation has a top-level threads array with full thread data. HAL envelope (_embedded, _links) is stripped from both conversation and thread objects.