# Get Tool Output
Source: https://docs.heyhumm.ai/api-reference/cache/get-tool-output
https://analyst.heyhumm.ai/api/openapi.json get /cache/tool-output/{cache_key}
Retrieve cached tool output data by cache key.
This endpoint allows users to fetch complete, untruncated tool outputs
that were cached during tool execution.
Requires READ permission on ANALYSIS resources.
# Apply Command Editor Draft Route
Source: https://docs.heyhumm.ai/api-reference/commands/apply-command-editor-draft-route
https://analyst.heyhumm.ai/api/openapi.json post /commands/{command_id}/editor/draft/{draft_id}/apply
Apply an approved command editor draft.
# Archive Command Editor Thread
Source: https://docs.heyhumm.ai/api-reference/commands/archive-command-editor-thread
https://analyst.heyhumm.ai/api/openapi.json post /commands/{command_id}/editor/thread/{thread_id}/archive
Archive a command editor workflow thread.
# Create Command
Source: https://docs.heyhumm.ai/api-reference/commands/create-command
https://analyst.heyhumm.ai/api/openapi.json post /commands
Create a new command.
Requires CREATE permission on ANALYSIS resources.
# Create Command Editor Thread
Source: https://docs.heyhumm.ai/api-reference/commands/create-command-editor-thread
https://analyst.heyhumm.ai/api/openapi.json post /commands/{command_id}/editor/thread
Create a persisted command editor workflow thread.
# Delete Command
Source: https://docs.heyhumm.ai/api-reference/commands/delete-command
https://analyst.heyhumm.ai/api/openapi.json delete /commands/{command_id}
Delete a command.
Requires DELETE permission on ANALYSIS resources.
# Get Command
Source: https://docs.heyhumm.ai/api-reference/commands/get-command
https://analyst.heyhumm.ai/api/openapi.json get /commands/{command_id}
Get a single command by ID.
Requires READ permission on ANALYSIS resources.
# Get Command Editor Draft Route
Source: https://docs.heyhumm.ai/api-reference/commands/get-command-editor-draft-route
https://analyst.heyhumm.ai/api/openapi.json get /commands/{command_id}/editor/draft/{draft_id}
Return the latest saved command editor draft.
# List Command Editor Threads
Source: https://docs.heyhumm.ai/api-reference/commands/list-command-editor-threads
https://analyst.heyhumm.ai/api/openapi.json get /commands/{command_id}/editor/thread
List persisted command editor workflow threads for this command.
# List Command Versions
Source: https://docs.heyhumm.ai/api-reference/commands/list-command-versions
https://analyst.heyhumm.ai/api/openapi.json get /commands/{command_id}/history
List historical versions for a command.
Requires READ permission on ANALYSIS resources.
# List Commands
Source: https://docs.heyhumm.ai/api-reference/commands/list-commands
https://analyst.heyhumm.ai/api/openapi.json get /commands
List commands for an organization.
Requires READ permission on ANALYSIS resources.
# Post Command Editor Draft Turn
Source: https://docs.heyhumm.ai/api-reference/commands/post-command-editor-draft-turn
https://analyst.heyhumm.ai/api/openapi.json post /commands/{command_id}/editor/draft/turn
Create or revise a command edit draft without mutating the command.
# Post Command Editor Draft Turn Stream
Source: https://docs.heyhumm.ai/api-reference/commands/post-command-editor-draft-turn-stream
https://analyst.heyhumm.ai/api/openapi.json post /commands/{command_id}/editor/draft/turn/stream
Stream a command editor draft turn for assistant-ui.
# Restore Command Version
Source: https://docs.heyhumm.ai/api-reference/commands/restore-command-version
https://analyst.heyhumm.ai/api/openapi.json post /commands/{command_id}/history/{version_id}/restore
Restore a command from a historical version snapshot.
Requires UPDATE permission on ANALYSIS resources.
# Update Command
Source: https://docs.heyhumm.ai/api-reference/commands/update-command
https://analyst.heyhumm.ai/api/openapi.json put /commands/{command_id}
Update a command (name and/or content).
Requires UPDATE permission on ANALYSIS resources.
# Create Context Source
Source: https://docs.heyhumm.ai/api-reference/context-sources/create-context-source
https://config.heyhumm.ai/api/openapi.json post /api/context-source
# Create Github Config
Source: https://docs.heyhumm.ai/api-reference/context-sources/create-github-config
https://config.heyhumm.ai/api/openapi.json post /api/context-source/{context_source_id}/config
# Delete Context Source
Source: https://docs.heyhumm.ai/api-reference/context-sources/delete-context-source
https://config.heyhumm.ai/api/openapi.json delete /api/context-source/{context_source_id}
# Delete Github Config
Source: https://docs.heyhumm.ai/api-reference/context-sources/delete-github-config
https://config.heyhumm.ai/api/openapi.json delete /api/context-source/{context_source_id}/config/{config_id}
# Get Context Source
Source: https://docs.heyhumm.ai/api-reference/context-sources/get-context-source
https://config.heyhumm.ai/api/openapi.json get /api/context-source/{context_source_id}
# Get Context Sources
Source: https://docs.heyhumm.ai/api-reference/context-sources/get-context-sources
https://config.heyhumm.ai/api/openapi.json get /api/context-source
# Get Github Config
Source: https://docs.heyhumm.ai/api-reference/context-sources/get-github-config
https://config.heyhumm.ai/api/openapi.json get /api/context-source/{context_source_id}/config/{config_id}
# Get Github Configs
Source: https://docs.heyhumm.ai/api-reference/context-sources/get-github-configs
https://config.heyhumm.ai/api/openapi.json get /api/context-source/{context_source_id}/config
# Reembed Context Source
Source: https://docs.heyhumm.ai/api-reference/context-sources/reembed-context-source
https://config.heyhumm.ai/api/openapi.json post /api/context-source/{context_source_id}/reembed
# Update Context Source
Source: https://docs.heyhumm.ai/api-reference/context-sources/update-context-source
https://config.heyhumm.ai/api/openapi.json put /api/context-source/{context_source_id}
# Update Github Config
Source: https://docs.heyhumm.ai/api-reference/context-sources/update-github-config
https://config.heyhumm.ai/api/openapi.json put /api/context-source/{context_source_id}/config/{config_id}
# Bulk Update Entity Link Status
Source: https://docs.heyhumm.ai/api-reference/entity-links/bulk-update-entity-link-status
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/entity-links/bulk-status
Bulk update status (and optional confidence_score) for multiple entity links.
# Create Entity Link
Source: https://docs.heyhumm.ai/api-reference/entity-links/create-entity-link
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/entity-links
Create a new cross-source entity link.
# Get Entity Link
Source: https://docs.heyhumm.ai/api-reference/entity-links/get-entity-link
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/entity-links/{entity_link_id}
Get a specific entity link by ID.
# List Entity Links
Source: https://docs.heyhumm.ai/api-reference/entity-links/list-entity-links
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/entity-links
List entity links for an organization.
# Update Entity Link
Source: https://docs.heyhumm.ai/api-reference/entity-links/update-entity-link
https://config.heyhumm.ai/api/openapi.json put /api/organization/{organization_id}/entity-links/{entity_link_id}
Update status, confidence_score, or evidence for an entity link.
# Create Feedback
Source: https://docs.heyhumm.ai/api-reference/feedback/create-feedback
https://analyst.heyhumm.ai/api/openapi.json post /feedback
Create new feedback for a thread.
Supports three types of feedback:
1. Thread-level: Provide only thread_id (feedback on entire conversation)
2. Run-level: Provide thread_id + langsmith_run_id (feedback on specific step)
3. Trace-level: Provide thread_id + langsmith_trace_id (feedback on specific trace)
Requires CREATE permission on ANALYSIS resources.
# Delete Feedback
Source: https://docs.heyhumm.ai/api-reference/feedback/delete-feedback
https://analyst.heyhumm.ai/api/openapi.json delete /feedback/{feedback_id}
Delete a feedback entry.
Requires DELETE permission on ANALYSIS resources.
# Get Feedback By Id
Source: https://docs.heyhumm.ai/api-reference/feedback/get-feedback-by-id
https://analyst.heyhumm.ai/api/openapi.json get /feedback/{feedback_id}
Get a specific feedback entry by ID.
Requires READ permission on ANALYSIS resources.
# Get Thread Run Ids
Source: https://docs.heyhumm.ai/api-reference/feedback/get-thread-run-ids
https://analyst.heyhumm.ai/api/openapi.json get /feedback/thread/{thread_id}/run-ids
Get all available run IDs for a thread.
Requires READ permission on ANALYSIS resources.
# Update Feedback
Source: https://docs.heyhumm.ai/api-reference/feedback/update-feedback
https://analyst.heyhumm.ai/api/openapi.json put /feedback/{feedback_id}
Update a feedback entry.
Requires UPDATE permission on ANALYSIS resources.
# Bulk Update Integration Source Relationship Status
Source: https://docs.heyhumm.ai/api-reference/integration-sources/bulk-update-integration-source-relationship-status
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/relationships/bulk-status
Bulk update status (and optional score/evidence) for multiple relationships.
# Bulk Update Saas Association Status
Source: https://docs.heyhumm.ai/api-reference/integration-sources/bulk-update-saas-association-status
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/saas-associations/bulk-status
Bulk update status (and optional score/evidence) for SaaS associations.
# Create Integration Source
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-integration-source
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources
Create a new integration source.
# Create Integration Source Column
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-integration-source-column
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables/{table_id}/columns
Create a new column for an integration source table.
# Create Integration Source Database
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-integration-source-database
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases
Create a new database for an integration source.
# Create Integration Source Relationship
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-integration-source-relationship
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/relationships
Create a relationship between integration source tables.
# Create Integration Source Schema
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-integration-source-schema
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas
Create a new schema for an integration source database.
# Create Integration Source Table
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-integration-source-table
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables
Create a new table for an integration source schema.
# Create Saas Association
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-saas-association
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/saas-associations
Create a new SaaS association for an integration source.
# Create Saas Field
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-saas-field
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/saas-objects/{object_id}/saas-fields
Create a new SaaS field for a SaaS object.
# Create Saas Object
Source: https://docs.heyhumm.ai/api-reference/integration-sources/create-saas-object
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/saas-objects
Create a new SaaS object for an integration source.
# Delete Integration Source
Source: https://docs.heyhumm.ai/api-reference/integration-sources/delete-integration-source
https://config.heyhumm.ai/api/openapi.json delete /api/integration-sources/{source_id}
Delete an integration source.
# Delete Integration Source Database
Source: https://docs.heyhumm.ai/api-reference/integration-sources/delete-integration-source-database
https://config.heyhumm.ai/api/openapi.json delete /api/integration-sources/{source_id}/databases/{database_id}
Delete an integration source database.
# Delete Integration Source Schema
Source: https://docs.heyhumm.ai/api-reference/integration-sources/delete-integration-source-schema
https://config.heyhumm.ai/api/openapi.json delete /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}
Delete an integration source schema.
# Delete Integration Source Table
Source: https://docs.heyhumm.ai/api-reference/integration-sources/delete-integration-source-table
https://config.heyhumm.ai/api/openapi.json delete /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables/{table_id}
Delete an integration source table.
# Delete Saas Association
Source: https://docs.heyhumm.ai/api-reference/integration-sources/delete-saas-association
https://config.heyhumm.ai/api/openapi.json delete /api/integration-sources/{source_id}/saas-associations/{association_id}
Delete a SaaS association from an integration source.
# Delete Saas Field
Source: https://docs.heyhumm.ai/api-reference/integration-sources/delete-saas-field
https://config.heyhumm.ai/api/openapi.json delete /api/integration-sources/{source_id}/saas-objects/{object_id}/saas-fields/{field_id}
Delete a SaaS field.
# Delete Saas Object
Source: https://docs.heyhumm.ai/api-reference/integration-sources/delete-saas-object
https://config.heyhumm.ai/api/openapi.json delete /api/integration-sources/{source_id}/saas-objects/{object_id}
Delete a SaaS object and all its fields.
# Generate Column Description
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-column-description
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables/{table_id}/columns/{column_id}/generate-description
Generate an AI-powered description for a single column.
Analyzes column metadata and sample data to generate a concise,
agent-optimized description.
# Generate Database Description
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-database-description
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/generate-description
Generate an AI-powered description for a single database.
Analyzes database metadata, schema descriptions, and organization to generate
a concise, agent-optimized description.
Optionally generates missing schema/table/column descriptions first (cascade_schemas=True).
# Generate Database Schema Descriptions
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-database-schema-descriptions
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/generate-schema-descriptions
Generate AI-powered descriptions for all schemas in a database.
Analyzes schema metadata, table descriptions, and relationships to generate concise,
agent-optimized descriptions for schemas that don't have them
(or all schemas if overwrite_existing is True).
Optionally generates missing table/column descriptions first (cascade_tables=True).
# Generate Schema Description
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-schema-description
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/generate-description
Generate an AI-powered description for a single schema.
Analyzes schema metadata, table descriptions, and relationships to generate
a concise, agent-optimized description.
Optionally generates missing table/column descriptions first (cascade_tables=True).
# Generate Schema Table Descriptions
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-schema-table-descriptions
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/generate-table-descriptions
Generate AI-powered descriptions for all tables in a schema.
Analyzes table metadata, column descriptions, and relationships to generate concise,
agent-optimized descriptions for tables that don't have them
(or all tables if overwrite_existing is True).
Optionally generates missing column descriptions first (cascade_columns=True).
# Generate Source Database Descriptions
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-source-database-descriptions
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/generate-database-descriptions
Generate AI-powered descriptions for all databases in a source.
Analyzes database metadata, schema descriptions, and organization to generate concise,
agent-optimized descriptions for databases that don't have them
(or all databases if overwrite_existing is True).
Optionally generates missing schema/table/column descriptions first (cascade_schemas=True).
# Generate Source Description
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-source-description
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/generate-description
Generate an AI-powered description for an integration source.
Analyzes source metadata, database descriptions, and integration type to generate
a concise, agent-optimized description.
Optionally generates missing database/schema/table/column descriptions first
(cascade_databases=True).
# Generate Table Column Descriptions
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-table-column-descriptions
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables/{table_id}/generate-column-descriptions
Generate AI-powered descriptions for all columns in a table.
Analyzes column metadata and sample data to generate concise,
agent-optimized descriptions for columns that don't have them
(or all columns if overwrite_existing is True).
# Generate Table Description
Source: https://docs.heyhumm.ai/api-reference/integration-sources/generate-table-description
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables/{table_id}/generate-description
Generate an AI-powered description for a single table.
Analyzes table metadata, column descriptions, and relationships to generate
a concise, agent-optimized description.
Optionally generates missing column descriptions first (cascade_columns=True).
# Get Available Tools
Source: https://docs.heyhumm.ai/api-reference/integration-sources/get-available-tools
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/available-tools
Get all available tools for an integration source with their enablement status.
Returns both Composio essential tools and custom tools from the template,
along with whether each tool is currently enabled.
# Get Connector Fields
Source: https://docs.heyhumm.ai/api-reference/integration-sources/get-connector-fields
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/connector-types/{connector_type}/fields
Get required fields and metadata for a specific connector type.
# Get Field Options
Source: https://docs.heyhumm.ai/api-reference/integration-sources/get-field-options
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/fields/{field_name}/options
Fetch dynamic options for a configuration field using the connector's tools.
This endpoint uses the field's options_source configuration to execute a connector
tool and transform the results into options for select/multiselect fields.
# Get Integration Source
Source: https://docs.heyhumm.ai/api-reference/integration-sources/get-integration-source
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}
Get a specific integration source.
# Get Saas Catalog
Source: https://docs.heyhumm.ai/api-reference/integration-sources/get-saas-catalog
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/saas-catalog
Get SaaS catalog with objects and their fields for an integration source.
# Get Saas Field
Source: https://docs.heyhumm.ai/api-reference/integration-sources/get-saas-field
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/saas-objects/{object_id}/saas-fields/{field_id}
Get a specific SaaS field.
# Get Saas Object
Source: https://docs.heyhumm.ai/api-reference/integration-sources/get-saas-object
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/saas-objects/{object_id}
Get a specific SaaS object.
# Get Sync Status
Source: https://docs.heyhumm.ai/api-reference/integration-sources/get-sync-status
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/sync-status
Get Airbyte sync status for an integration source.
When status is 'running' or 'configuring', performs a live check against
the Airbyte API to detect completion (the background poller may not have
run yet).
# List All Integration Source Columns
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-all-integration-source-columns
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/columns
List all columns for an integration source across all tables.
AIDEV-NOTE: bulk-columns-endpoint; Single query to get all columns, avoids N+1 problem
when collecting point IDs for embedding operations.
Returns columns with their table_id for grouping. Inactive databases, schemas, and
tables are always excluded. Use active_only=True (default) to also exclude inactive
columns.
# List Connector Types
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-connector-types
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/connector-types
Get all available connector types with their metadata from the dynamic registry.
# List Integration Source Columns
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-integration-source-columns
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables/{table_id}/columns
List all columns for an integration source table.
# List Integration Source Databases
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-integration-source-databases
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/databases
List all databases for an integration source.
# List Integration Source Relationships
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-integration-source-relationships
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{integration_source_id}/relationships
List relationships for a given integration source.
# List Integration Source Schemas
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-integration-source-schemas
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/databases/{database_id}/schemas
List all schemas for an integration source database.
# List Integration Source Tables
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-integration-source-tables
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables
List all tables for an integration source schema.
# List Integration Sources
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-integration-sources
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources
List all integration sources accessible to the user.
# List Saas Associations
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-saas-associations
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/saas-associations
List all SaaS associations for an integration source, optionally filtered by from/to object IDs.
# List Saas Fields
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-saas-fields
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/saas-objects/{object_id}/saas-fields
List all SaaS fields for a SaaS object.
# List Saas Objects
Source: https://docs.heyhumm.ai/api-reference/integration-sources/list-saas-objects
https://config.heyhumm.ai/api/openapi.json get /api/integration-sources/{source_id}/saas-objects
List all SaaS objects for an integration source.
# Sync Integration Source Database Descriptions
Source: https://docs.heyhumm.ai/api-reference/integration-sources/sync-integration-source-database-descriptions
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/sync-descriptions
Queue jobs to sync descriptions for all schemas in an integration source database.
# Sync Integration Source Descriptions
Source: https://docs.heyhumm.ai/api-reference/integration-sources/sync-integration-source-descriptions
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/sync-descriptions
Queue a job to sync descriptions for an integration source schema.
# Sync Saas Integration Source Descriptions
Source: https://docs.heyhumm.ai/api-reference/integration-sources/sync-saas-integration-source-descriptions
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/saas-sync-descriptions
Sync descriptions for SaaS objects and fields in an integration source.
This endpoint triggers description generation for SaaS objects and their fields
using AI inference from sample data.
Options:
- force_regenerate: If true, regenerates descriptions even for fields that already have them
# Test Integration Connection
Source: https://docs.heyhumm.ai/api-reference/integration-sources/test-integration-connection
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/test
Queue a non-blocking connection test for an integration source.
# Trigger Integration Source Database Introspection
Source: https://docs.heyhumm.ai/api-reference/integration-sources/trigger-integration-source-database-introspection
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/databases/{database_id}/introspect
Trigger introspection for a specific database within an integration source.
This will queue a background job to discover and update the schema hierarchy for
only the specified database:
- Schemas within the database
- Tables within those schemas
- Columns within those tables
- Relationships within the database
Args:
source_id: Integration source ID
database_id: Database ID to introspect
force_refresh: Force refresh even if recently introspected
# Trigger Integration Source Embeddings
Source: https://docs.heyhumm.ai/api-reference/integration-sources/trigger-integration-source-embeddings
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/embed
Start embeddings update for an integration source.
This will queue a background job to update embeddings for the integration source
using the new Temporal workflow system with fan-out table processing.
# Trigger Integration Source Introspection
Source: https://docs.heyhumm.ai/api-reference/integration-sources/trigger-integration-source-introspection
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/introspect
Trigger introspection for an integration source.
This will queue a background job to discover and update the schema hierarchy:
- Databases
- Schemas
- Tables
- Columns
- Relationships
Args:
source_id: Integration source ID
force_refresh: Force refresh even if recently introspected
# Trigger Integration Source Metadata Enrichment
Source: https://docs.heyhumm.ai/api-reference/integration-sources/trigger-integration-source-metadata-enrichment
https://config.heyhumm.ai/api/openapi.json post /api/integration-sources/{source_id}/enrich
Start metadata enrichment for an integration source.
For database sources: queues a background job to enrich metadata
using the Temporal workflow system with fan-out table processing.
For SaaS sources: triggers AI-powered description generation for
objects and fields. Use force_regenerate=True to regenerate all
descriptions, even for fields that already have them.
# Update Enabled Tools
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-enabled-tools
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}/enabled-tools
Update the list of enabled tools for an integration source.
Validates that all tool names exist in the template before saving.
# Update Integration Source
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-integration-source
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}
Update an integration source.
# Update Integration Source Column
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-integration-source-column
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables/{table_id}/columns/{column_id}
Update an integration source column.
# Update Integration Source Database
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-integration-source-database
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}/databases/{database_id}
Update an integration source database.
# Update Integration Source Relationship
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-integration-source-relationship
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/relationships/{relationship_id}
Update status, score, or evidence for an integration source relationship.
# Update Integration Source Schema
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-integration-source-schema
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}
Update an integration source schema.
# Update Integration Source Table
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-integration-source-table
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}/databases/{database_id}/schemas/{schema_id}/tables/{table_id}
Update an integration source table.
# Update Saas Association
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-saas-association
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}/saas-associations/{association_id}
Update fields (including status/score/evidence) for a SaaS association.
# Update Saas Field
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-saas-field
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}/saas-objects/{object_id}/saas-fields/{field_id}
Update a SaaS field.
# Update Saas Object
Source: https://docs.heyhumm.ai/api-reference/integration-sources/update-saas-object
https://config.heyhumm.ai/api/openapi.json put /api/integration-sources/{source_id}/saas-objects/{object_id}
Update a SaaS object.
# Execute Tool
Source: https://docs.heyhumm.ai/api-reference/mcp/execute-tool
https://analyst.heyhumm.ai/api/openapi.json post /api/mcp/tool/execute
# Get Tool Detail
Source: https://docs.heyhumm.ai/api-reference/mcp/get-tool-detail
https://analyst.heyhumm.ai/api/openapi.json get /api/mcp/tool/detail
# List Connections
Source: https://docs.heyhumm.ai/api-reference/mcp/list-connections
https://analyst.heyhumm.ai/api/openapi.json get /api/mcp/connection/list
# Search Context
Source: https://docs.heyhumm.ai/api-reference/mcp/search-context
https://analyst.heyhumm.ai/api/openapi.json get /api/mcp/context/search
# Search Tools
Source: https://docs.heyhumm.ai/api-reference/mcp/search-tools
https://analyst.heyhumm.ai/api/openapi.json get /api/mcp/tool/search
# Create Memory
Source: https://docs.heyhumm.ai/api-reference/memories/create-memory
https://analyst.heyhumm.ai/api/openapi.json post /memories
Create a new memory.
Requires CREATE permission on memory resources.
# Delete Memory
Source: https://docs.heyhumm.ai/api-reference/memories/delete-memory
https://analyst.heyhumm.ai/api/openapi.json delete /memories/{memory_id}
Soft delete a memory by setting status to rejected.
Requires DELETE permission on memory resources.
# Get Memory
Source: https://docs.heyhumm.ai/api-reference/memories/get-memory
https://analyst.heyhumm.ai/api/openapi.json get /memories/{memory_id}
Get a single memory by ID.
Requires READ permission on memory resources.
# List Memories
Source: https://docs.heyhumm.ai/api-reference/memories/list-memories
https://analyst.heyhumm.ai/api/openapi.json get /memories
List memories with optional filters.
Requires READ permission on memory resources.
# Search Memories
Source: https://docs.heyhumm.ai/api-reference/memories/search-memories
https://analyst.heyhumm.ai/api/openapi.json get /memories/search/semantic
Semantic search for memories using vector similarity.
Requires READ permission on memory resources.
# Update Memory
Source: https://docs.heyhumm.ai/api-reference/memories/update-memory
https://analyst.heyhumm.ai/api/openapi.json patch /memories/{memory_id}
Update a memory (status, tags, etc.).
Requires UPDATE permission on memory resources.
# Create Organization Member
Source: https://docs.heyhumm.ai/api-reference/organization-members/create-organization-member
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/member
# Create Organization Member By Email
Source: https://docs.heyhumm.ai/api-reference/organization-members/create-organization-member-by-email
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/member/by-email
# Delete Organization Member
Source: https://docs.heyhumm.ai/api-reference/organization-members/delete-organization-member
https://config.heyhumm.ai/api/openapi.json delete /api/organization/{organization_id}/member/{member_id}
# Get Organization Members
Source: https://docs.heyhumm.ai/api-reference/organization-members/get-organization-members
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/member
# Update Organization Member
Source: https://docs.heyhumm.ai/api-reference/organization-members/update-organization-member
https://config.heyhumm.ai/api/openapi.json put /api/organization/{organization_id}/member/{member_id}
# Get Ontology Version
Source: https://docs.heyhumm.ai/api-reference/organizations/get-ontology-version
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/ontology/versions/{version_id}
# Get Organization
Source: https://docs.heyhumm.ai/api-reference/organizations/get-organization
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}
# Get Organization Ontology
Source: https://docs.heyhumm.ai/api-reference/organizations/get-organization-ontology
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/ontology
# Get Organizations
Source: https://docs.heyhumm.ai/api-reference/organizations/get-organizations
https://config.heyhumm.ai/api/openapi.json get /api/organization
Get all organizations the user has access to
# Get Storage Settings
Source: https://docs.heyhumm.ai/api-reference/organizations/get-storage-settings
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/storage-setting
# List Ontology Versions
Source: https://docs.heyhumm.ai/api-reference/organizations/list-ontology-versions
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/ontology/versions
# Update Organization
Source: https://docs.heyhumm.ai/api-reference/organizations/update-organization
https://config.heyhumm.ai/api/openapi.json put /api/organization/{organization_id}
# Update Organization Ontology
Source: https://docs.heyhumm.ai/api-reference/organizations/update-organization-ontology
https://config.heyhumm.ai/api/openapi.json put /api/organization/{organization_id}/ontology
# Update Storage Settings
Source: https://docs.heyhumm.ai/api-reference/organizations/update-storage-settings
https://config.heyhumm.ai/api/openapi.json put /api/organization/{organization_id}/storage-setting
# Validate Storage Settings
Source: https://docs.heyhumm.ai/api-reference/organizations/validate-storage-settings
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/storage-setting/validate
# Delete Run
Source: https://docs.heyhumm.ai/api-reference/reports/delete-run
https://analyst.heyhumm.ai/api/openapi.json delete /reports/runs/{run_id}
Delete a report run and its associated thread.
# Get Inbox
Source: https://docs.heyhumm.ai/api-reference/reports/get-inbox
https://analyst.heyhumm.ai/api/openapi.json get /reports/inbox
Get user's reports inbox.
# Get Run Details
Source: https://docs.heyhumm.ai/api-reference/reports/get-run-details
https://analyst.heyhumm.ai/api/openapi.json get /reports/runs/{run_id}
Get detailed information about a specific run.
# Get Run Formatted
Source: https://docs.heyhumm.ai/api-reference/reports/get-run-formatted
https://analyst.heyhumm.ai/api/openapi.json get /reports/runs/{run_id}/formatted
Get run details with formatted thread content optimized for UI rendering.
# Get Schedule History
Source: https://docs.heyhumm.ai/api-reference/reports/get-schedule-history
https://analyst.heyhumm.ai/api/openapi.json get /reports/schedules/{schedule_id}/runs
Get run history for a schedule.
# Mark Run As Read
Source: https://docs.heyhumm.ai/api-reference/reports/mark-run-as-read
https://analyst.heyhumm.ai/api/openapi.json post /reports/runs/{run_id}/mark-read
Mark a run as read.
# Trigger Schedule Run
Source: https://docs.heyhumm.ai/api-reference/reports/trigger-schedule-run
https://analyst.heyhumm.ai/api/openapi.json post /reports/schedules/{schedule_id}/trigger
Manually trigger a scheduled report for the current user.
# Create Role
Source: https://docs.heyhumm.ai/api-reference/roles/create-role
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/role
# Delete Role
Source: https://docs.heyhumm.ai/api-reference/roles/delete-role
https://config.heyhumm.ai/api/openapi.json delete /api/organization/{organization_id}/role/{role_id}
# Get Role
Source: https://docs.heyhumm.ai/api-reference/roles/get-role
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/role/{role_id}
# List Roles
Source: https://docs.heyhumm.ai/api-reference/roles/list-roles
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/role
List all roles: built-in system roles + custom org roles.
# Set Role Permissions
Source: https://docs.heyhumm.ai/api-reference/roles/set-role-permissions
https://config.heyhumm.ai/api/openapi.json put /api/organization/{organization_id}/role/{role_id}/permission
Replace all permissions for a role. Full replacement semantics in a single transaction.
# Update Role
Source: https://docs.heyhumm.ai/api-reference/roles/update-role
https://config.heyhumm.ai/api/openapi.json put /api/organization/{organization_id}/role/{role_id}
# Add Subscriber
Source: https://docs.heyhumm.ai/api-reference/schedules/add-subscriber
https://analyst.heyhumm.ai/api/openapi.json post /schedules/{schedule_id}/subscribers
Add a subscriber to a schedule.
# Create Schedule
Source: https://docs.heyhumm.ai/api-reference/schedules/create-schedule
https://analyst.heyhumm.ai/api/openapi.json post /commands/{command_id}/schedules
Create a schedule for a command.
# Delete Schedule
Source: https://docs.heyhumm.ai/api-reference/schedules/delete-schedule
https://analyst.heyhumm.ai/api/openapi.json delete /schedules/{schedule_id}
Delete a schedule and its associated data.
# List All Schedules
Source: https://docs.heyhumm.ai/api-reference/schedules/list-all-schedules
https://analyst.heyhumm.ai/api/openapi.json get /commands/schedules
List all schedules for an organization.
# List Schedules For Command
Source: https://docs.heyhumm.ai/api-reference/schedules/list-schedules-for-command
https://analyst.heyhumm.ai/api/openapi.json get /commands/{command_id}/schedules
List schedules for a command.
# List Subscribers
Source: https://docs.heyhumm.ai/api-reference/schedules/list-subscribers
https://analyst.heyhumm.ai/api/openapi.json get /schedules/{schedule_id}/subscribers
List subscribers for a schedule.
# Remove Subscriber
Source: https://docs.heyhumm.ai/api-reference/schedules/remove-subscriber
https://analyst.heyhumm.ai/api/openapi.json delete /schedules/{schedule_id}/subscribers/{subscriber_user_id}
Remove a subscriber from a schedule.
# Update Schedule
Source: https://docs.heyhumm.ai/api-reference/schedules/update-schedule
https://analyst.heyhumm.ai/api/openapi.json put /schedules/{schedule_id}
Update a schedule's settings.
# Cancel Thread
Source: https://docs.heyhumm.ai/api-reference/threads/cancel-thread
https://analyst.heyhumm.ai/api/openapi.json post /threads/{thread_id}/cancel
Cancel a running analysis thread.
This endpoint:
1. Updates thread status to CANCELLED
2. Persists cancelled_blocks in checkpoint state for UI display
3. Cancels the running Temporal workflow if one exists
4. Returns cancellation confirmation
Requires UPDATE permission on ANALYSIS resources.
# Create Command From Thread
Source: https://docs.heyhumm.ai/api-reference/threads/create-command-from-thread
https://analyst.heyhumm.ai/api/openapi.json post /threads/{thread_id}/create-command
Create a reusable command from a thread conversation via LLM.
Validates the thread, creates a Command record with generation_status='generating',
starts a background Temporal workflow to extract command content, and returns 202.
# Delete Thread
Source: https://docs.heyhumm.ai/api-reference/threads/delete-thread
https://analyst.heyhumm.ai/api/openapi.json delete /threads/{thread_id}
Delete a thread and all its associated data.
Requires DELETE permission on ANALYSIS resources.
# Get Supported Models
Source: https://docs.heyhumm.ai/api-reference/threads/get-supported-models
https://analyst.heyhumm.ai/api/openapi.json get /threads/supported-models
Returns the list of models that can be used for thread creation.
# Get Thread
Source: https://docs.heyhumm.ai/api-reference/threads/get-thread
https://analyst.heyhumm.ai/api/openapi.json get /threads/{thread_id}
Get a specific thread in its raw state, including OpenAI style messages array with tool calls.
Requires READ permission on ANALYSIS resources.
# Get Thread Formatted
Source: https://docs.heyhumm.ai/api-reference/threads/get-thread-formatted
https://analyst.heyhumm.ai/api/openapi.json get /threads/{thread_id}/formatted
Get a specific thread with optimized format for frontend rendering.
Requires READ permission on ANALYSIS resources.
# Get Thread Status
Source: https://docs.heyhumm.ai/api-reference/threads/get-thread-status
https://analyst.heyhumm.ai/api/openapi.json get /threads/{thread_id}/status
Get thread status for polling. Uses lightweight validation to avoid loading the full thread state.
Requires READ permission on ANALYSIS resources.
# Get Threads
Source: https://docs.heyhumm.ai/api-reference/threads/get-threads
https://analyst.heyhumm.ai/api/openapi.json get /threads
Get threads for a specific organization with pagination support.
Requires READ permission on ANALYSIS resources.
# Search Threads
Source: https://docs.heyhumm.ai/api-reference/threads/search-threads
https://analyst.heyhumm.ai/api/openapi.json get /threads/search
Search threads using semantic similarity on title and last_message.
Requires READ permission on ANALYSIS resources.
# Start Thread
Source: https://docs.heyhumm.ai/api-reference/threads/start-thread
https://analyst.heyhumm.ai/api/openapi.json post /threads/async
Starts an AI analysis in the background and returns immediately with thread metadata.
This endpoint enables polling-based UI updates by starting agent execution
in the background and returning thread information immediately.
Supports model configuration via the llm_config parameter (defaults to "deep" if not provided).
# Update Thread
Source: https://docs.heyhumm.ai/api-reference/threads/update-thread
https://analyst.heyhumm.ai/api/openapi.json put /threads/{thread_id}
Update a thread's metadata (e.g., title).
Requires UPDATE permission on ANALYSIS resources.
# Presign Uploads
Source: https://docs.heyhumm.ai/api-reference/uploads/presign-uploads
https://analyst.heyhumm.ai/api/openapi.json post /api/upload/presign
Return presigned S3 PUT URLs for direct browser upload.
# Process Uploads
Source: https://docs.heyhumm.ai/api-reference/uploads/process-uploads
https://analyst.heyhumm.ai/api/openapi.json post /api/upload/process
Process raw files uploaded to S3 via presigned URLs.
Downloads raw files, parses into DataFrames, caches as JSON, deletes raw files.
# Upload Files
Source: https://docs.heyhumm.ai/api-reference/uploads/upload-files
https://analyst.heyhumm.ai/api/openapi.json post /api/upload
Upload and parse CSV/XLSX files, cache as DataFrames in S3.
Returns metadata for each parsed dataset (cache key, schema, row count)
to be included in the subsequent ChatRequest.
# Create Or Update User Identifier
Source: https://docs.heyhumm.ai/api-reference/user-identifiers/create-or-update-user-identifier
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/user/{user_id}/identifiers
Create or update a user identifier.
This endpoint uses upsert logic - if an identifier with the same
organization, user, integration source, and key already exists, it updates it.
Args:
organization_id: Organization ID
user_id: User ID
identifier: Identifier data to create/update
db: Database session
current_user_id: Current authenticated user ID
Returns:
Created or updated identifier
# Delete User Identifier
Source: https://docs.heyhumm.ai/api-reference/user-identifiers/delete-user-identifier
https://config.heyhumm.ai/api/openapi.json delete /api/organization/{organization_id}/user-identifiers/{identifier_id}
Delete a user identifier.
Args:
organization_id: Organization ID
identifier_id: Identifier ID to delete
db: Database session
current_user_id: Current authenticated user ID
# List Integration Source User Identifiers
Source: https://docs.heyhumm.ai/api-reference/user-identifiers/list-integration-source-user-identifiers
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/integration-source/{source_id}/user-identifiers
List all user identifiers for a specific integration source.
Args:
organization_id: Organization ID
source_id: Integration source ID
db: Database session
current_user_id: Current authenticated user ID
Returns:
List of user integration identifiers for this source
# List User Identifiers
Source: https://docs.heyhumm.ai/api-reference/user-identifiers/list-user-identifiers
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/user/{user_id}/identifiers
List all identifiers for a user across integration sources.
Args:
organization_id: Organization ID
user_id: User ID
integration_source_id: Optional filter by integration source
db: Database session
current_user_id: Current authenticated user ID
Returns:
List of user integration identifiers
# Trigger User Identification
Source: https://docs.heyhumm.ai/api-reference/user-identifiers/trigger-user-identification
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/users/identify
Trigger user identification process for all users or a specific user.
This queues background jobs to identify users across all integration sources.
Args:
organization_id: Organization ID
user_id: Optional specific user ID (if None, identifies all org users)
db: Database session
current_user_id: Current authenticated user ID
Returns:
Confirmation message
# Assign User Role
Source: https://docs.heyhumm.ai/api-reference/user-roles/assign-user-role
https://config.heyhumm.ai/api/openapi.json post /api/organization/{organization_id}/user-role
Assign a role to a user.
# List User Roles
Source: https://docs.heyhumm.ai/api-reference/user-roles/list-user-roles
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/user-role
List all role assignments in the organization.
# List User Roles For User
Source: https://docs.heyhumm.ai/api-reference/user-roles/list-user-roles-for-user
https://config.heyhumm.ai/api/openapi.json get /api/organization/{organization_id}/user-role/user/{user_id}
List all role assignments for a specific user in the organization.
# Revoke User Role
Source: https://docs.heyhumm.ai/api-reference/user-roles/revoke-user-role
https://config.heyhumm.ai/api/openapi.json delete /api/organization/{organization_id}/user-role/{user_role_id}
Revoke a role assignment.
# Commands
Source: https://docs.heyhumm.ai/features/commands
Save and reuse prompts to automate repetitive analyses.
Commands are reusable prompts that save you time on repetitive work. Instead of typing out the same detailed question each time, create a Command once and run it whenever you need it.
Need to manage commands outside the UI? See [Manage Commands via API](../guides/manage-commands-via-api).
## Why Use Commands?
Many analyses follow the same pattern:
* Preparing for a QBR with a specific account
* Running weekly portfolio health checks
* Assessing churn risk for renewal accounts
* Generating onboarding status reports
Without Commands, you'd type out (or copy-paste) the same detailed prompt every time. With Commands, you save the prompt once and run it with a single click.
## Creating a Command
1. Click **Commands** in the sidebar
2. Click **New Command**
3. Give your Command a name (e.g., "QBR Prep")
4. Write the prompt you want to reuse
5. Add any variables for dynamic content (optional)
6. Click **Save**
### Using Variables
Variables let you customize a Command each time you run it. Wrap variable names in double curly braces:
```
Prepare a QBR summary for {{account_name}} including:
- Health score trends over the last 6 months
- Product usage highlights
- Open support tickets
- Expansion opportunities
```
When you run this Command, Humm will ask you to fill in `account_name` before executing.
## Running a Command
1. Click **Commands** in the sidebar
2. Find the Command you want to run
3. Click **Run**
4. Fill in any variables if prompted
5. Humm creates a new thread with the Command's prompt
The result is a regular thread, so you can ask follow-up questions and dig deeper.
If you have a long command library, use the search bar at the top of the Commands page to filter by command name or description.
## Command Ideas
Generate a comprehensive account review with health metrics, usage trends, and talking points.
Summarize health changes, at-risk accounts, and expansion opportunities across your book of business.
Analyze warning signs for accounts approaching renewal, with recommended actions.
Track onboarding progress, milestone completion, and early adoption metrics.
## Sharing Commands
Commands can be personal or shared with your team:
* **Personal Commands** — Only you can see and run them
* **Team Commands** — Anyone on your team can use them
To share a Command, open it and click **Share with Team**. Shared Commands appear in everyone's Command library.
## Save a Thread as a Command
At the end of a productive thread, choose **Save as Command**. Humm extracts the question pattern and auto-detects variable placeholders (`{{variable}}`), so you don't have to build the command from scratch.
This is the fastest way to create a command — let a real conversation prove out the analysis first, then save it for reuse.
## Using @ References in Commands
Use `@` references to pin a command to specific tables or fields. This keeps results consistent even as your schema evolves.
```
Show weekly active users from @[table:events] grouped by @[column:events.plan_tier]
```
See [Threads — Using @ References](/features/threads#using--references) for the full syntax.
## Editing and Deleting Commands
Open any Command to edit its name, prompt, or variables. Changes apply immediately—the next time anyone runs the Command, they'll get the updated version.
### Edit with the Assistant
If you want help tightening a prompt instead of rewriting it by hand:
1. Open the Command
2. Start an edit conversation with the assistant
3. Describe the change you want
4. Review the proposed diff
5. Approve the update when it looks right
The assistant works against a draft first, so you can inspect the proposed changes before they go live.
### Review History and Restore an Older Version
Every saved update creates a history snapshot. Open **History** on a command to:
* Review earlier versions
* Compare an older snapshot against the current version
* Restore a previous version if you need to roll back a prompt change
Restoring an older version makes that snapshot the live command again. Humm also records the restore in version history so you keep a clear audit trail.
To delete a Command, open it and click **Delete**. Deleted Commands can't be recovered, so make sure you don't need it anymore.
## Tips for Effective Commands
Commands work best when the prompt is specific. Include exactly what sections, metrics, and format you want in the output.
Name variables descriptively: `{{account_name}}` is clearer than `{{x}}`. This helps when running the Command later.
Run your Command a few times with different inputs to make sure it produces good results before sharing with your team.
If you asked a great question in a thread and want to reuse it, copy the prompt into a new Command. You already know it works.
# Memories
Source: https://docs.heyhumm.ai/features/memories
Teach Humm your business definitions, data relationships, and preferences.
Memories capture knowledge from your conversations — business definitions, data relationships, and organizational context. The more accurate Memories Humm has, the better it answers questions about your specific business.
Need to manage memories outside the UI? See [Manage Memories via API](../guides/manage-memories-via-api).
## How Memories Work
When you interact with Humm, it listens for information that might be useful later:
* **Business definitions** — What terms mean in your organization
* **Data relationships** — How different systems connect
* **Preferences** — How you like information presented
* **Corrections** — Feedback when something was wrong
Humm proposes new Memories based on your conversations. You review and approve them before they take effect, so you stay in control of what Humm learns.
## Examples of Memories
"Enterprise accounts are those with ARR over \$100k"
"The account\_id field in HubSpot maps to external\_id in Snowflake"
"Health score is calculated as 40% product usage + 30% support tickets + 30% engagement"
"Sarah owns the West region accounts, Marcus owns East"
## Reviewing Memories
When Humm proposes a new Memory, you'll see it in your **Memories** section with a "Pending Review" status.
For each proposed Memory, you can:
* **Approve** — The Memory becomes active and Humm will use it going forward
* **Edit** — Adjust the wording before approving
* **Reject** — Discard the Memory if it's not useful or accurate
Take a moment to review pending Memories regularly. The more accurate Memories Humm has, the better your answers will be.
## Managing Memories
### Viewing Active Memories
Click **Memories** in the sidebar to see everything Humm has learned. Memories are organized by category:
* **Definitions** — Business terms and their meanings
* **Relationships** — How data connects across systems
* **Preferences** — Your formatting and presentation preferences
* **Context** — Organizational and process information
### Editing Memories
Click any Memory to edit it. You might update a Memory when:
* A business definition changes
* You find a more accurate way to express something
* The original wording was slightly off
Changes take effect immediately for all future conversations.
### Deleting Memories
If a Memory is outdated or incorrect, click it and select **Delete**. Humm will stop using that information right away.
## Teaching Humm Directly
You don't have to wait for Humm to propose Memories. You can teach Humm directly in any conversation:
* "Remember that we call accounts 'at risk' when their health score drops below 60"
* "Note that our fiscal year starts in February"
* "Keep in mind that the sales team uses 'MQL' to mean Marketing Qualified Lead"
Humm will create a Memory from your instruction. You'll still see it in your Memories list where you can review or edit it.
## Team vs. Personal Memories
Memories can be scoped to you personally or shared across your team:
* **Personal Memories** — Apply only to your conversations
* **Team Memories** — Apply to everyone on your team
Most business definitions and data relationships should be Team Memories so everyone benefits. Personal Memories work well for individual preferences.
## Tips for Better Memories
"Enterprise accounts have ARR over \$100k" is better than "Enterprise accounts are big accounts."
If Humm gets something wrong, tell it. "Actually, that's not right—health score doesn't include NPS." This creates a Memory that prevents the same mistake.
Check your Memories every few weeks. Business definitions change, and keeping Memories current keeps answers accurate.
When you teach Humm something useful, consider making it a Team Memory so everyone benefits from the knowledge.
# Ontology
Source: https://docs.heyhumm.ai/features/ontology
How Humm maps your business entities, relationships, and metrics.
The ontology is Humm's map of your business. It defines your key entities (Customers, Accounts, Products), how they relate, and the metrics you care about. A better ontology means more accurate answers.
Need to update ontology programmatically? See [Manage Ontology via API](../guides/manage-ontology-via-api).
## What's in the Ontology?
### Entities
Entities are the core concepts in your business. Common examples:
* **Account** — A company or organization you do business with
* **Contact** — A person associated with an account
* **Opportunity** — A potential deal or sale
* **Subscription** — A recurring revenue relationship
* **User** — Someone who uses your product
* **Event** — An action or activity in your product
Each entity has attributes (like name, created date, or status) that describe it.
### Relationships
Relationships define how entities connect:
* Accounts **have** Contacts
* Accounts **have** Subscriptions
* Users **belong to** Accounts
* Users **generate** Events
* Opportunities **convert to** Subscriptions
These relationships let Humm navigate your data and answer questions that span multiple systems.
### Metrics
Metrics are the key performance indicators you track:
* **Monthly Recurring Revenue (MRR)** — Revenue from subscriptions
* **Churn Rate** — Percentage of customers who cancel
* **Net Promoter Score (NPS)** — Customer satisfaction measure
* **Health Score** — Overall account health indicator
Humm uses metric definitions to calculate values consistently across your analyses.
## How Humm Builds the Ontology
When you connect integrations, Humm automatically discovers your data structure:
1. **Schema discovery** — Humm reads your tables, fields, and data types
2. **Entity detection** — Humm identifies business entities from your data
3. **Relationship inference** — Humm detects how entities connect based on keys and patterns
4. **Metric recognition** — Humm identifies common metrics and calculations
This automatic process gives you a working ontology immediately. You can then refine it to match exactly how your team thinks about the business.
## Viewing the Ontology
Click **Ontology** in the sidebar to explore Humm's understanding of your business. You'll see:
* **Entity list** — All recognized entities and their attributes
* **Relationship map** — Visual diagram of how entities connect
* **Metric definitions** — How key metrics are calculated
* **Data sources** — Which integrations power each entity
## Refining the Ontology
The automatic ontology is a starting point. Refine it to improve accuracy:
### Renaming Entities
If Humm calls something "Company" but your team says "Account," rename it. Humm will understand both terms, but using your team's language makes conversations more natural.
### Adding Relationships
If Humm missed a connection between entities, add it manually. For example, if your product data links to accounts through a custom field, define that relationship so Humm can traverse it.
### Defining Metrics
Add your specific metric calculations. If your health score formula is unique to your business, define it in the ontology so Humm calculates it correctly every time.
### Adding Business Context
Enrich entities with descriptions and examples:
* "Churned accounts are those with status = 'cancelled' and no active subscription"
* "Enterprise tier includes Pro, Business, and Enterprise plans"
This context helps Humm interpret your questions accurately.
## Ontology and Accuracy
The ontology directly affects answer quality:
| Ontology Quality | Result |
| - | - |
| **Minimal** | Humm can answer basic questions but may miss nuances |
| **Good** | Humm understands your terminology and key relationships |
| **Excellent** | Humm reasons about your business like a team member |
Time spent on the ontology pays off in every conversation.
## Tips for a Better Ontology
Name entities and metrics the way your team talks about them. If everyone says "ARR" not "Annual Recurring Revenue," use "ARR."
Clarify ambiguous situations: "An active account is one with at least one paying subscription, excluding trials."
The ontology works best when all your integrations are linked. Make sure Humm knows how to join data across systems.
As your business evolves, so should your ontology. Review it quarterly to add new entities, metrics, or relationships.
# Scheduled Commands
Source: https://docs.heyhumm.ai/features/scheduled-commands
Automate report generation by running saved commands on a regular schedule.
Scheduled Commands let you automate your recurring analyses. Instead of manually running the same command each week or month, schedule it once and Humm will run it automatically—delivering results straight to your inbox and your team's.
## Why Use Scheduled Commands?
Many reports need to run on a regular basis:
* Weekly revenue and pipeline summaries
* Daily active user metrics
* Monthly customer health reviews
* End-of-week team performance reports
Without scheduling, you'd need to remember to run these reports manually. With Scheduled Commands, you configure it once and receive results automatically.
## Creating a Schedule
Before you can schedule a command, make sure you have a saved command ready to go.
### Steps to Schedule
1. Navigate to your saved command in **Commands**
2. Click the **Schedule** button (calendar icon)
3. Configure your schedule:
* **Cadence** — Daily, weekly, weekdays, or monthly
* **Run Mode** — Per Subscriber or Once & Distribute
* **Day** — For weekly or monthly, select which day to run
* **Run Time** — When the report should execute
* **Timezone** — Your preferred timezone
* **Run Mode** — How to execute for multiple subscribers
* **Enabled** — Toggle to activate
4. Click **Create Schedule**
You'll automatically be subscribed to receive the reports.
### Schedule Options
Choose how often your report runs:
* **Daily** — Runs every day at the specified time
* **Weekdays** — Runs Monday through Friday at the specified time
* **Weekly** — Runs once per week on your chosen day
* **Monthly** — Runs once per month on your chosen day (1-28)
Pick from multiple timezones including Eastern, Central, Mountain, Pacific, UTC, London, and Central European time. Timezones that observe daylight saving automatically adjust, so your reports always run at the expected local time.
Select the exact time for execution. Consider your team's workflow:
* **Morning (8-10 AM)** — Start the day with fresh insights
* **End of day (4-6 PM)** — Daily summaries before close
* **Overnight (2-4 AM)** — Process heavy queries during off-peak hours
Choose how reports execute when you have multiple subscribers:
* **Per Subscriber** (default) — Runs once for each subscriber using their individual data access and permissions. Best for personalized reports where each user sees data relevant to them.
* **Once & Distribute** — Runs once and distributes the same results to all subscribers. More efficient for reports where everyone should see identical content.
## Managing Subscribers
After creating a schedule, you can add team members to receive the same reports.
### Adding Subscribers
1. Open the schedule dialog
2. Click **Add** in the Subscribers section
3. Select team members from the dropdown
4. They'll start receiving reports on the next run
Organization admins can add any team member. Schedule owners can also add team members to schedules they manage. If you are just viewing someone else's schedule, you can only subscribe or unsubscribe yourself.
### Removing Subscribers
1. Open the schedule dialog
2. Find the subscriber in the list
3. Click the **X** button next to their name
4. They'll stop receiving reports immediately
## The Reports Inbox
Access all your scheduled reports in one place by clicking **Reports** in the sidebar.
### What You'll See
Each report card shows:
* Command name and description
* Cadence badge (daily, weekly, weekdays, monthly)
* Latest run summary
* Status indicators:
* **Dot** — New unread report
* **Red alert icon** — Latest run failed
* **Faded appearance** — Schedule is disabled
### Reading Reports
Click any report card to:
* View the full report with all results and visualizations
* Mark it as read (removes the unread indicator)
* Access the complete conversation thread
## Running On-Demand
You don't have to wait for the next scheduled time. Open any scheduled command and click **Run Now** to trigger it immediately. The results appear in your Reports inbox just like a scheduled run.
## Run History
Every scheduled report maintains a complete history:
1. Open a report from your inbox
2. Click **View History**
3. See all past runs with:
* Execution status (completed, failed, in progress)
* Start and completion times
* Full report content
* Error details for failed runs (including the error message and which step failed)
## Email Notifications
Stay informed without logging in—Humm sends email notifications when reports are ready.
### Success Notifications
When a report completes successfully, you'll receive:
* Report name and AI-generated summary
* Link to view the full report
* Timestamp of execution
* Link to manage preferences
### Failure Notifications
If a report fails, you'll receive:
* Report name
* Error message explaining what went wrong
* Link to fix the issue
* Link to manage preferences
### Managing Email Preferences
Control which notifications you receive:
1. Click your profile icon
2. Select **Notification Preferences**
3. Toggle scheduled report notifications on or off
You can also manage preferences via the link in any notification email.
## Editing and Disabling Schedules
### Editing a Schedule
To modify an existing schedule:
1. Open the schedule dialog
2. Update any settings (cadence, time, timezone)
3. Click **Save**
Only the schedule creator or organization admins can edit schedule settings.
### Disabling vs. Deleting
**Disable** to pause temporarily:
* Schedule stays configured
* No reports run while disabled
* All subscribers remain subscribed
* Re-enable anytime
**Delete** to remove permanently:
* All settings are lost
* All subscribers are unsubscribed
* Historical runs are deleted
* Cannot be undone
You cannot delete a schedule while runs are in progress. Wait for them to complete first.
## Best Practices
**Daily** for fast-moving metrics that need monitoring (active users, overnight sales)
**Weekly** for trend analysis and regular team updates (growth metrics, pipeline reports)
**Weekdays** for business-day reports (skipping weekends)
**Monthly** for high-level summaries and executive reporting (revenue, retention)
**Per Subscriber** for personalized reports where each user sees data based on their permissions (e.g., regional sales for different sales reps)
**Once & Distribute** for organization-wide reports where everyone sees identical data (e.g., company-wide KPIs)
**Morning** gives your team insights to start the day
**End-of-day** provides summaries before close
**Overnight** handles heavy queries during off-peak hours
Only add team members who need the specific report. Create multiple schedules with different cadences for different audiences (daily for ops, weekly for executives).
Check error messages in failure emails. Common causes: data source issues, deleted data, permission changes. Test the command manually to fix the issue.
## Permissions
### Who Can Schedule Commands
* **Command creators** can schedule any command they created
* **Organization admins** can schedule any command in the organization
### Who Can Manage Schedules
* **Schedule creator** has full control to edit or delete
* **Organization admins** can manage any schedule
### Who Can Subscribe
* **Anyone** can subscribe themselves to existing schedules
* **Organization admins** can subscribe other team members
* **Schedule creators** can subscribe other team members to schedules they manage
### Who Can Add Subscribers While Creating a Schedule
* **Command creators** can choose the initial subscriber list when they create a schedule for their own command
* **Organization admins** can choose the initial subscriber list for any command
## Troubleshooting
1. Check your **Notification Preferences** — ensure scheduled reports are enabled
2. Check your spam folder
3. Verify your email address in your profile
4. Confirm the run completed (failed runs send failure notifications)
1. Verify the timezone setting matches your expectation
2. Check if the schedule is disabled
3. Remember: DST-observing timezones automatically adjust in March and November
1. Review the error message in the failure notification
2. Run the command manually to reproduce the issue
3. Check data source connectivity in your integrations
4. Verify permissions on underlying data haven't changed
5. Contact support if the issue persists
Only the schedule creator or organization admins can edit or delete schedules. If you need changes and lack permissions, contact your admin or the schedule creator.
## Frequently Asked Questions
The minimum schedule interval is 15 minutes. You can create multiple schedules for the same command if you need different timing (e.g., one for morning, one for evening).
The system waits for the current run to complete before starting the next one. Runs never overlap.
Not currently. Scheduled commands must be fully automated. If your command has variables, set fixed values when you save the command for scheduling.
If a command is deleted, all associated schedules, subscriptions, and historical runs are also deleted.
All run history is retained indefinitely and accessible through the Reports Inbox.
# Threads
Source: https://docs.heyhumm.ai/features/threads
Have conversations with Humm to explore your data and get answers.
Threads are conversations with Humm. Each thread is a back-and-forth dialogue where you ask questions in plain English and Humm provides answers with data, charts, and recommendations.
## Starting a Thread
Click **New Thread** from the sidebar to start a conversation. Type your question in the message box—no special syntax or query language needed.
**Example questions to get started:**
* "Which accounts have the highest churn risk?"
* "Show me product usage trends for Acme Corp"
* "What's our average NPS score by customer segment?"
## Understanding Humm's Response
When you ask a question, Humm shows you two things:
### Reasoning
The reasoning section shows how Humm is thinking through your question. You'll see which data sources it's querying, what calculations it's running, and how it's arriving at the answer. This transparency helps you trust the results and catch any misunderstandings early.
### Answer
The answer section contains Humm's response, which may include:
* **Text explanations** — Context and insights about what the data shows
* **Charts and visualizations** — Graphs that make patterns easy to spot
* **Data tables** — The underlying numbers you can explore
* **Recommendations** — Suggested next steps based on the analysis
## Asking Follow-Up Questions
The real power of threads comes from follow-up questions. After Humm answers, you can dig deeper:
* "Break this down by region"
* "Why did churn spike in Q3?"
* "Show me the accounts driving this number"
* "Compare this to last quarter"
Humm remembers the context of your conversation, so you don't need to repeat yourself.
## Watching Context Usage
Long threads can use a lot of context. When a thread reaches meaningful context usage, Humm shows a small context indicator beside the chat input.
Hover over the indicator to see the percentage of context used. If usage gets high, Humm may suggest starting a new thread so the next analysis has more room to work with your question and data.
## Managing Threads
### Finding Past Threads
All your threads are saved automatically. Use the sidebar to browse past conversations, or search by keyword to find a specific analysis.
### Copying and Sharing
Every AI message has a **Copy** button to grab the text. Use the **Share** dropdown on a thread to share it with teammates — recipients can view the full conversation and continue asking their own questions.
### Organizing Threads
Pin important threads to keep them at the top of your list. You can also rename threads to make them easier to find later.
## Tips for Better Results
Instead of "Show me churn data," try "Show me accounts that churned in the last 90 days with ARR over \$50k."
Humm defaults to reasonable timeframes, but specifying "last quarter" or "year over year" gets you exactly what you need.
Questions like "How does this compare to last month?" or "Which segment is performing best?" often reveal the most useful insights.
If you want a chart, table, or list, just ask. "Show me a trend chart of monthly active users" or "Give me a table of at-risk accounts."
## Uploading Files
Use the upload button in the chat input or drag a file into the conversation. Humm accepts CSV and XLSX files.
**Limits:**
* Up to 10 files per message
* 10 MB per file
* 50 MB total per message
After you upload, Humm shows a preview of the data before running any analysis. This is useful for ad-hoc datasets that aren't in your warehouse — upload a spreadsheet and ask questions about it the same way you'd query a connected source.
Pair file uploads with a command to re-run the same analysis on fresh data each week. Export a report, drop it in, and let the command do the rest.
## Attaching Images
Paste a screenshot or attach an image directly in the chat. Use this to share a chart you want Humm to recreate, point at a UI state, or paste an error message for troubleshooting.
## Using @ References
Type `@` in the chat input to reference specific tables, columns, or SaaS objects. Humm fetches their metadata (schema, row counts, sample values) and focuses the analysis on exactly what you're pointing at.
**Syntax:**
* `@[table:customers]` — a database table
* `@[column:users.email]` — a specific column
* `@[saas_object:Contact]` — a CRM/SaaS object type
* `@[saas_field:Contact.owner]` — a specific field on an object
This is especially useful when your schema has similarly named tables or when you want Humm to skip discovery and go straight to the right data.
## When to Start a New Thread
Start a new thread when you're switching to a completely different topic. If you're still exploring the same general area, keep going in the same thread. The context helps Humm give better answers.
# Getting Started
Source: https://docs.heyhumm.ai/getting-started
Set up Humm and ask your first question in under ten minutes.
## Before You Begin
To get started, you'll need:
* An invitation to your organization's Humm workspace (check your email)
* Login credentials (usually your company SSO)
* A data source to connect (your admin may have already set this up)
If you're not sure whether your organization has Humm set up, reach out to your manager or IT team.
***
## Step 1: Log In to Humm
1. Go to [app.heyhumm.ai](https://app.heyhumm.ai/)
2. Click **Log In** and sign in with your company credentials (SSO)
3. You should see your organization name in the bottom left corner
If you're joining an existing team, you'll likely see integrations and threads that others have already created. Feel free to explore!
***
## Step 2: Connect Your Data
Before Humm can answer questions, it needs access to your data. If your admin hasn't already set up integrations, here's how to add one:
1. Click **Integrations** in the sidebar
2. Click **Browse Catalog** to see available data sources
3. Select the integration you want (e.g., Snowflake, HubSpot, Salesforce)
4. Fill out the connection details and click **Save**
5. Click the **Introspect Schema** button to let Humm learn your data structure
Start with your most important data source—usually your data warehouse (Snowflake, BigQuery) or CRM (Salesforce, HubSpot). You can always add more integrations later.
After a few minutes, Humm will understand your data and be ready to answer questions.
***
## Step 3: Ask Your First Question
Time to ask your first question.
1. Click the **+ New** button in the top left to start a new thread
2. Type a question in plain English
3. Press **Send** and watch Humm work
### Questions to try
Not sure what to ask? Here are some ideas to get you started:
* "Which of my accounts are at risk of churning?"
* "Show me accounts with declining product usage this month"
* "What's the health status of \[Account Name]?"
* "Prepare a QBR summary for \[Account Name]"
* "What should I know before my call with \[Account Name]?"
* "Show me recent support tickets for \[Account Name]"
* "How is my book of business performing this quarter?"
* "Which accounts have upcoming renewals?"
* "Show me my largest accounts by ARR"
***
## Step 4: Dig Deeper with Follow-ups
Humm remembers the context of your conversation. After getting an initial answer, ask follow-up questions to explore further:
* "Why is their usage declining?"
* "Show me this as a chart"
* "What actions should I take?"
* "Compare this to last quarter"
Each thread saves your full conversation, so you can come back to it anytime.
***
## What's Next?
Connect more data sources to give Humm a complete picture of your customers.
Understand threads, commands, memories, and more.
# Context Management via API
Source: https://docs.heyhumm.ai/guides/context-management-api
Use the Humm API to review and update memories, ontology, and commands with a safe preview-and-apply workflow.
If you already use the Humm API, the simplest way to manage business context programmatically is to work directly with the existing Memories, Ontology, and Commands endpoints.
This is the recommended path if you want to:
* Sync context from your own systems
* Let an AI assistant help draft updates
* Build repeatable internal workflows without waiting on new product features
## API vs. MCP
Use the API when you want to **change** business context.
Use the [Humm MCP Server](./humm-mcp-server) when you want to **query** Humm from an AI assistant.
Read, diff, approve, and apply updates to memories, ontology, and commands.
Explore data sources, search context, and run Humm queries from Claude, ChatGPT, or another MCP client.
## Recommended Workflow
For all context changes, follow the same pattern:
1. Fetch the current resource
2. Draft the proposed change locally
3. Show a diff or summary for human review
4. Apply the write only after approval
5. Re-fetch the resource and verify the result
Humm recommends a preview-and-approve step before any write, even if you automate the rest of the workflow.
## Guides
* [Manage Memories via API](./manage-memories-via-api)
* [Manage Ontology via API](./manage-ontology-via-api)
* [Manage Commands via API](./manage-commands-via-api)
## Using an AI Assistant
You do not need a Humm-specific plugin for these workflows. Give your assistant:
* Your API base URLs
* A bearer token or PAT
* The workflow you want it to follow
* A requirement to preview changes before applying them
If your assistant runs shell commands for you, make sure your token is available
to non-interactive shells. For example, export `HUMM_PAT` from `~/.zshenv` for
zsh or `~/.bash_profile` for bash, rather than only from an interactive shell
profile.
Example prompt:
```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
Use the Humm API to update our business context.
Rules:
- Resolve the correct organization before making any request
- Fetch the current resource before proposing edits
- Save the current version locally so you can compare before and after
- Make surgical changes only; preserve structure, naming, and unchanged content
- Show me the exact diff or changed content plus a short summary of what changed
- Do not apply the write until I approve it
- After applying the write, re-fetch the resource and verify the updated state
```
## Next Steps
Start with the guide that matches the resource you want to manage:
* [Memories](./manage-memories-via-api)
* [Ontology](./manage-ontology-via-api)
* [Commands](./manage-commands-via-api)
# Creating BigQuery Service Account Credentials
Source: https://docs.heyhumm.ai/guides/creating-bigquery-service-account-credentials
How to generate and configure service account credentials for BigQuery integrations.
## 1. Create a Service Account
1. Go to the [Google Cloud Console](https://console.cloud.google.com/) and select the project that contains your BigQuery instance
2. Navigate to **IAM & Admin** > **Service Accounts**
3. Click **+ Create service account**
4. Follow the prompts to fill out the form
## 2. Grant Required Permissions
When you get to the "Permissions" stage, select the following roles:
| Role | Description |
| - | - |
| **BigQuery Data Viewer** (`roles/bigquery.dataViewer`) | Allows reading data from BigQuery tables |
| **BigQuery Job User** (`roles/bigquery.user`) | Allows running queries and jobs |
| **BigQuery Read Session User** (`roles/bigquery.readSessionUser`) | Required for efficient data transfer when reading large result sets |
Alternatively, you can create a custom role with read access to the specific datasets you would like Humm to access.
## 3. Generate a JSON Key
Once the service account is created, you need to create an access key for Humm to use:
1. From the Service Accounts list view, find the service account you created
2. Click **Actions** > **Manage keys**
3. Click **Add key** > **Create new key**
4. Select **JSON** as the key type
This will download a credentials file to your local machine.
Store this credentials file securely. Do **not** commit it to git or share it publicly. This file grants access to your BigQuery data.
## 4. Upload the Credentials to Humm
1. [Log into Humm](https://app.heyhumm.ai) and navigate to **Integrations** > **Add Integration**
2. Locate BigQuery and click **Configure**
3. Fill out the form as directed and paste the contents of the downloaded credentials file into the **Service account credentials JSON** field
Alternatively, you can provide the credentials file to your Humm account rep and we can configure the connection for you.
# Creating Snowflake Private Keys
Source: https://docs.heyhumm.ai/guides/creating-snowflake-private-keys
How to generate and configure private keys for Snowflake integrations.
## 1. Generate an RSA Private Key
Generate a 2048 or 4096-bit RSA private key:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
# 2048-bit (fast, secure enough for most uses)
openssl genrsa -out rsa_key.pem 2048
# Or 4096-bit (stronger, slower)
openssl genrsa -out rsa_key.pem 4096
```
## 2. Convert to PKCS#8 Format
First, create an unencrypted PKCS#8 key:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in rsa_key.pem -out rsa_key.p8
```
Then, create an **encrypted** PKCS#8 key (Humm prefers encrypted keys):
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
openssl pkcs8 -topk8 -inform PEM -outform PEM -in rsa_key.pem -out rsa_key_encrypted.p8 -passout pass:YOUR_PASSPHRASE
```
## 3. Extract the Public Key
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
openssl rsa -in rsa_key.pem -pubout -out rsa_key.pub
```
## 4. Secure the Private Key File
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
chmod 600 rsa_key.p8
# or
chmod 600 rsa_key_encrypted.p8
```
Store the private key file somewhere safe. Do **not** commit it to git.
## 5. Upload the Public Key to Snowflake
Open Snowflake with a role that has user-admin rights and add the public key to the user that will authenticate.
Copy the full contents of `rsa_key.pub` (including the header and footer lines) and run:
```sql theme={"theme":{"light":"github-light","dark":"github-dark"}}
ALTER USER
SET RSA_PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkq... (rest of key) ...
-----END PUBLIC KEY-----';
```
## 6. Upload the Private Key to Humm
1. Log into Humm and create a Snowflake integration
2. Choose **Private Key** as the authentication method
3. Upload the private key (`.p8` file)
4. Enter the passphrase if you created an encrypted key
# Customer-Hosted Data Sync
Source: https://docs.heyhumm.ai/guides/customer-hosted-data-sync
Humm can sync SaaS data into an S3 bucket in your AWS account instead of storing that synced data in Humm-managed storage.
In this setup:
* The synced data lives in your S3 bucket.
* Humm still manages the Glue catalog and query path.
* Humm and Airbyte assume a role in your AWS account to write, validate, and query the synced data.
## Before You Start
You will need:
* Permission in your AWS account to create or update an S3 bucket, IAM policy, and IAM role, and IAM user
* Organization admin access in Humm
## 1. Create or Choose an S3 Bucket
Create a new bucket or choose an existing one for Humm sync data.
Recommendations:
* Use a dedicated bucket for Humm sync data
* Keep **Block Public Access** enabled
* Choose the AWS region you want Humm to use for sync storage
* Avoid pointing Humm at a bucket that contains unrelated production data
Important
Humm uses the bucket as the root warehouse location. Use a dedicated bucket instead of a shared bucket with unrelated objects. Do not allow any other processes to write to this bucket.
## 2. Create an IAM Permission Policy
Create an IAM policy that gives the Humm sync role access to the bucket.
Replace `YOUR_BUCKET_NAME` and `YOUR_GLUE_ACCOUNT_ID`
```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetObject*",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket*"
],
"Resource": [
"arn:aws:s3:::YOUR_BUCKET_NAME",
"arn:aws:s3:::YOUR_BUCKET_NAME/*"
]
},
{
"Effect": "Allow",
"Action": [
"glue:GetDatabase",
"glue:GetDatabases",
"glue:CreateDatabase",
"glue:UpdateDatabase",
"glue:GetTable",
"glue:GetTables",
"glue:GetTableVersion",
"glue:GetTableVersions",
"glue:CreateTable",
"glue:UpdateTable",
"glue:DeleteTable",
"glue:GetPartition",
"glue:GetPartitions",
"glue:BatchGetPartition",
"glue:BatchCreatePartition",
"glue:BatchDeletePartition"
],
"Resource": [
"arn:aws:glue:us-east-1:YOUR_GLUE_ACCOUNT_ID:catalog",
"arn:aws:glue:us-east-1:YOUR_GLUE_ACCOUNT_ID:database/*",
"arn:aws:glue:us-east-1:YOUR_GLUE_ACCOUNT_ID:table/*/*"
]
},
{
"Effect": "Allow",
"Action": [
"athena:GetQueryExecution",
"athena:GetQueryResults",
"athena:StartQueryExecution",
"athena:StopQueryExecution"
],
"Resource": "*"
}
]
}
```
Why these permissions are needed:
* `s3:ListBucket*` lets Humm discover objects and prefixes
* `s3:GetBucketVersioning` lets Humm verify immutable object versioning before use
* `s3:PutObject` lets Humm write synced data and run connection validation
* `s3:DeleteObject` lets Humm clean up connector-owned data and remove the validation file
* `s3:GetObject*` lets Humm query synced data
* `glue:*` allows Humm to create and manage databases and tables on your behalf
* `athena:*` allows Humm to execute queries against the data warehouse
## 3. Enable S3 Bucket Versioning
Enable versioning on the bucket before testing the connection. New S3 buckets are unversioned by default, and Humm requires versioning to verify immutable synced data.
Using the AWS CLI:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
aws s3api put-bucket-versioning \
--bucket YOUR_BUCKET_NAME \
--versioning-configuration Status=Enabled
```
In the AWS console, open the bucket's **Properties**, select **Bucket Versioning**, choose **Enable**, and save. Confirm the bucket shows **Enabled** before continuing.
## 4. Create an IAM User for Humm
Create an IAM user for Humm; attach the policy above directly, or via a role definition. Generate
## 5. Enter the Settings in Humm
In Humm:
1. Go to **Settings** > **Data Storage**
2. Select **Customer-hosted**
3. Enter your S3 bucket name, AWS region, Access Key ID, and Secret Access Key
4. Click **Test connection**
5. If successful, click **Save**
The test connection verifies that Humm can:
* Reach the bucket
* Write a temporary validation object
* Delete that validation object
During validation, Humm writes and deletes a temporary file at `.humm/validation.txt`.
## 6. Start or Re-run Your Sync
Once the storage settings are saved, create a new Data Sync connector or re-run setup for an existing one.
Humm will then:
* Configure itself to write into your S3 bucket
* Keep the Glue catalog in Humm-managed AWS
* Query the synced data through Athena
## Do I Need a Bucket Policy?
Usually, no.
In the standard setup, the IAM role permissions are enough. You only need additional bucket policy changes if your AWS environment uses explicit deny rules or other organization-level controls.
## Need Help?
If you want, Humm can review your proposed trust policy and role ARN before you save the configuration.
# Humm MCP Server
Source: https://docs.heyhumm.ai/guides/humm-mcp-server
Connect to Humm from any MCP-compatible AI assistant and run queries without leaving your workflow.
The Humm MCP Server is currently in ALPHA release. It may contain significant bugs and/or change significantly from its current implementation.
Humm has a native MCP (Model Context Protocol) server. Connect to it from an AI assistant like Claude Desktop, Claude Code, or ChatGPT and call Humm agents directly.
Use MCP for querying and exploration. If you want to update memories, ontology, or commands, use the API workflows in [Context Management via API](./context-management-api).
## What This Unlocks
* Run Humm queries from inside your AI assistant
* Automate workflows that combine Humm data with other tools
* Get answers about your customers without switching context
## Prerequisites
* An MCP-compatible AI assistant (Claude Desktop, Claude Code, ChatGPT, or any tool that supports MCP)
* A Humm account
## Setup
Humm uses OAuth2 for authentication. The exact steps depend on your AI assistant, but the flow is the same everywhere.
**Using Claude Desktop as an example:**
1. Open your MCP client settings (in Claude Desktop: Settings > MCP Servers)
2. Add a new MCP server and point it to Humm's MCP endpoint:
```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
https://analyst.heyhumm.ai/mcp
```
3. When prompted, sign in with your Humm account to authorize the connection
4. Once connected, Humm's tools appear in your assistant's available tools
## Available Tools
| Tool | Purpose |
| - | - |
| `list_connections` | See connected data sources / SaaaS Apps (no heavy schema) |
| `search_tools` | Discover executable SaaS and SQL tools, optional query filter |
| `get_tool_detail` | Full schema/params for a tool (`tool_name`, optional `data_source_id`) |
| `execute_tool` | Run SQL or SaaS tools from discovery |
| `search_context` | Business context / data dictionary search (`query`, optional filters) |
## Tips
* Pair with other MCP servers (like your code editor or project tracker) to build workflows that span multiple tools
* Use the same natural language you'd use in a Humm thread — the MCP server routes your question to the same agents
## When to Use MCP vs. API
Use the Humm MCP Server when you want an assistant to:
* Inspect connected data sources
* Discover available tools
* Search business context
* Run Humm queries without leaving your editor or assistant
Use the Humm API when you want to:
* Update memories
* Refine ontology
* Create or edit commands
* Build review-and-approve workflows around context changes
# Manage Commands via API
Source: https://docs.heyhumm.ai/guides/manage-commands-via-api
Create, update, and verify reusable Humm commands through the Analyst API.
Use this workflow when you want to manage reusable prompts outside the Humm UI.
## Before You Begin
You will need:
* Your organization ID
* A Humm API token
* The Analyst API base URL, usually `https://analyst.heyhumm.ai`
The public resource is called a command. If you see older internal references to "slash commands" or "slashies," use the Commands API instead.
## Recommended Flow
1. List existing commands
2. Fetch the command you want to update
3. Draft the revised content locally
4. Review the diff
5. Apply the `PUT`
6. Re-fetch the command and inspect version history
7. Restore an earlier version if you need to roll back the change
## 1. List Commands
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/commands?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
## 2. Fetch the Current Command
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/commands/$COMMAND_ID?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
## 3. Apply the Update
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request PUT \
--url "https://analyst.heyhumm.ai/commands/$COMMAND_ID?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT" \
--header "Content-Type: application/json" \
--data '{
"description": "Prepare a QBR with product usage, support risk, and NPS context.",
"content": "Prepare a QBR summary for {{account_name}} including:\n- Health score trends over the last 6 months\n- Product usage highlights\n- Open support tickets\n- NPS trends\n- Expansion opportunities"
}'
```
## Python Example
```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
import difflib
import os
import requests
base_url = "https://analyst.heyhumm.ai"
headers = {"Authorization": f"Bearer {os.environ['HUMM_PAT']}"}
org_id = os.environ["ORG_ID"]
command_id = os.environ["COMMAND_ID"]
current = requests.get(
f"{base_url}/commands/{command_id}",
params={"organization_id": org_id},
headers=headers,
timeout=30,
)
current.raise_for_status()
command = current.json()
old_content = command["content"]
new_content = old_content + "\n- NPS trends\n"
print("\n".join(difflib.unified_diff(
old_content.splitlines(),
new_content.splitlines(),
fromfile="before.md",
tofile="after.md",
lineterm="",
)))
approved = input("Apply command update? [y/N] ").strip().lower() == "y"
if approved:
updated = requests.put(
f"{base_url}/commands/{command_id}",
params={"organization_id": org_id},
headers={**headers, "Content-Type": "application/json"},
json={
"description": command.get("description"),
"content": new_content,
},
timeout=30,
)
updated.raise_for_status()
print(updated.json()["updated_at"])
```
## TypeScript Example
```ts theme={"theme":{"light":"github-light","dark":"github-dark"}}
const baseUrl = "https://analyst.heyhumm.ai";
async function updateCommand(orgId: string, commandId: string, token: string) {
const current = await fetch(
`${baseUrl}/commands/${commandId}?organization_id=${orgId}`,
{ headers: { Authorization: `Bearer ${token}` } },
);
if (!current.ok) throw new Error(`Fetch failed: ${current.status}`);
const command = await current.json();
const newContent = `${String(command.content)}\n- NPS trends\n`;
console.log("Preview only:");
console.log({ before: command.content, after: newContent });
const res = await fetch(
`${baseUrl}/commands/${commandId}?organization_id=${orgId}`,
{
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
description: command.description,
content: newContent,
}),
},
);
if (!res.ok) throw new Error(`Update failed: ${res.status}`);
return res.json();
}
```
## Prompt Your Assistant
```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
Use the Humm Analyst API to update one of our commands.
Organization:
- Use this organization ID: $ORG_ID
Change request:
- Update the command to reflect the change I describe
Workflow:
1. List commands for the organization
2. If I did not give an exact command name or ID, show likely matches and wait for me to choose
3. Fetch the full selected command
4. Save the current command content locally as a backup
5. Review the command before editing:
- name
- description
- content
- placeholders like {{account_name}}
6. Draft the updated command locally
7. Keep the edit surgical:
- preserve sections that already work
- preserve placeholders unless I explicitly want them changed
- preserve the command name unless renaming is part of the request
8. Show me:
- the full before/after diff
- a short summary of the behavior change
- any recommended description update
9. Wait for explicit approval before calling PUT
10. After the update succeeds, re-fetch the command
11. Also fetch command history and confirm:
- the content matches the approved version
- the description is correct
- updated_at changed
- the new version appears in history
Constraints:
- Do not call PUT until I approve the diff
- Do not hardcode values that should remain parameterized
- If the requested change would require a new command instead of editing the current one, say so before writing
```
## Verification
Fetch the command again:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/commands/$COMMAND_ID?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
You can also inspect version history:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/commands/$COMMAND_ID/history?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
Confirm:
* The prompt content matches the approved version
* The description is still accurate
* The command history reflects the update
## Restore a Previous Version
If a revision did not work out, restore a prior snapshot instead of rebuilding the command from scratch.
1. List command history and choose the version you want to restore
2. Call the restore endpoint for that snapshot
3. Fetch the command again and confirm the restored content is live
4. Re-check history to confirm the restore was recorded
### Restore with curl
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request POST \
--url "https://analyst.heyhumm.ai/commands/$COMMAND_ID/history/$VERSION_ID/restore?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
### Verify the restore
Fetch the command again:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/commands/$COMMAND_ID?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
Then fetch history again:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/commands/$COMMAND_ID/history?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
Confirm:
* The live command now matches the restored snapshot
* `updated_at` changed
* History includes a new restore event
## Notes
* Keep command names stable unless you are intentionally renaming them.
* Use descriptive placeholders like `{{account_name}}` instead of vague variables.
* If a command is widely used, review the content carefully before updating it for the whole team.
# Manage Memories via API
Source: https://docs.heyhumm.ai/guides/manage-memories-via-api
Search, review, update, and verify Humm memories using the public API.
Use this workflow when a business fact changed and you want to update the memories Humm uses in future conversations.
## Before You Begin
You will need:
* Your organization ID
* A Humm API token
* The Analyst API base URL, usually `https://analyst.heyhumm.ai`
Memories are best updated with a review step. Search first, inspect the current memory, then patch the specific content you want to change.
## Recommended Flow
1. Search for relevant memories with a broad natural-language query
2. Pick the memory you want to change
3. Fetch the full current memory
4. Draft the updated content locally
5. Review the diff
6. Apply the `PATCH`
7. Re-fetch the memory and verify the result
## 1. Search Memories
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/memories/search/semantic?organization_id=$ORG_ID&query=support%20SLA%2024%20hours&limit=5" \
--header "Authorization: Bearer $HUMM_PAT"
```
Results are ordered by semantic similarity. The search includes all memory
statuses unless you add a `status` parameter, such as `status=approved`.
## 2. Fetch the Current Memory
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/memories/$MEMORY_ID?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
Example response fields to keep:
* `id`
* `content`
* `tags`
* `status`
* `updated_at`
## 3. Apply the Update
Update only the fields you want to change.
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request PATCH \
--url "https://analyst.heyhumm.ai/memories/$MEMORY_ID?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT" \
--header "Content-Type: application/json" \
--data '{
"content": "The support SLA is 24 hours, not 48 hours.",
"tags": ["support", "sla"]
}'
```
## Python Example
```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
import difflib
import os
import requests
base_url = "https://analyst.heyhumm.ai"
headers = {"Authorization": f"Bearer {os.environ['HUMM_PAT']}"}
org_id = os.environ["ORG_ID"]
memory_id = os.environ["MEMORY_ID"]
current = requests.get(
f"{base_url}/memories/{memory_id}",
params={"organization_id": org_id},
headers=headers,
timeout=30,
)
current.raise_for_status()
memory = current.json()
old_content = memory["content"]
new_content = old_content.replace("48 hours", "24 hours")
print("\n".join(difflib.unified_diff(
old_content.splitlines(),
new_content.splitlines(),
fromfile="before",
tofile="after",
lineterm="",
)))
approved = input("Apply update? [y/N] ").strip().lower() == "y"
if approved:
updated = requests.patch(
f"{base_url}/memories/{memory_id}",
params={"organization_id": org_id},
headers={**headers, "Content-Type": "application/json"},
json={"content": new_content, "tags": memory.get("tags", [])},
timeout=30,
)
updated.raise_for_status()
print(updated.json()["updated_at"])
```
## TypeScript Example
```ts theme={"theme":{"light":"github-light","dark":"github-dark"}}
const baseUrl = "https://analyst.heyhumm.ai";
async function updateMemory(orgId: string, memoryId: string, token: string) {
const current = await fetch(
`${baseUrl}/memories/${memoryId}?organization_id=${orgId}`,
{ headers: { Authorization: `Bearer ${token}` } },
);
if (!current.ok) throw new Error(`Fetch failed: ${current.status}`);
const memory = await current.json();
const newContent = String(memory.content).replace("48 hours", "24 hours");
console.log("Preview only:");
console.log({ before: memory.content, after: newContent });
const res = await fetch(
`${baseUrl}/memories/${memoryId}?organization_id=${orgId}`,
{
method: "PATCH",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
content: newContent,
tags: memory.tags ?? [],
}),
},
);
if (!res.ok) throw new Error(`Update failed: ${res.status}`);
return res.json();
}
```
## Prompt Your Assistant
```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
Use the Humm Analyst API to update a memory.
Organization:
- Use this organization ID: $ORG_ID
Change request:
- Update any memory that still says the support SLA is 48 hours so it correctly says 24 hours
Workflow:
1. Generate 3-5 search queries with different phrasings, not just one exact phrase
2. Search memories with several phrasings so you do not miss likely candidates
3. Deduplicate the results and show me the top candidates with:
- memory ID
- a short content preview
- tags
- which search query matched
4. Wait for me to choose which memory to update
5. Fetch the full selected memory and save the current content locally as a backup
6. Draft the proposed replacement content locally
7. Keep the edit surgical:
- preserve structure and writing style
- update only the fact that changed
- preserve tags unless there is a clear reason to change them
8. Show me:
- the full before/after diff
- a short summary of what changed
- whether you recommend changing any tags
9. Wait for explicit approval before calling PATCH
10. After the PATCH succeeds, re-fetch the memory and confirm:
- content reflects the approved change
- tags are correct
- updated_at changed
Constraints:
- Do not patch a memory until I approve the diff
- If no good candidates are found, stop and show me the search results instead of guessing
- If the memory topic would fundamentally change, tell me to create a new memory instead of rewriting it
```
## Verification
After the update, fetch the memory again:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://analyst.heyhumm.ai/memories/$MEMORY_ID?organization_id=$ORG_ID" \
--header "Authorization: Bearer $HUMM_PAT"
```
Confirm:
* The content matches the approved update
* Tags are still correct
* `updated_at` changed
## Notes
* Updating memory content through the API also refreshes the memory embeddings used for semantic search.
* Semantic search ranks results by similarity without applying a similarity cutoff.
* If a fact is completely outdated, you can also reject or delete the memory instead of editing it.
# Manage Ontology via API
Source: https://docs.heyhumm.ai/guides/manage-ontology-via-api
Review and update your business ontology through the Humm Config API with versioned changes.
Use this workflow when you want to refine how Humm understands your business entities, relationships, metrics, and glossary terms.
## Before You Begin
You will need:
* Your organization ID
* A Humm API token
* The Config API base URL, usually `https://config.heyhumm.ai/api`
Ontology updates create a new version. Fetch the current ontology first, make your edits locally, and include a short `change_log` when you save.
## Recommended Flow
1. Fetch the current ontology
2. Save the JSON or YAML locally
3. Draft your changes
4. Review the diff
5. Apply the `PUT`
6. Verify the new version
## 1. Fetch the Current Ontology
JSON:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology" \
--header "Authorization: Bearer $HUMM_PAT"
```
YAML:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology?format=yaml" \
--header "Authorization: Bearer $HUMM_PAT"
```
## 2. Apply the Update
You can send either `ontology` JSON or `yaml`. YAML is often easier to diff and review.
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request PUT \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology" \
--header "Authorization: Bearer $HUMM_PAT" \
--header "Content-Type: application/json" \
--data '{
"change_log": "Add Subscription entity and define NRR",
"yaml": "metadata:\n organization_name: Acme Corp\nbusiness_entities:\n - name: Subscription\n type: Thing\n description: Recurring customer contract\nrelationships: []\ndata_entity_mappings: {}\nkey_metrics:\n - name: Net Revenue Retention\n description: Revenue retained from existing customers including expansion\n involved_entities:\n - Subscription\nbusiness_glossary:\n NRR: Net Revenue Retention\nbusiness_rules: []\n"
}'
```
## Python Example
```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
import difflib
import os
import requests
import yaml
base_url = "https://config.heyhumm.ai/api"
headers = {"Authorization": f"Bearer {os.environ['HUMM_PAT']}"}
org_id = os.environ["ORG_ID"]
current = requests.get(
f"{base_url}/organization/{org_id}/ontology",
params={"format": "yaml"},
headers=headers,
timeout=30,
)
current.raise_for_status()
current_yaml = current.json()["yaml"]
ontology = yaml.safe_load(current_yaml) or {}
glossary = dict(ontology.get("business_glossary") or {})
glossary["NRR"] = "Net Revenue Retention"
ontology["business_glossary"] = glossary
proposed_yaml = yaml.safe_dump(ontology, sort_keys=False, default_flow_style=False)
print("\n".join(difflib.unified_diff(
current_yaml.splitlines(),
proposed_yaml.splitlines(),
fromfile="before.yaml",
tofile="after.yaml",
lineterm="",
)))
approved = input("Apply ontology update? [y/N] ").strip().lower() == "y"
if approved:
res = requests.put(
f"{base_url}/organization/{org_id}/ontology",
headers={**headers, "Content-Type": "application/json"},
json={
"yaml": proposed_yaml,
"change_log": "Add NRR glossary term",
},
timeout=30,
)
res.raise_for_status()
print(res.json()["version"])
```
## TypeScript Example
```ts theme={"theme":{"light":"github-light","dark":"github-dark"}}
const baseUrl = "https://config.heyhumm.ai/api";
async function updateOntology(orgId: string, token: string) {
const current = await fetch(
`${baseUrl}/organization/${orgId}/ontology`,
{ headers: { Authorization: `Bearer ${token}` } },
);
if (!current.ok) throw new Error(`Fetch failed: ${current.status}`);
const body = await current.json();
const ontology = body.ontology ?? {};
const proposedOntology = {
...ontology,
business_glossary: {
...(ontology.business_glossary ?? {}),
NRR: "Net Revenue Retention",
},
};
console.log("Preview only:");
console.log({
before: ontology.business_glossary ?? {},
after: proposedOntology.business_glossary,
});
const res = await fetch(`${baseUrl}/organization/${orgId}/ontology`, {
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
ontology: proposedOntology,
change_log: "Add NRR glossary term",
}),
});
if (!res.ok) throw new Error(`Update failed: ${res.status}`);
return res.json();
}
```
## Prompt Your Assistant
```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
Use the Humm Config API to update our ontology.
Organization:
- Use this organization ID: $ORG_ID
Change request:
- Add or update the ontology based on the change I describe
Workflow:
1. Fetch the current ontology in YAML form first
2. Save the current YAML locally as a backup
3. Review the current ontology before editing:
- metadata
- business_entities
- relationships
- key_metrics
- business_glossary
- business_rules
4. Draft the proposed YAML locally
5. Keep the change narrow and intentional:
- preserve existing structure and formatting when possible
- add only the entities, relationships, metrics, glossary terms, or rules needed for this change
- do not rename unrelated concepts
6. Validate the proposal before applying it:
- relationships should reference real entities
- descriptions should stay concise
- the change should fit the existing ontology instead of rewriting it broadly
7. Show me:
- the YAML diff
- a short summary of what changed
- any validation concerns or assumptions
8. Wait for my approval before calling PUT
9. Include a clear change_log in the write request
10. After the write succeeds, re-fetch:
- the current ontology
- the ontology versions list
11. Confirm:
- the version number increased
- the saved ontology matches the approved diff
- the version history includes the intended change_log
Constraints:
- Do not call PUT until I approve the diff
- Prefer YAML for review unless I explicitly ask for JSON
- If the request is ambiguous, identify the missing business detail before making edits
```
## Verification
After saving, verify both the current ontology and version history:
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology" \
--header "Authorization: Bearer $HUMM_PAT"
```
```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request GET \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology/versions" \
--header "Authorization: Bearer $HUMM_PAT"
```
Confirm:
* The returned ontology matches the approved changes
* The version number increased
* The version history includes your `change_log`
## Notes
* YAML is easier to review when you want a human in the loop.
* JSON is a better fit if you generate ontology updates programmatically.
* Do not append duplicate top-level YAML keys like `business_glossary` to the end of the document. Parse and update the existing structure instead, or send the merged JSON ontology payload.
* Keep changes narrow and intentional. Large ontology rewrites are harder to review and debug.
# Humm Documentation
Source: https://docs.heyhumm.ai/index
Connect data sources, build durable context, and use Humm's analyst workflows with confidence.
## What is Humm?
Humm connects to your data sources and answers questions about your customers in plain English. Ask which accounts are at risk this week, where expansion opportunities are, or what happened with a specific customer — and get an answer with charts, tables, and next steps.
Built for Customer Success, Post-Sales, and CX teams.
### What you can do with Humm
Ask "which accounts are at risk?" and get a ranked list with the signals driving each score.
Ask "which customers are using feature X but not on the enterprise plan?" and get a target list.
Ask "prepare a QBR for Acme Corp" and get usage trends, health metrics, open tickets, and talking points.
### How it works
1. **Connect your sources** — Sign in to your SaaS tools, databases, or other systems.
2. **Humm learns your business** — Humm automatically builds a knowledge graph of your data, entities, and relationships. Ready in minutes.
3. **Ask questions, get answers** — Type a question in plain English. Humm queries your data and returns charts, tables, and recommendations.
***
## Core Concepts
Understanding these five concepts will help you get the most out of Humm.
### Threads
Threads are conversations with Humm. Ask a question, see the reasoning and the answer, then ask follow-ups to dig deeper. Threads save automatically so you can return to past analyses anytime.
### Commands
Commands are reusable prompts that save you time on repetitive work. Instead of typing out the same detailed question each time, you create a Command once and run it whenever you need it.
**Common uses for Commands:**
* QBR preparation for a specific account
* Weekly portfolio health reviews
* New customer onboarding checklists
* Churn risk assessments
Commands turn hours of meeting prep into minutes. You can create Commands for yourself or share them with your team.
### Memories
Memories capture knowledge from your conversations — business definitions, data relationships, organizational context. Humm proposes them; you review and approve before they take effect. Over time, Memories make Humm's answers more accurate for your specific business.
### Integrations
Integrations connect Humm to your data. Warehouses (Snowflake, BigQuery, Athena), CRMs (Salesforce, HubSpot), product analytics (Mixpanel, Pendo), support tools (Intercom, Zendesk), and more. Setup takes a few minutes. Once connected, Humm discovers your schema automatically.
### Ontology
The ontology maps your business entities (Customers, Accounts, Products), how they relate, and the metrics you care about. Humm generates it automatically from your integrations. You can refine it to match how your team talks about the business — better ontology means more accurate answers.
***
## Next Steps
Set up your account and create your first thread.
Connect Humm to your data sources.
# Absorb
Source: https://docs.heyhumm.ai/integrations/absorb
Connect to Absorb LMS to track courses, enrollments, and learner progress.
Humm reads your Absorb courses, enrollments, users, and learning paths. Ask about completion rates, which learners are behind on training, or how enrollment is trending across groups.
## Source Types
Humm queries the Absorb API directly in real time. Data is never stored by Humm.
Humm syncs your Absorb data into your warehouse via Airbyte, then queries the copy. Better performance and lets you join LMS data with everything else in your warehouse.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## Tools
| Tool | Description |
| - | - |
| `ABSORB_LIST_COURSES` | List courses with pagination, filtering, and sorting |
| `ABSORB_GET_COURSE` | Get detailed course information by ID |
| `ABSORB_LIST_USER_ENROLLMENTS` | List a user's course enrollments with status and progress |
| `ABSORB_GET_USER_ENROLLMENT` | Get a user's enrollment details for a specific course |
| `ABSORB_LIST_COURSE_ENROLLMENTS` | List enrollments for a course, including progress, score, time spent, and date fields returned by Absorb |
| `ABSORB_LIST_COURSE_EVALUATION_ANSWERS` | List evaluation answers for a course |
| `ABSORB_LIST_COURSE_EVALUATION_QUESTIONS` | List evaluation questions for a course |
| `ABSORB_LIST_USERS` | List learners with pagination and filtering |
| `ABSORB_GET_USER` | Get detailed learner information by ID |
| `ABSORB_LIST_GROUPS` | List organizational groups |
| `ABSORB_GET_GROUP` | Get group details by ID |
| `ABSORB_LIST_ILC_SESSIONS` | List sessions for an instructor-led course |
| `ABSORB_LIST_ILC_SESSION_DETAILS` | List session details, including enrollment counts and limits, for one or more instructor-led courses |
| `ABSORB_LIST_DEPARTMENTS` | List departments for mapping learner department IDs to department names |
| `ABSORB_GET_DEPARTMENT` | Get a department by ID, including child departments referenced by learner records |
| `ABSORB_LIST_USER_LEARNING_PATHS` | List a user's assigned learning paths and curricula |
## Common Workflows
For course-level reporting, use `ABSORB_LIST_COURSE_ENROLLMENTS` instead of calling `ABSORB_LIST_USER_ENROLLMENTS` once per learner. Enrollment responses include the progress, score, time spent, and date fields that Absorb returns for the course.
For evaluation reporting, use `ABSORB_LIST_COURSE_EVALUATION_QUESTIONS` to retrieve question metadata and `ABSORB_LIST_COURSE_EVALUATION_ANSWERS` to retrieve learner responses. Use the optional `questionId` parameter when you want answers for one question only, and join answers to questions with the `questionId` field.
Absorb returns one evaluation-answer row per learner-question pair even when the learner did not answer. Unanswered rows come back with `rating=0` and `text=null`, so filter to answered rows when you calculate averages or review free-text responses. For example, use `_filter="rating gt 0"` for rating questions or `_filter="text ne null"` for free-text questions.
For instructor-led course reporting, use `ABSORB_LIST_COURSES` with a `courseType` filter to find instructor-led courses, then use `ABSORB_LIST_ILC_SESSIONS` and `ABSORB_LIST_ILC_SESSION_DETAILS` for session dates, class sizes, enrollment counts, and enrollment limits. Pass instructor-led course IDs in the `courseIds` body parameter to `ABSORB_LIST_ILC_SESSION_DETAILS`, not session IDs. The endpoint returns an empty list if you pass session IDs.
For department or company grouping, use `ABSORB_LIST_USERS` to read each learner's department identifier and `ABSORB_GET_DEPARTMENT` to resolve that department directly. Use `ABSORB_LIST_DEPARTMENTS` when you need to browse or filter the broader department list.
## OData Filter Syntax
Absorb uses OData filter syntax for querying data. Most paginated list tools support the `_filter` parameter.
### Supported Operators
* **Comparison**: `eq`, `ne`, `gt`, `ge`, `lt`, `le`
* **Logical**: `and`, `or`, `not`, `()`
* **Functions**: `substringof`, `endswith`, `startswith`, `tolower`, `toupper`
### Filter Examples
```
# Users with last name starting with "Smith"
startsWith(lastname, 'Smith')
# Users added after a specific date
dateAdded ge datetime'2024-01-01T00:00:00Z'
# Combine multiple conditions
startsWith(lastname, 'Smith') or dateAdded ge datetime'2024-01-01T00:00:00Z'
# Search by email domain
substringof('@example.com', emailAddress)
# Filter by custom field
customFields/string1 eq 'Department A'
```
## Pagination and Sorting
Most paginated list tools support pagination and sorting parameters:
| Parameter | Description |
| - | - |
| `_offset` | Row offset. Use `0` for the first records, `100` for rows `100-199` when `_limit=100`, and `1000` for rows `1000-1099`. Default: 0 |
| `_limit` | Maximum number of records to return. Default: 100, max: 1000 |
| `_sort` | Sort field. Prefix with `-` for descending order |
Enrollment list tools also support `modifiedSince` for incremental refreshes. Pass an ISO 8601 date-time, such as `2026-05-01T00:00:00Z`, to return enrollments edited after that time.
Most Absorb list tools auto-paginate within a single call. Set `_offset` manually only when you need records beyond the per-call cap.
### Sorting Examples
```
# Sort by name ascending
_sort=name
# Sort by creation date descending
_sort=-dateCreated
# Multi-field sort
_sort=lastname,firstname
```
## Authentication
Absorb uses custom authentication requiring three credentials:
* **Username**: Your Absorb account username
* **Password**: Your Absorb account password
* **Private API Key**: Obtain from Absorb Portal Settings
All three credentials are required to authenticate API requests.
# Amplitude
Source: https://docs.heyhumm.ai/integrations/amplitude
Connect to Amplitude for product analytics, event segmentation, and user behavior data.
Humm runs event segmentation queries against your Amplitude project. Ask about user engagement trends, compare cohorts, or break down events by any property.
## Source Types
Humm queries the Amplitude API directly in real time. Data is never stored by Humm.
Humm syncs your Amplitude data into your warehouse via Airbyte, then queries the copy. Better performance for large datasets and lets you join Amplitude data with everything else in your warehouse.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## Tools
| Tool | Description |
| - | - |
| `AMPLITUDE_RUN_AGGREGATION` | Execute event segmentation queries with metrics, filtering, grouping, and date ranges |
| `AMPLITUDE_LIST_COHORTS` | List all cohorts in the Amplitude project |
| `AMPLITUDE_GET_EVENT_TYPES` | Retrieve all event types in the project |
| `AMPLITUDE_GET_EVENT_CATEGORIES` | Retrieve all event categories |
| `AMPLITUDE_FIND_USER` | Search for users by Amplitude ID, device ID, or user ID |
## Aggregation Queries
The `AMPLITUDE_RUN_AGGREGATION` tool is the primary way to query Amplitude data. It supports event segmentation with flexible metrics and grouping.
### Metrics
| Metric | Description |
| - | - |
| `uniques` | Unique users (default) |
| `totals` | Total event count |
| `pct_dau` | Percentage of daily active users |
| `average` | Average events per user |
| `sums` | Sum of event property values |
| `value_avg` | Average of event property values |
| `formula` | Custom formula across two events |
### Parameters
| Parameter | Required | Description |
| - | - | - |
| `e` | Yes | Primary event definition (event type, filters, group-by) |
| `start` | Yes | Start date in `YYYYMMDD` format |
| `end` | Yes | End date in `YYYYMMDD` format |
| `m` | No | Metric type (default: `uniques`) |
| `i` | No | Time interval: `1` (daily), `7` (weekly), `30` (monthly), `-3600000` (hourly) |
| `g` | No | Primary group-by property |
| `s` | No | Segment filters on user population |
| `e2` | No | Second event (for formula queries) |
| `formula` | No | Custom formula (requires `m=formula` and both `e`/`e2`) |
### Event Definition
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"event_type": "Purchase",
"filters": [
{
"subprop_type": "event",
"subprop_key": "category",
"subprop_op": "is",
"subprop_value": ["Electronics"]
}
]
}
```
### Special Event Types
| Event Type | Description |
| - | - |
| `_active` | Any active event |
| `_all` | All events |
| `ce:name` | Custom events (prefix with `ce:`) |
### Group-By Properties
Built-in properties: `country`, `city`, `region`, `platform`, `os`, `device_type`, `version`, `paying`.
For custom properties, use the `gp:` prefix (e.g., `gp:plan_name`).
### Filter Operators
| Operator | Description |
| - | - |
| `is` / `is not` | Exact match |
| `contains` / `does not contain` | Substring match |
| `less` / `greater` | Numeric comparison |
| `less or equal` / `greater or equal` | Numeric comparison |
| `set is` / `set is not` | Set membership |
### Query Constraints
| Interval | Max Date Range |
| - | - |
| Real-time (`-300000`) | 2 days |
| Hourly (`-3600000`) | 7 days |
| Daily (`1`) | 365 days |
Rate limit: 5 concurrent queries.
## Authentication
Connect securely via OAuth. Authorize Humm to access your Amplitude project.
# Amazon Athena
Source: https://docs.heyhumm.ai/integrations/athena
Query your S3 data lake via Athena and AWS Glue Data Catalog.
Humm runs read-only SQL queries against your Athena tables, so you can ask questions about data sitting in S3 without moving it anywhere.
If you already have Parquet exports in S3, Humm can query them in place by registering them as Athena external tables. This is different from S3 Data Sync, which copies matching files through Airbyte before querying them.
## Tools
| Tool | Description |
| - | - |
| `EXECUTE_SQL` | Run read-only SQL queries against your Athena tables |
## Configuration
Humm uses your organization ID to scope the AWS Glue database automatically. The default AWS region is `us-east-1` — if your data lives in a different region, specify it when setting up the connection.
For large S3 Parquet archives, use partitioned tables and filter by partition columns such as year, month, and day before selecting large payload columns.
## Authentication
AWS Access Key ID and AWS Secret Access Key. The IAM user needs permissions for Athena queries and Glue Data Catalog access.
# Attio
Source: https://docs.heyhumm.ai/integrations/attio
Connect to Attio CRM for contact management and deal tracking.
Humm queries your Attio people, companies, and deals. Ask about pipeline, contact activity, or filter your CRM data with Attio's flexible query syntax.
## Source Types
Humm queries the Attio API directly in real time. Data is never stored by Humm.
Humm syncs your Attio data into your warehouse via Airbyte, then queries the copy. Better performance and lets you join CRM data with everything else in your warehouse.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## Tools
| Tool | Description |
| - | - |
| `ATTIO_LIST_RECORDS` | List records for an object type (people, companies, deals) with filtering and sorting |
| `ATTIO_READ_RECORD` | Get a record by ID and object type |
| `ATTIO_LIST_WORKSPACE_MEMBERS` | List all members of the Attio workspace |
## Filter and Sort Examples
Humm uses Attio's filter syntax to query records. Here are common patterns:
```
# List all people
object: "people"
# Filter by name
object: "people"
filter: {"name": "Ada Lovelace"}
# Filter with OR conditions
object: "people"
filter: {
"$or": [
{"name": {"first_name": {"$eq": "David"}}},
{"name": {"first_name": {"$eq": "Steve"}}}
]
}
# Sort by last name ascending
object: "people"
sorts: [{"direction": "asc", "attribute": "name", "field": "last_name"}]
# Sort by creation date descending
object: "companies"
sorts: [{"direction": "desc", "attribute": "created_at"}]
# Pagination
object: "deals"
limit: 100
offset: 0
```
## Object Types
Attio supports querying different object types:
* **people** - Contact records with names, emails, and custom fields
* **companies** - Organization records with company details
* **deals** - Deal/opportunity records for pipeline tracking
Use the object slug (e.g., `"people"`, `"companies"`, `"deals"`) or UUID to specify which object type to query.
## Authentication
Connect securely via Attio OAuth. Authorize Humm to access your Attio workspace.
# BigQuery
Source: https://docs.heyhumm.ai/integrations/bigquery
Connect to Google BigQuery data warehouse.
Humm runs read-only SQL queries against your BigQuery datasets. Ask questions about any table your service account can access.
## Tools
| Tool | Description |
| - | - |
| `EXECUTE_SQL` | Run SQL queries against your BigQuery datasets |
## Google Sheets-Backed Tables
Humm can query BigQuery tables backed by Google Sheets. Make sure the service account has Drive read access when setting up credentials.
## Authentication
Google Cloud service account with JSON credentials. Requires BigQuery Data Viewer and BigQuery Job User roles.
# Chargebee
Source: https://docs.heyhumm.ai/integrations/chargebee
Connect to Chargebee for subscription billing, invoices, and customer data.
Humm reads your Chargebee customers, subscriptions, invoices, and transactions. Ask about MRR by plan, which subscriptions are up for renewal, or what your refund volume looked like last month.
## Source Types
Humm queries the Chargebee API directly in real time. Data is never stored by Humm.
Humm syncs your Chargebee data into your warehouse via Airbyte, then queries the copy. Better performance and lets you join billing data with everything else in your warehouse.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## Tools
| Tool | Description |
| - | - |
| `CHARGEBEE_LIST_CUSTOMERS` | List customers with filtering by email and creation date |
| `CHARGEBEE_GET_CUSTOMER` | Get customer details by ID |
| `CHARGEBEE_LIST_SUBSCRIPTIONS` | List subscriptions with filtering by customer and status |
| `CHARGEBEE_GET_SUBSCRIPTION` | Get subscription details by ID |
| `CHARGEBEE_LIST_INVOICES` | List invoices with filtering by customer, status, and date |
| `CHARGEBEE_GET_INVOICE` | Get invoice details by ID |
| `CHARGEBEE_LIST_CREDIT_NOTES` | List credit notes with filtering by customer and status |
| `CHARGEBEE_GET_CREDIT_NOTE` | Get credit note by ID |
| `CHARGEBEE_LIST_TRANSACTIONS` | List transactions with filtering by customer and type |
| `CHARGEBEE_LIST_PAYMENT_SOURCES` | List payment methods with filtering by customer, type, and status |
| `CHARGEBEE_LIST_ORDERS` | List orders with filtering by customer and status |
| `CHARGEBEE_GET_ORDER` | Get order by ID |
| `CHARGEBEE_LIST_ITEMS` | List products (plans, addons, charges) with filtering by type |
| `CHARGEBEE_GET_ITEM` | Get item by ID |
| `CHARGEBEE_LIST_ITEM_PRICES` | List pricing configurations with filtering by item, type, and status |
| `CHARGEBEE_GET_ITEM_PRICE` | Get item price by ID |
| `CHARGEBEE_LIST_COUPONS` | List coupons with filtering by status and discount type |
| `CHARGEBEE_GET_COUPON` | Get coupon by ID |
| `CHARGEBEE_LIST_EVENTS` | List webhook events with filtering by event type and timestamp |
## Pagination
All list tools support pagination parameters:
| Parameter | Description |
| - | - |
| `limit` | Items per page (1–100, default 10) |
| `offset` | Cursor from previous response's `next_offset` for next page |
| `sort_by` | Sort field (e.g., `created_at`, `updated_at`). Prefix with `-` for descending |
## Filtering
Chargebee tools use named filter parameters. Common filters include:
| Filter | Description |
| - | - |
| `email_is` | Exact email match |
| `customer_id_is` | Filter by customer ID |
| `status_is` | Filter by status |
| `type_is` | Filter by type |
| `created_at_after` | Created after Unix timestamp |
| `item_id_is` | Filter by item ID |
| `event_type_is` | Filter by event type |
### Status Values by Resource
| Resource | Statuses |
| - | - |
| Subscription | `active`, `cancelled`, `non_renewing`, `future`, `paused`, `in_trial` |
| Invoice | `paid`, `posted`, `payment_due`, `not_paid`, `voided`, `pending` |
| Credit Note | `adjusted`, `refunded`, `refund_due`, `voided` |
| Order | `new`, `processing`, `complete`, `cancelled`, `voided`, `shipped`, `delivered`, `returned` |
| Item Price | `active`, `archived`, `deleted` |
| Coupon | `active`, `expired`, `archived`, `deleted` |
### Type Values by Resource
| Resource | Types |
| - | - |
| Transaction | `payment`, `refund`, `authorization` |
| Payment Source | `card`, `paypal_express_checkout`, `amazon_payments`, `direct_debit`, `bank_account` |
| Item | `plan`, `addon`, `charge` |
| Coupon Discount | `fixed_amount`, `percentage` |
## Authentication
Connect using your Chargebee site name and API key.
* **Site**: Your Chargebee subdomain (from `yoursite.chargebee.com`)
* **API Key**: Obtain from Chargebee Settings > Configure Chargebee > API Keys
# ChurnZero
Source: https://docs.heyhumm.ai/integrations/churnzero
Connect to ChurnZero customer success platform.
Humm reads your ChurnZero accounts, contacts, churn scores, and tasks. Ask which accounts have declining health scores, what churn factors are trending, or list open tasks for a CSM.
## Source Types
Humm queries the ChurnZero API directly in real time. Data is never stored by Humm.
Humm syncs your ChurnZero data into your warehouse via Airbyte, then queries the copy. Better performance and lets you join CS data with everything else in your warehouse.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## Tools
| Tool | Description |
| - | - |
| `CHURNZERO_GET_ACCOUNTS` | List accounts with health scores using OData queries |
| `CHURNZERO_GET_ACCOUNT` | Get account details by internal ChurnZero ID |
| `CHURNZERO_GET_ACCOUNT_BY_EXTERNAL_ID` | Get account by your system's external ID |
| `CHURNZERO_GET_CONTACTS` | List contacts with filtering by account or email |
| `CHURNZERO_GET_CHURN_SCORES` | List churn score definitions (names and metadata) |
| `CHURNZERO_GET_CHURN_SCORE_FACTORS` | List factors contributing to churn scores |
| `CHURNZERO_GET_CHURN_SCORE_CALCULATIONS` | Get historical churn score calculations for accounts |
| `CHURNZERO_GET_CHURN_SCORE_FACTOR_CALCULATIONS` | Get detailed calculation logs for churn score factors |
| `CHURNZERO_GET_TASKS` | List tasks and to-dos associated with accounts |
| `CHURNZERO_GET_USER_ACCOUNT` | Get details for a ChurnZero user (CSM, Admin, etc.) |
## OData Query Examples
Humm uses OData v4 query parameters to filter and paginate results. Here are common patterns:
```
# Active accounts with high contract value
$filter=IsActive eq true and TotalContractAmount gt 10000
# Accounts created after a specific date
$filter=ObjectCreatedDate gt 2024-01-01
# Sort by newest first
$orderby=ObjectCreatedDate desc
# Select specific fields only
$select=Id,Name,TotalContractAmount,IsActive
# Contacts for a specific account
$filter=AccountId eq 12345
# Open tasks for an account
$filter=AccountId eq 25322 and isClosed eq false
```
### OData Filter Limitations
ChurnZero's OData implementation has specific constraints:
* **No mixed operators**: Do not combine `and` and `or` in the same filter. Keep filters flat (all-`and` or all-`or`).
* **No ID filtering on list endpoints**: Cannot filter by `Id` or `AccountExternalId` on `/Account`. Use `CHURNZERO_GET_ACCOUNT` or `CHURNZERO_GET_ACCOUNT_BY_EXTERNAL_ID` instead.
* **Limited string functions**: `contains()`, `startswith()`, `endswith()` may not work on all endpoints. Fall back to exact `eq` matches if you get HTTP 400 errors.
### Supported Operators
| Operator | Example |
| - | - |
| `eq` | `Name eq 'Acme Corp'` |
| `ne` | `Status ne 'Active'` |
| `gt` | `TotalContractAmount gt 1000` |
| `ge` | `ObjectCreatedDate ge 2024-01-01` |
| `lt` | `TotalContractAmount lt 5000` |
| `le` | `ObjectCreatedDate le 2024-12-31` |
## Authentication
Connect using your ChurnZero username and password. Obtain your API credentials from your ChurnZero administrator.
# Confluence
Source: https://docs.heyhumm.ai/integrations/confluence
Search and read your team's Confluence spaces and pages.
Humm reads your Confluence pages, blog posts, and comments. Ask it to find documentation, summarize a space, or pull context from your team's knowledge base into an analysis.
## Objects Humm Can Access
| Object | Description |
| - | - |
| Pages | Wiki pages and their content |
| Spaces | Organized collections of pages |
| Blog Posts | Team blog entries |
| Comments | Discussion on pages and posts |
| Labels | Tags used to categorize content |
| Attachments | Files attached to pages |
## Authentication
Connect via your Atlassian account. Humm uses OAuth2, so you do not need to manage passwords or API tokens.
After you authorize Humm, you may be asked to choose which Confluence site to connect. Humm uses that site selection to scope access to the right Atlassian workspace.
If your Confluence connection was set up before June 9, 2026, reconnect it once. Humm now uses direct Atlassian OAuth for Confluence, and older connections are marked for re-authentication before they can run again.
# Custom REST API
Source: https://docs.heyhumm.ai/integrations/custom-rest-api
Connect to any REST API.
Connect to any REST API that returns JSON data, enabling integration with internal systems, custom services, or APIs without dedicated connectors.
## Tools
Tools for the Custom REST API connector are user-configured per deployment. Unlike other connectors with predefined tools, you define the API endpoints Humm can access based on your specific needs.
Each tool you configure maps to an API endpoint and includes:
* Tool name and description (used by the AI to understand when to use it)
* HTTP method and endpoint path
* Parameters (query, path, or body)
* Response parsing configuration
See [Configuring Custom Tools](#configuring-custom-tools) below for details.
## Authentication
Pass API key via header or query parameter.
Authorization header with bearer token.
Username and password authentication.
OAuth2-style token exchange for APIs requiring credential-based token refresh.
### Token Exchange Authentication
Token Exchange authentication supports APIs that require exchanging credentials for a short-lived access token. This is common in OAuth2-style APIs where you authenticate with a username/password or client credentials to receive a bearer token.
**Configuration fields:**
| Field | Description |
| - | - |
| `token_exchange_username` | Username for token exchange (stored securely) |
| `token_exchange_password` | Password for token exchange (stored securely) |
| `token_exchange_endpoint` | API endpoint for exchanging credentials (e.g., `/api/authentication`) |
| `token_exchange_method` | HTTP method for token exchange (POST or GET) |
| `token_exchange_body` | JSON body template with variable substitution |
| `token_response_path` | JSONPath to extract token from response (e.g., `accessToken`, `data.token`) |
| `token_expiry_path` | Optional JSONPath to extract expiry timestamp (Unix timestamp) |
| `token_expiry_buffer` | Seconds before expiry to refresh token (default: 300) |
**Variable substitution:**
The request body supports `${variable}` syntax for injecting sensitive values:
* `${username}` - Injects the configured username
* `${password}` - Injects the configured password
**Example configuration:**
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"token_exchange_endpoint": "/api/authentication",
"token_exchange_method": "POST",
"token_exchange_body": "{\"strategy\": \"local\", \"login\": \"${username}\", \"password\": \"${password}\"}",
"token_response_path": "accessToken",
"token_expiry_path": "authentication.payload.exp",
"token_expiry_buffer": 300
}
```
## Endpoint Configuration
### Test Endpoint
Configure a specific endpoint for testing connectivity. If not specified, the first custom tool is used.
| Field | Description |
| - | - |
| `test_endpoint` | Endpoint path for connection testing (e.g., `/api/health`) |
| `test_params` | JSON object of query parameters to include in test request |
### Introspection Endpoint
Configure automatic schema discovery to help Humm understand your API's data structures.
| Field | Description |
| - | - |
| `introspection_endpoint` | Endpoint for schema discovery (e.g., `/api/data`) |
| `introspection_params` | JSON query parameters for schema discovery (e.g., `{"limit": 1}`) |
| `introspection_cache_ttl` | How long to cache introspection results in seconds (default: 3600) |
| `introspection_max_depth` | Maximum nesting depth for nested objects (1-10, default: 3) |
| `introspection_data_key` | Field name containing the data array (e.g., `data`, `results`, `items`) |
## Configuring Custom Tools
Custom tools define the API endpoints Humm can access. Each tool maps to a specific API operation.
### Tool Definition Schema
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"name": "GET_CUSTOMERS",
"description": "Retrieve a list of customers with optional filtering",
"endpoint": "/api/v1/customers",
"method": "GET",
"parameters": [
{
"name": "limit",
"type": "integer",
"required": false,
"description": "Maximum number of results to return",
"default": 100
},
{
"name": "status",
"type": "string",
"required": false,
"description": "Filter by customer status (active, inactive)"
}
],
"query_parameters": ["limit", "status"],
"response_data_path": "data.customers"
}
```
### Tool Fields
| Field | Description |
| - | - |
| `name` | Unique tool name (convention: `VERB_RESOURCE`, e.g., `GET_ORDERS`) |
| `description` | Description for the AI explaining what this tool does |
| `endpoint` | API endpoint path, supports path parameters like `/users/{user_id}` |
| `method` | HTTP method: `GET`, `POST`, `PUT`, `PATCH`, or `DELETE` |
| `parameters` | Array of parameter definitions |
| `path_parameters` | Parameter names that appear in the endpoint URL |
| `query_parameters` | Parameter names sent as query string |
| `body_parameters` | Parameter names sent in request body |
| `body_template` | Template for complex request bodies (supports `{param}` substitution) |
| `response_data_path` | JSONPath to extract data from response (e.g., `data.records`) |
| `enabled_by_default` | Whether tool is enabled when integration is configured |
### Parameter Definition
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"name": "user_id",
"type": "string",
"required": true,
"description": "The unique identifier for the user",
"default": null
}
```
### Example: Complete Tool Configuration
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"name": "SEARCH_ORDERS",
"description": "Search orders by date range and status. Returns order details including line items.",
"endpoint": "/api/v2/orders/search",
"method": "POST",
"parameters": [
{
"name": "start_date",
"type": "string",
"required": true,
"description": "Start date in ISO 8601 format (e.g., 2024-01-01)"
},
{
"name": "end_date",
"type": "string",
"required": true,
"description": "End date in ISO 8601 format"
},
{
"name": "status",
"type": "string",
"required": false,
"description": "Order status filter (pending, shipped, delivered)"
},
{
"name": "limit",
"type": "integer",
"required": false,
"description": "Maximum results per page",
"default": 50
}
],
"body_parameters": ["start_date", "end_date", "status"],
"query_parameters": ["limit"],
"response_data_path": "data.orders"
}
```
### Path Parameters Example
For endpoints with dynamic segments:
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"name": "GET_ORDER_DETAILS",
"description": "Get detailed information about a specific order",
"endpoint": "/api/v2/orders/{order_id}",
"method": "GET",
"parameters": [
{
"name": "order_id",
"type": "string",
"required": true,
"description": "The order ID to retrieve"
}
],
"path_parameters": ["order_id"]
}
```
# Customer.io (Data Sync)
Source: https://docs.heyhumm.ai/integrations/customerio-sync
Sync Customer.io campaigns and messaging activity into your warehouse.
Humm syncs your Customer.io data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This is useful when you want marketing automation data alongside product, billing, and lifecycle data.
## Source Type
Humm copies Customer.io data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Customer.io live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Customer.io sync can include:
* Campaigns
* Campaign actions
* Newsletters
## Credentials
Connect using your Customer.io App API key.
## Best For
* Measuring lifecycle messaging activity alongside product usage and conversions
* Reviewing campaign operations in a shared warehouse
* Joining marketing sends with account, revenue, or support trends
# Databricks
Source: https://docs.heyhumm.ai/integrations/databricks
Connect to Databricks SQL warehouses.
Humm runs read-only SQL queries against your Databricks SQL warehouse. Ask questions about any table or view your token has access to.
## Tools
| Tool | Description |
| - | - |
| `EXECUTE_SQL` | Run SQL queries against your Databricks SQL warehouse |
## Authentication
Personal access token or service principal token with SQL warehouse access.
# Delighted (Data Sync)
Source: https://docs.heyhumm.ai/integrations/delighted-sync
Sync Delighted survey responses and people data into your warehouse.
Humm syncs your Delighted data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. Use this when you want customer sentiment data available next to product, support, or account data.
## Source Type
Humm copies Delighted data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Delighted live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Delighted sync can include:
* Survey responses
* People
* Bounced people
* Unsubscribed people
## Credentials
Connect using your Delighted API key.
## Best For
* Joining NPS and survey responses with account health or product usage
* Trend reporting on customer sentiment inside your warehouse
* Combining survey data with CRM and support history
# Freshdesk (Data Sync)
Source: https://docs.heyhumm.ai/integrations/freshdesk-sync
Sync Freshdesk tickets, contacts, and support data into your warehouse.
Humm syncs your Freshdesk data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. Use this when you want support operations data available with customer, billing, and product context.
## Source Type
Humm copies Freshdesk data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Freshdesk live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Freshdesk sync can include:
* Tickets and conversations
* Contacts and companies
* Agents and groups
* Satisfaction ratings
* Ticket fields and SLAs
* Products, roles, and business hours
* Knowledge base and forum content
* Time entries and automations
## Credentials
To connect Freshdesk data sync, provide:
* **API Key**
* **Domain** such as `yourcompany.freshdesk.com`
## Best For
* Joining support ticket history with product or revenue data
* Analyzing support workload, response patterns, and customer outcomes
* Reporting on support operations in the same warehouse as your other systems
# Gong
Source: https://docs.heyhumm.ai/integrations/gong
Connect to Gong revenue intelligence platform.
Humm reads your Gong call transcripts and interaction stats. Ask about conversation patterns, call volume by rep, or pull transcript snippets for a specific account.
## Tools
| Tool | Description |
| - | - |
| `GONG_LIST_USERS` | List all users in the workspace with pagination |
| `GONG_GET_USERS` | Retrieve one or more users by their Gong user IDs |
| `GONG_GET_CALL_TRANSCRIPTS` | Get call transcripts by call IDs or date range |
| `GONG_LIST_DETAILED_CALLS` | List detailed call data with participants, briefs, and interaction stats |
## Filter Parameters
Most Gong tools accept a `filter` parameter to scope results. Common filter options:
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
// Filter by date range
{
"filter": {
"fromDateTime": "2025-01-01T00:00:00Z",
"toDateTime": "2025-01-31T23:59:59Z"
}
}
// Filter by specific call IDs
{
"filter": {
"callIds": ["7782342274025937895", "7782342274025937896"]
}
}
// Filter by call owner (GONG_LIST_DETAILED_CALLS only)
{
"filter": {
"fromDateTime": "2025-01-01T00:00:00Z",
"toDateTime": "2025-01-31T23:59:59Z",
"primaryUserIds": ["234599484848423"]
}
}
```
## Pagination
All list tools support cursor-based pagination. When a response contains more results, use the `cursor` value from the response in subsequent requests:
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"cursor": "eyJhbGciOiJIUzI1NiJ9.cursor_token"
}
```
## Authentication
Connect securely via Gong OAuth. Authorize Humm to access your Gong workspace.
# GuideCX
Source: https://docs.heyhumm.ai/integrations/guidecx
Connect to GuideCX for project onboarding and customer implementation tracking.
GuideCX is a customer onboarding and project management platform designed for implementation teams. Connect Humm to search projects, milestones, tasks, and notes to understand customer implementation progress.
## Tools
| Tool | Description |
| - | - |
| `GUIDECX_SEARCH_PROJECTS` | Search projects with filtering by customer name, status, or custom properties |
| `GUIDECX_SEARCH_MILESTONES` | Search milestones with optional project filtering |
| `GUIDECX_SEARCH_TASKS` | Search tasks with filtering by project, name, or status |
| `GUIDECX_SEARCH_NOTES` | Search notes by project or task |
| `GUIDECX_LIST_USERS` | List all users in the workspace |
## Filter Behavior
### Case Sensitivity
All GuideCX filters are **case-sensitive**. If no results are returned, verify the exact casing:
```
# These are all different searches:
customerName = "Acme"
customerName = "acme"
customerName = "ACME"
```
**Tip:** Run a broad search first (no filters, limit=10) to see actual customer and project names, then refine with correct casing.
### Partial Matching with `like:` Prefix
Text filters (`customerName`, `name`) automatically use GuideCX's `like:` prefix for partial matching:
```
# Searching for customerName = "Acme" matches:
- "Acme Corp"
- "Acme Manufacturing, Inc."
- "The Acme Company"
# But NOT (wrong case):
- "acme corp"
- "ACME CORP"
```
## Custom Property Filtering
Projects can have custom properties (e.g., HubSpot Company ID, Salesforce Account ID). Use `propsFilter` to filter by these values.
### Discovering Custom Properties
First, search projects without filters to inspect the `properties` object:
```
GUIDECX_SEARCH_PROJECTS(limit=10)
# Response includes:
{
"projects": [{
"name": "Acme Implementation",
"properties": {
"hubspotCompanyId": "12345",
"salesforceAccountId": "001ABC123",
"region": "EMEA"
}
}]
}
```
### Filtering by Custom Properties
Once you know the property name, use `propsFilter`:
```
GUIDECX_SEARCH_PROJECTS(
propsFilter = {
"name": "hubspotCompanyId",
"value": "12345"
}
)
```
This maps to GuideCX's `props[hubspotCompanyId]=12345` query syntax.
## Status Values
### Project Statuses
| Status | Description |
| - | - |
| `ON_TIME` | Project is on schedule |
| `LATE` | Project is behind schedule |
| `ON_HOLD` | Project is paused |
| `DONE` | Project is complete |
| `NON_RESPONSIVE` | Customer is not responding |
| `CANCELLED` | Project has been cancelled |
### Task Statuses
| Status | Description |
| - | - |
| `NOT_STARTED` | Task has not begun |
| `WORKING_ON_IT` | Task is in progress |
| `DONE` | Task is complete |
| `STUCK` | Task is blocked |
| `SIGN_OFF` | Task awaiting sign-off |
| `NOT_APPLICABLE` | Task does not apply |
| `NOT_SCHEDULED` | Task has no scheduled date |
| `SCHEDULED` | Task is scheduled |
## Authentication
Connect using a GuideCX API Bearer Token. Obtain your token from the GuideCX workspace admin portal.
# Help Scout (Data Sync)
Source: https://docs.heyhumm.ai/integrations/helpscout-sync
Sync Help Scout conversations, inboxes, and customer support data into your warehouse.
Humm syncs your Help Scout data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This is useful when Help Scout is a key customer support source and you want it available for warehouse analysis.
## Source Type
Humm copies Help Scout data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Help Scout live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Help Scout sync can include:
* Conversations and conversation threads
* Customers
* Inboxes and inbox folders
* Users and teams
* Workflows and tags
* Inbox custom fields
## Credentials
Connect using your Help Scout OAuth app credentials:
* **Client ID**
* **Client Secret**
## Best For
* Joining support conversations with account and product data
* Reporting on inbox activity, workflows, and customer interactions
* Analyzing customer support trends in your warehouse
# HubSpot
Source: https://docs.heyhumm.ai/integrations/hubspot
Connect to HubSpot CRM for contacts, companies, deals, and custom objects.
Humm reads your HubSpot contacts, companies, deals, and custom objects. Ask which deals are stalling, which accounts haven't had activity in 30 days, or what your stage conversion looks like this quarter.
## Tools
| Tool | Description |
| - | - |
| `HUBSPOT_READ_OWNERS` | List owners (users) to find IDs for record associations |
| `HUBSPOT_SEARCH_COMPANIES` | Search companies with advanced filtering and sorting |
| `HUBSPOT_SEARCH_DEALS` | Search deals with advanced filtering and sorting |
| `HUBSPOT_SEARCH_CONTACTS` | Search contacts with advanced filtering and sorting |
| `HUBSPOT_LIST_OBJECTS` | List records for any object type with pagination |
| `HUBSPOT_READ_RECORDS` | Read one or more records by ID with optional associations |
| `HUBSPOT_SEARCH_OBJECTS` | Generic search for any object type with filters |
| `HUBSPOT_QUERY_ASSOCIATIONS` | Batch query associations between object types |
| `HUBSPOT_LIST_PROPERTIES` | List available properties for an object type |
| `HUBSPOT_LIST_SCHEMAS` | List custom object schemas to discover objectTypeIds |
## Filter Groups Syntax
Humm uses HubSpot's filterGroups structure for advanced searches. Here's how it works:
### Logic
* **Within a filter group**: Conditions are combined with AND
* **Across filter groups**: Groups are combined with OR
### Structure
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"filterGroups": [
{
"filters": [
{"propertyName": "email", "operator": "CONTAINS_TOKEN", "value": "@acme.com"},
{"propertyName": "lifecyclestage", "operator": "CONTAINS_TOKEN", "value": "customer"}
]
}
]
}
```
### Operators
| Operator | Description | Value Type |
| - | - | - |
| `EQ` | Equal to (use for strings/numbers, not enumeration properties) | `value` |
| `NEQ` | Not equal to | `value` |
| `LT` / `LTE` | Less than / Less than or equal | `value` |
| `GT` / `GTE` | Greater than / Greater than or equal | `value` |
| `BETWEEN` | Within range (inclusive) | `value` + `highValue` |
| `IN` / `NOT_IN` | In list / Not in list | `values` array |
| `HAS_PROPERTY` | Property has a value | none |
| `NOT_HAS_PROPERTY` | Property has no value | none |
| `CONTAINS_TOKEN` | Contains token (preferred for enumeration properties) | `value` |
| `NOT_CONTAINS_TOKEN` | Does not contain token | `value` |
### Enumeration Properties
Certain HubSpot properties are "enumeration" types internally and require special handling:
* `hubspot_owner_id`
* `dealstage`
* `pipeline`
* `lifecyclestage`
For these properties, **use `CONTAINS_TOKEN` instead of `EQ`**. Using `EQ` often returns no results.
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
// Correct - use CONTAINS_TOKEN for enumeration properties
{"propertyName": "hubspot_owner_id", "operator": "CONTAINS_TOKEN", "value": "12345"}
{"propertyName": "dealstage", "operator": "CONTAINS_TOKEN", "value": "closedwon"}
// Wrong - EQ often fails for enumeration properties
{"propertyName": "hubspot_owner_id", "operator": "EQ", "value": "12345"}
```
## Query Examples
### Search companies by owner
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"filterGroups": [
{
"filters": [
{"propertyName": "hubspot_owner_id", "operator": "CONTAINS_TOKEN", "value": "12345678"}
]
}
],
"properties": ["name", "domain", "hubspot_owner_id"],
"limit": 50
}
```
### Search deals in a specific stage
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"filterGroups": [
{
"filters": [
{"propertyName": "dealstage", "operator": "CONTAINS_TOKEN", "value": "closedwon"}
]
}
],
"sorts": [{"propertyName": "closedate", "direction": "DESCENDING"}],
"properties": ["dealname", "amount", "closedate"],
"limit": 100
}
```
### Search contacts by email domain
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"filterGroups": [
{
"filters": [
{"propertyName": "email", "operator": "CONTAINS_TOKEN", "value": "@acme.com"}
]
}
],
"properties": ["firstname", "lastname", "email"],
"limit": 50
}
```
### Combined filters (AND logic within group)
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"filterGroups": [
{
"filters": [
{"propertyName": "pipeline", "operator": "CONTAINS_TOKEN", "value": "default"},
{"propertyName": "amount", "operator": "GTE", "value": "50000"}
]
}
]
}
```
### Multiple filter groups (OR logic across groups)
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"filterGroups": [
{
"filters": [
{"propertyName": "lifecyclestage", "operator": "CONTAINS_TOKEN", "value": "customer"}
]
},
{
"filters": [
{"propertyName": "email", "operator": "CONTAINS_TOKEN", "value": "@partner.com"}
]
}
]
}
```
## Custom Objects
HubSpot supports custom objects with unique schemas. To work with custom objects:
1. **Discover schemas**: Use `HUBSPOT_LIST_SCHEMAS` to list all custom object schemas and their `objectTypeId` values (e.g., `2-123456`)
2. **List properties**: Use `HUBSPOT_LIST_PROPERTIES` with the `objectTypeId` to see available fields
3. **Query records**: Use `HUBSPOT_LIST_OBJECTS` or `HUBSPOT_SEARCH_OBJECTS` with the `objectTypeId` as the `object_type`
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
// List custom object records
{"object_type": "2-123456", "limit": 50, "properties": ["name", "custom_code"]}
// Search custom objects
{
"object_type": "2-123456",
"filterGroups": [
{
"filters": [
{"propertyName": "custom_code", "operator": "CONTAINS_TOKEN", "value": "ABC-"}
]
}
]
}
```
## Authentication
Connect securely via HubSpot OAuth. Authorize Humm to access your HubSpot portal.
# Intercom
Source: https://docs.heyhumm.ai/integrations/intercom
Connect to Intercom customer messaging platform.
Humm searches your Intercom conversations, contacts, and companies. Ask how many open conversations an account has, what topics are driving support volume, or pull recent threads for a specific customer.
## Tools
| Tool | Description |
| - | - |
| `INTERCOM_LIST_ALL_COMPANIES` | List companies with automatic scroll pagination |
| `INTERCOM_SEARCH_CONTACTS` | Search contacts using structured query objects |
| `INTERCOM_SEARCH_CONVERSATIONS` | Search conversations using structured query objects |
| `INTERCOM_GET_ACCOUNT_CONVERSATIONS` | Get all conversations for contacts matching an account external ID pattern |
## Query Structure
Intercom search tools (`INTERCOM_SEARCH_CONTACTS`, `INTERCOM_SEARCH_CONVERSATIONS`) use a structured query syntax for filtering. Here's how to build queries:
### Basic Filter
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"field": "field_name",
"operator": "=",
"value": "value"
}
```
### Available Operators
| Operator | Description |
| - | - |
| `=` | Equals |
| `!=` | Not equals |
| `>` | Greater than or equal |
| `<` | Less than or equal |
| `IN` | Value is in array (max 15 values) |
| `NIN` | Value is not in array (max 15 values) |
| `~` | Contains |
| `!~` | Does not contain |
| `^` | Starts with |
| `$` | Ends with |
### Combining Filters
Use `AND` or `OR` logical operators to combine multiple filters:
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"operator": "AND",
"value": [
{
"field": "state",
"operator": "=",
"value": "open"
},
{
"field": "team_assignee_id",
"operator": "=",
"value": "123456"
}
]
}
```
### Query Examples
```
# Open conversations
{"field": "state", "operator": "=", "value": "open"}
# Conversations in multiple states
{"field": "state", "operator": "IN", "value": ["open", "snoozed"]}
# Contacts by email domain
{"field": "email_domain", "operator": "=", "value": "acme.com"}
# Conversations created after a date
{"field": "created_at", "operator": ">", "value": "2024-01-01"}
# Date range filter
{
"operator": "AND",
"value": [
{"field": "created_at", "operator": ">", "value": "2024-01-01"},
{"field": "created_at", "operator": "<", "value": "2024-02-01"}
]
}
```
### Query Constraints
* Maximum 2 levels of nesting
* Maximum 15 filters per AND/OR group
* Arrays (IN/NIN) limited to 15 values
* Empty strings are not allowed as values
* Timestamp filtering only supports `>` and `<` operators
## Searchable Fields
### Contacts
| Field | Type |
| - | - |
| `id` | String |
| `name` | String |
| `email` | String |
| `email_domain` | String |
| `external_id` | String |
| `owner_id` | Integer |
| `created_at` | Timestamp |
### Conversations
| Field | Type |
| - | - |
| `id` | String |
| `state` | String (`open`, `closed`, `snoozed`) |
| `priority` | String |
| `source.type` | String |
| `source.subject` | String |
| `contact_ids` | Array of strings |
| `teammate_ids` | Array of strings |
| `admin_assignee_id` | String |
| `team_assignee_id` | String |
| `created_at` | Timestamp |
| `updated_at` | Timestamp |
## Account Conversations Tool
The `INTERCOM_GET_ACCOUNT_CONVERSATIONS` tool simplifies finding conversations for an entire account:
1. Searches for contacts whose `external_id` matches a pattern
2. Automatically batches contact IDs (Intercom limits to 15 per query)
3. Fetches conversations across all matching contacts
4. Returns combined results
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"external_id_pattern": "ACME_",
"created_after": "2024-01-01",
"limit": 500
}
```
This matches contacts with external IDs like `ACME_001`, `ACME_002`, etc.
## Authentication
Connect securely via Intercom OAuth. Authorize Humm to access your Intercom workspace.
# Jira
Source: https://docs.heyhumm.ai/integrations/jira
Connect to Atlassian Jira for issue tracking and project management.
Humm searches your Jira issues, reads project structures, and pulls comments. Ask which bugs were filed this week, what's blocking a release, or how many open issues a project has.
## Tools
| Tool | Description |
| - | - |
| `JIRA_SEARCH_ISSUES_BY_JQL` | Search issues using JQL queries with pagination |
| `JIRA_GET_ISSUE` | Get detailed information about a specific issue |
| `JIRA_GET_ISSUE_COMMENTS` | Get comments on a specific issue |
| `JIRA_LIST_PROJECTS` | List accessible projects |
| `JIRA_LIST_FIELDS` | List all fields including custom fields |
| `JIRA_GET_PROJECT_ISSUE_TYPES` | Get issue types available in a project |
| `JIRA_SEARCH_COMMENTS` | Search comments across issues by keyword or author |
| `JIRA_FIND_USERS` | Search for users by name or email |
## JQL Query Examples
Humm uses JIRA Query Language (JQL) to search issues. Here are common patterns:
```
# Recent bugs in a project
project = PROJ AND issuetype = Bug AND created >= -7d
# Open high priority issues
status = Open AND priority = High ORDER BY created DESC
# My assigned tasks
assignee = currentUser() AND status NOT IN (Done, Closed)
# Unassigned issues
assignee IS EMPTY AND status = Open
```
## Project Access Control
When connecting Jira, you can restrict which projects Humm can access. This is useful for:
* Limiting access to sensitive projects
* Scoping queries to relevant teams
* Ensuring data governance compliance
All searches are automatically scoped to allowed projects. If no project filter is specified in a query, results are limited to configured projects.
## Authentication
Connect securely via Atlassian OAuth. Authorize Humm to access your Jira instance.
# Linear
Source: https://docs.heyhumm.ai/integrations/linear
Connect to Linear for issue tracking and project management.
Humm reads your Linear issues, projects, and teams. Ask how many bugs are open in a project, what's assigned to a teammate, or what the backlog looks like across teams.
## Tools
| Tool | Description |
| - | - |
| `LINEAR_LIST_LINEAR_TEAMS` | List all teams in the Linear workspace |
| `LINEAR_LIST_LINEAR_ISSUES` | List all issues in the Linear workspace |
| `LINEAR_LIST_LINEAR_PROJECTS` | List all projects in the Linear workspace |
| `LINEAR_GET_LINEAR_ISSUE` | Get the details of a specific issue |
## Common Queries
Humm can answer questions about your Linear workspace:
```
# Find issues
"Show me all open bugs in the Platform team"
"What issues are assigned to me?"
"List high priority issues created this week"
# Explore projects
"What projects does the Engineering team have?"
"Show me the roadmap project details"
# Understand workload
"How many issues are in progress across all teams?"
"What's the backlog looking like for the Mobile team?"
```
## Team Access
Linear organizes work by teams. When exploring your workspace, Humm can:
* List all teams you have access to
* Filter issues by team
* Show project structures within teams
## Authentication
Connect securely via Linear OAuth. Authorize Humm to access your Linear workspace.
# Meta Ads (Data Sync)
Source: https://docs.heyhumm.ai/integrations/meta-ads-sync
Sync Meta Ads campaign and performance data into your warehouse.
Humm syncs your Meta Ads data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This is useful when you want paid acquisition data available next to product, revenue, and lifecycle reporting.
## Source Type
Humm copies Meta Ads data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Meta Ads live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Meta Ads sync can include:
* Campaigns
* Ad sets
* Ads
* Ad creatives
* Ad insights
* Ad account details
* Custom audiences and conversions
* Images, videos, and activity logs
## Credentials
To connect Meta Ads data sync, provide:
* **Access Token** for the Meta Marketing API
* **Account IDs** as a comma-separated list, including the `act_` prefix
* **Start Date** if you want to limit how far back the sync goes
## Best For
* Joining ad spend and campaign data with downstream conversion or revenue data
* Reporting on acquisition performance in your warehouse
* Comparing paid channel activity with product and lifecycle outcomes
# Mixpanel
Source: https://docs.heyhumm.ai/integrations/mixpanel
Connect to Mixpanel product analytics.
Humm queries your Mixpanel events, funnels, cohorts, and retention data. Ask about conversion rates, which features drive activation, or how a cohort's engagement changes over time.
## Tools
| Tool | Description |
| - | - |
| `MIXPANEL_JQL_QUERY` | Execute custom JQL (JavaScript Query Language) queries |
| `MIXPANEL_QUERY_PROFILES` | Query user or group profile data |
| `MIXPANEL_QUERY_SEGMENTATION` | Get event data segmented and filtered by properties |
| `MIXPANEL_LIST_FUNNELS` | Get funnel names and IDs |
| `MIXPANEL_QUERY_FUNNEL` | Retrieve funnel performance data |
| `MIXPANEL_LIST_COHORTS` | Get all cohorts in a project |
| `MIXPANEL_QUERY_RETENTION_REPORT` | Get cohort analysis and retention data |
| `MIXPANEL_QUERY_INSIGHT` | Get data from insights reports |
| `MIXPANEL_AGGREGATE_EVENT_COUNTS` | Retrieve event counts aggregated over time |
| `MIXPANEL_TODAYS_TOP_EVENTS` | Get top events for today with counts |
| `MIXPANEL_GET_ALL_PROJECTS` | List all projects for the authenticated account |
## JQL Query Examples
Humm can execute JQL (JavaScript Query Language) queries against Mixpanel's Query API. Here are common patterns:
```javascript theme={"theme":{"light":"github-light","dark":"github-dark"}}
// Get events from the last 7 days
function main() {
return Events({
from_date: '2024-01-01',
to_date: '2024-01-07'
});
}
// Filter events by name
function main() {
return Events({
from_date: '2024-01-01',
to_date: '2024-01-07'
}).filter(function(event) {
return event.name == 'Purchase';
});
}
// Group by property
function main() {
return Events({
from_date: '2024-01-01',
to_date: '2024-01-07'
}).groupBy(['properties.plan_type'], mixpanel.reducer.count());
}
```
## Query Constraints
JQL queries have the following limits:
* 60 queries per hour rate limit
* Maximum 5 concurrent queries
* 2-minute execution timeout
* 5 GB data processing limit
* 2 GB output limit
## Authentication
Connect securely via OAuth. Authorize Humm to access your Mixpanel workspace.
# Monday.com (Data Sync)
Source: https://docs.heyhumm.ai/integrations/monday-sync
Sync Monday.com boards, items, and updates into your warehouse.
Humm syncs your Monday.com data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This is useful when Monday.com is where your teams track implementation work, launches, or internal operations.
## Source Type
Humm copies Monday.com data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Monday.com live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Monday.com sync can include:
* Boards
* Items
* Updates
* Teams
* Users
* Workspaces
* Activity logs
* Tags
## Credentials
Connect using your Monday.com API token.
## Best For
* Reporting on project or onboarding workflows managed in Monday.com
* Joining board activity with customer or account data
* Analyzing work volume, status, and updates in your warehouse
# MySQL
Source: https://docs.heyhumm.ai/integrations/mysql
Connect to MySQL databases.
Humm runs read-only SQL queries against your MySQL database. Ask questions about any table or view the connected user can access.
## Tools
| Tool | Description |
| - | - |
| `EXECUTE_SQL` | Run SQL queries against your MySQL database |
## Authentication
Username and password authentication with host, port, and database name.
# Integrations
Source: https://docs.heyhumm.ai/integrations/overview
Connect your data sources so Humm can answer questions about your customers.
Integrations connect Humm to the tools and data you already use. Once connected, Humm can pull from these sources to answer your questions — no exports or spreadsheets needed.
Start with one or two key sources, then add more over time. The more you connect, the more complete Humm's picture of your customers.
***
## Choosing a Source Type
Humm connects to data in three ways. Pick the one that fits how your data is set up.
### Database
Humm queries your data warehouse directly (Snowflake, BigQuery, Athena, Databricks, PostgreSQL, MySQL). This gives the best accuracy and performance. If your data is already in a warehouse, start here.
For Parquet files that already live in S3, Amazon Athena can query the files in place through external tables without copying them.
### Sync
Humm syncs a copy of your SaaS, database, or file-based data into your warehouse via Airbyte, then queries that copy. Better performance and accuracy than live SaaS calls, and the data lives in your warehouse so you can join it with everything else. Available for: Absorb, Amplitude, Attio, Chargebee, ChurnZero, Customer.io, Delighted, Freshdesk, Gong, GuideCX, Help Scout, HubSpot, Intercom, Jira, Linear, Meta Ads, Mixpanel, Monday.com, PostHog, PostgreSQL, Productboard, S3, Salesforce, Statsig, Stripe, SurveyMonkey, Typeform, Zendesk, Zoom.
### SaaS (Live)
Humm queries the SaaS API directly in real time. Data is never stored by Humm. Slower for large queries, but useful if you don't want data copied anywhere.
### Which should I use?
1. **Connect your data warehouse** if you have one. It's the most accurate and fastest source.
2. **Use Sync** if you want SaaS data joined with warehouse data, or need better performance than live API calls.
3. **Use SaaS live** if you want real-time data and don't want Humm to store anything.
***
## How to Add an Integration
1. Click **Integrations** in the sidebar
2. Click **Browse Catalog**
3. Select the integration you want to connect
4. Enter your credentials and click **Save**
5. Click **Introspect Schema** to let Humm learn the data structure
Most integrations take just a few minutes to set up. Once connected, Humm automatically discovers your tables, fields, and relationships.
***
## Multiple Instances of the Same Integration
For supported integrations, you can connect multiple instances of the same connector. This is useful when:
* You have separate accounts for different regions (e.g., US and EU)
* You manage different business units separately
* You need to query data from sandbox and production environments
When you connect multiple instances, Humm automatically qualifies tool names with the instance label to distinguish them. For example, if you connect two Chargebee instances labeled "US" and "EU":
* `CHARGEBEE_US_LIST_CUSTOMERS` — List customers from the US instance
* `CHARGEBEE_EU_LIST_CUSTOMERS` — List customers from the EU instance
This prevents confusion and ensures queries use the correct data source.
***
## Available Integrations
### Data Warehouses
Connect your warehouse and Humm queries it directly — fastest and most accurate source type.
Cloud data warehouse with private key or password auth.
Google's data warehouse with service account auth. Supports Sheets-backed tables.
Query S3 data and Parquet external tables via Athena and AWS Glue Data Catalog.
Unified analytics platform with SQL warehouse support.
Connect directly to PostgreSQL databases.
Connect directly to MySQL databases.
### Object Storage Sync
Sync file-based data from storage buckets into your warehouse.
Sync CSV, JSONL, Parquet, or Avro files from an S3 bucket.
### Database Sync
Sync operational database tables into your warehouse when direct query access is not the right fit.
Sync PostgreSQL tables with SSL and optional SSH tunneling.
### CRM & Sales
Query contacts, companies, deals, and customer relationships from your CRM.
Leads, opportunities, accounts, and custom objects.
Contacts, deals, companies, and marketing data.
Modern CRM with flexible data models.
Call recordings, transcripts, and conversation intelligence.
### Customer Success & Support
Pull in customer health, engagement, and support history.
Health scores, churn predictions, and engagement tracking.
Customer conversations and support interactions.
Support tickets, users, organizations, and comments.
Sync tickets, contacts, companies, and support operations data.
Sync conversations, inboxes, customers, and workflows.
### Product Analytics
See how customers actually use your product with usage data and behavioral analytics.
Feature adoption, page views, and in-app guides.
Event tracking, funnels, and user behavior.
Product analytics with HogQL query support.
Event segmentation, cohort analysis, and user behavior.
Sync experiments, feature flags, configs, and event metrics.
### Project Management
Track customer-related work, feature requests, and team knowledge.
Issues, projects, and sprint data from Atlassian.
Issues, projects, and team workflows.
Search and read pages, spaces, and blog posts.
Sync boards, items, updates, teams, and workspace data.
Sync features, notes, objectives, releases, and product planning data.
### Billing & Subscriptions
Track revenue, subscriptions, and billing data.
Subscriptions, invoices, transactions, and product catalog.
Sync charges, invoices, subscriptions, payouts, and payment activity.
### Marketing & Advertising
Connect campaign, automation, and ad platform data.
Sync campaigns, campaign actions, and newsletters.
Sync campaigns, ad sets, ads, creatives, and performance insights.
### Surveys & Feedback
Bring in survey responses, forms, and customer sentiment data.
Sync survey responses, people, and unsubscribed contacts.
Sync surveys, questions, collectors, and response data.
Sync forms, responses, webhooks, and workspace metadata.
### Communication & Meetings
Analyze meeting, webinar, and collaboration activity.
Sync meetings, webinars, registrants, polls, and participant reports.
### Custom Integrations
Don't see your tool listed? You can connect to almost any system with a REST API.
Connect to any REST API with flexible authentication options.
***
## What Data Does Humm Access?
When you connect an integration, Humm gets **read-only** access to your data. Humm can:
* Query and retrieve data to answer your questions
* Discover your schema (tables, fields, relationships)
* Pull sample data to understand your data structure
Humm **cannot** modify, delete, or write data to your connected systems.
***
## Need Help?
If you're having trouble connecting an integration or need a new integration added, reach out to your Humm account team at [hey@heyhumm.ai](mailto:hey@heyhumm.ai).
# Pendo
Source: https://docs.heyhumm.ai/integrations/pendo
Connect to Pendo product experience platform.
Humm runs aggregation queries against your Pendo usage data. Ask about feature adoption, page views by account, or how usage trends compare across segments.
## Tools
| Tool | Description |
| - | - |
| `PENDO_RUN_AGGREGATION` | Run aggregation queries on product usage data |
| `PENDO_GET_DISTINCT_METADATA_VALUES` | Get unique values for metadata fields |
## Authentication
Integration key authentication. Obtain your key from Pendo Settings > Integrations > Integration Keys.
# PostgreSQL (Data Sync)
Source: https://docs.heyhumm.ai/integrations/postgres-sync
Sync PostgreSQL tables into your warehouse for reporting and cross-system analysis.
Humm syncs tables from your PostgreSQL database into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. Use this when you want PostgreSQL data available alongside CRM, billing, support, or product data without relying on live database queries for every question.
## Source Type
Humm copies tables from the schemas you choose on a schedule. Humm then queries the synced tables rather than your PostgreSQL database directly.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
PostgreSQL data sync supports:
* Tables from one or more schemas
* Standard periodic sync using PostgreSQL `xmin`
* Read-only analysis against the synced copy after each refresh
PostgreSQL data sync does not support CDC in the current version.
## Credentials
To connect PostgreSQL data sync, provide:
* **Host**
* **Port** such as `5432`
* **Database**
* **Schemas** as a comma-separated, case-sensitive list such as `public, sales`
* **Username**
* **Password**
* **SSL Mode**
* **Replication Method** set to **Standard (xmin)**
## SSH Tunnel Options
If your database is only reachable through a bastion host, choose an SSH tunnel method during setup.
### SSH Key Authentication
Provide:
* **SSH Tunnel Jump Server Host**
* **SSH Connection Port**
* **SSH Login Username**
* **SSH Private Key**
Paste the full private key, including line breaks.
### Password Authentication
Provide:
* **SSH Tunnel Jump Server Host**
* **SSH Connection Port**
* **SSH Login Username**
* **SSH Password**
### No Tunnel
Choose **No Tunnel** if Humm can reach the PostgreSQL host directly.
## Sync Behavior
* Data is refreshed on a schedule after setup
* Humm syncs tables from the schemas you configure
* Humm reads the synced warehouse tables after the sync completes
* `xmin` is the only supported replication method in the current version
## Best For
* Reporting on operational PostgreSQL data alongside CRM, billing, and support systems
* Keeping analytics workloads off your live application database
* Working with databases that require SSL or bastion-based SSH access
# PostgreSQL
Source: https://docs.heyhumm.ai/integrations/postgresql
Connect to PostgreSQL databases.
Humm runs read-only SQL queries against your PostgreSQL database. Ask questions about any table or view the connected user can access.
## Tools
| Tool | Description |
| - | - |
| `EXECUTE_SQL` | Run SQL queries against your PostgreSQL database |
## Authentication
Username and password authentication with host, port, and database name.
# PostHog
Source: https://docs.heyhumm.ai/integrations/posthog
Connect to PostHog product analytics.
Humm runs HogQL queries against your PostHog project. Ask about event trends, user journeys, or page views — anything you can express in HogQL, Humm can query.
## Tools
| Tool | Description |
| - | - |
| `POSTHOG_CREATE_QUERY_IN_PROJECT_BY_ID` | Execute HogQL queries against your PostHog project |
| `POSTHOG_LIST_USERS` | List users with project membership details |
## HogQL Query Examples
Humm uses HogQL, PostHog's SQL-like query language, to query your analytics data. Here are common patterns:
```sql theme={"theme":{"light":"github-light","dark":"github-dark"}}
# Recent events
SELECT * FROM events ORDER BY timestamp DESC LIMIT 100
# Events by type in the last 7 days
SELECT event, count() as count
FROM events
WHERE timestamp > now() - interval 7 day
GROUP BY event
ORDER BY count DESC
# Unique users by event
SELECT event, uniq(distinct_id) as unique_users
FROM events
GROUP BY event
ORDER BY unique_users DESC
# Page views with properties
SELECT properties.$current_url as url, count() as views
FROM events
WHERE event = '$pageview'
GROUP BY url
ORDER BY views DESC
LIMIT 20
# User journey analysis
SELECT distinct_id, event, timestamp
FROM events
WHERE distinct_id = 'user-id-here'
ORDER BY timestamp ASC
```
## User Identification
The `POSTHOG_LIST_USERS` tool helps identify users in your PostHog organization. Filter by email to find specific users and their project memberships.
## Authentication
Personal API key authentication. Generate a key from PostHog Project Settings > Personal API Keys.
# Productboard (Data Sync)
Source: https://docs.heyhumm.ai/integrations/productboard-sync
Sync Productboard features, notes, and roadmap data into your warehouse.
Humm syncs your Productboard data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. Use this when you want product planning data available alongside feedback, delivery, and customer data.
## Source Type
Humm copies Productboard data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Productboard live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Productboard sync can include:
* Features
* Notes
* Objectives
* Products
* Components
* Releases
## Credentials
Connect using a Productboard access token from your Productboard workspace.
## Best For
* Joining roadmap data with customer feedback and support requests
* Reporting on feature demand across segments or accounts
* Analyzing planning progress alongside delivery data from tools like Jira or Linear
# S3 (Data Sync)
Source: https://docs.heyhumm.ai/integrations/s3-sync
Sync CSV, JSONL, Parquet, or Avro files from an S3 bucket into your warehouse.
Humm syncs files from your S3 bucket into your warehouse via Airbyte, then queries the synced tables through your warehouse integration. Use this when source data already lands in S3 and you want it available for analysis alongside your other business data.
If your data is already in Parquet and should stay in its existing S3 location, use Amazon Athena external tables instead. S3 Data Sync is the copy-based path.
## Source Type
Humm copies matching files from S3 into your warehouse on a schedule. Humm then queries the synced tables rather than reading directly from the bucket during each question.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## Supported Files
S3 data sync supports one configured stream per connector. A stream is a set of files with the same structure that should become one table.
Supported file formats:
* CSV
* JSON Lines (`.jsonl`)
* Parquet
* Avro
Use file glob patterns from the bucket root to choose which files belong in the stream. For example:
* `exports/usage/*.csv`
* `events/**/*.jsonl`
* `orders/*.parquet|archive/orders/*.parquet`
## Credentials
To connect S3 data sync, provide:
* **Bucket**: The S3 bucket name
* **AWS Region**: The bucket region, such as `us-east-1`
* **AWS Access Key ID**: Access key for an IAM user with read access
* **AWS Secret Access Key**: Secret key for that IAM user
* **Output Stream Name**: The table name for the synced files
* **File Globs**: One or more file patterns to sync
* **File Format**: CSV, JSON Lines, Parquet, or Avro
Humm currently supports access-key authentication for this connector. IAM role authentication is not available in the S3 data sync setup.
## Required AWS Permissions
Create an IAM user or access key with read-only access to the bucket and prefixes you want to sync.
Minimum permissions:
```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": "arn:aws:s3:::your-bucket-name"
},
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::your-bucket-name/path-prefix/*"
}
]
}
```
If your file glob reads from multiple prefixes, include each prefix in the `s3:GetObject` resources. If you need to sync files across the whole bucket, use `arn:aws:s3:::your-bucket-name/*`.
## Sync Behavior
* Data is refreshed on a schedule after setup
* The connector reads files matching the configured glob patterns
* Incremental sync uses file modification history
* Humm reads the synced warehouse tables after the sync completes
* Schema can be inferred from files, or you can provide an input schema during setup
## Best For
* Product or usage exports already written to S3
* Batch exports from internal systems
* Partner or vendor files delivered to your bucket
* Joining file-based operational data with warehouse, CRM, billing, and support data
# Salesforce
Source: https://docs.heyhumm.ai/integrations/salesforce
Connect to Salesforce CRM.
Humm queries your Salesforce accounts, contacts, opportunities, and custom objects via SOQL. Ask about pipeline, account health, recent leads, or any object in your org.
## Tools
| Tool | Description |
| - | - |
| `SALESFORCE_QUERY_SOQL` | Execute SOQL queries against Salesforce objects |
## SOQL Query Examples
Humm uses Salesforce Object Query Language (SOQL) to retrieve data. Here are common patterns:
```
# Find a user by email
SELECT Id, Name FROM User WHERE Email = 'user@example.com'
# List accounts with health scores
SELECT Id, Name, Health_Score__c FROM Account WHERE Health_Score__c != null
# Open opportunities closing this quarter
SELECT Id, Name, Amount, CloseDate FROM Opportunity
WHERE StageName != 'Closed Won' AND StageName != 'Closed Lost'
AND CloseDate = THIS_QUARTER
# Contacts at a specific account
SELECT Id, Name, Email, Phone FROM Contact WHERE AccountId = '001XXXXXXXXXXXX'
# Recent leads
SELECT Id, Name, Company, Status FROM Lead
WHERE CreatedDate = LAST_N_DAYS:7 ORDER BY CreatedDate DESC
```
## Authentication
Connect securely via Salesforce OAuth. No credentials stored—just authorize Humm in your Salesforce org.
# Snowflake
Source: https://docs.heyhumm.ai/integrations/snowflake
Connect to Snowflake's cloud data platform.
Humm runs read-only SQL queries against your Snowflake warehouse. Ask questions about any table or view your credentials can access.
## Tools
| Tool | Description |
| - | - |
| `EXECUTE_SQL` | Run SQL queries against your Snowflake warehouse |
## Authentication
RSA key pair authentication. See the [setup guide](/guides/creating-snowflake-private-keys).
Username and password authentication.
# Statsig (Data Sync)
Source: https://docs.heyhumm.ai/integrations/statsig-sync
Sync Statsig experiments, feature gates, and metrics into your warehouse.
Humm syncs your Statsig data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This gives you a warehouse-friendly view of experiment, rollout, and metric data.
## Source Type
Humm copies Statsig data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Statsig live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Statsig sync can include:
* Experiments
* Feature gates and gate rules
* Dynamic configs and config rules
* Metrics and metric values
* Events and event metrics
* Segments and segment IDs
* Layers, holdouts, autotunes, and audit logs
## Credentials
Connect using a Statsig Console API key.
## Best For
* Tracking experiment performance in the same warehouse as product and revenue data
* Joining rollout data with downstream customer outcomes
* Reporting on feature flag configuration history and metric movement
# Stripe (Data Sync)
Source: https://docs.heyhumm.ai/integrations/stripe-sync
Sync Stripe billing data into your warehouse for subscription, payment, and revenue analysis.
Humm syncs your Stripe data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This is a good fit if you want Stripe data joined with product, CRM, or support data in one place.
## Source Type
Humm copies Stripe data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Stripe live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Stripe sync supports a broad set of billing and payments data, including:
* Customers
* Charges
* Invoices and invoice line items
* Subscriptions and subscription items
* Payment intents and payment methods
* Refunds and disputes
* Products, plans, and prices
* Payouts and balance transactions
* Events and promotion codes
Large high-volume streams like events, charges, and balance transactions are split automatically to keep syncs stable.
## Credentials
To connect Stripe data sync, provide:
* **Account ID**: Your Stripe account ID, typically starting with `acct_`
* **Secret Key**: A restricted Stripe key with read access
## Sync Behavior
* Syncs start from `2020-01-01`
* Data is refreshed on a schedule after setup
* Humm reads the synced warehouse tables after the sync completes
## Best For
* Revenue and billing reporting in the same warehouse as your other data
* Joining Stripe subscriptions with product usage or support data
* Historical analysis across invoices, payments, and refunds
# SurveyMonkey (Data Sync)
Source: https://docs.heyhumm.ai/integrations/surveymonkey-sync
Sync SurveyMonkey surveys and responses into your warehouse.
Humm syncs your SurveyMonkey data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This is a good option if you want survey data available for broader reporting and joins.
## Source Type
Humm copies SurveyMonkey data into your warehouse on a schedule. Humm then queries the synced tables rather than calling SurveyMonkey live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
SurveyMonkey sync can include:
* Surveys
* Survey pages
* Survey questions
* Survey responses
* Survey collectors
* Collectors
## Credentials
Connect SurveyMonkey using OAuth. Humm requests read access to surveys and responses.
## Best For
* Joining survey feedback with account, product, or support data
* Warehouse reporting on survey response volume and structure
* Keeping customer feedback in the same analytics environment as other sources
# Typeform (Data Sync)
Source: https://docs.heyhumm.ai/integrations/typeform-sync
Sync Typeform forms and responses into your warehouse.
Humm syncs your Typeform data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This works well for onboarding forms, surveys, and other structured response data you want to analyze with the rest of your customer data.
## Source Type
Humm copies Typeform data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Typeform live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Typeform sync can include:
* Forms
* Responses
* Webhooks
* Workspaces
* Images
* Themes
## Credentials
To connect Typeform data sync, provide:
* **Personal Access Token**
* **Start Date** if you want to limit how far back the sync goes
* **Form IDs** if you want to sync only specific forms
## Best For
* Joining form responses with CRM, onboarding, or support data
* Analyzing survey completion and submission trends in your warehouse
* Limiting sync scope to a specific set of forms when needed
# Zendesk
Source: https://docs.heyhumm.ai/integrations/zendesk
Connect to Zendesk for customer support tickets, users, and organizations.
Humm reads your Zendesk tickets, users, organizations, and comments. Ask about open ticket volume, average resolution time for an account, or which agents are handling the most requests.
## Tools
| Tool | Description |
| - | - |
| `ZENDESK_LIST_TICKETS` | List all tickets with optional sorting by field and direction |
| `ZENDESK_GET_TICKET` | Get a single ticket by ID with full details |
| `ZENDESK_LIST_USERS` | List all users with optional role filtering (end-user, agent, admin) |
| `ZENDESK_GET_USER` | Get a single user by ID |
| `ZENDESK_LIST_ORGANIZATIONS` | List all organizations in the account |
| `ZENDESK_GET_ORGANIZATION` | Get a single organization by ID |
| `ZENDESK_GET_TICKET_COMMENTS` | Get all comments (public and private) for a specific ticket |
## Sorting Tickets
The `ZENDESK_LIST_TICKETS` tool supports sorting by the following fields:
| Sort Field | Description |
| - | - |
| `assignee` | Assigned agent |
| `created_at` | Creation date |
| `id` | Ticket ID |
| `status` | Ticket status |
| `subject` | Ticket subject |
| `updated_at` | Last update date |
Set `sort_order` to `asc` (ascending) or `desc` (descending).
## Filtering Users
The `ZENDESK_LIST_USERS` tool supports filtering by role:
| Role | Description |
| - | - |
| `end-user` | Customers who submit tickets |
| `agent` | Support agents who handle tickets |
| `admin` | Account administrators |
## Discoverable Objects
Humm can introspect the following Zendesk objects during schema discovery:
* **Ticket** — Support tickets with status, priority, type, and assignment info
* **User** — End users, agents, and administrators
* **Organization** — Customer organizations with domain associations
* **Group** — Agent groups for ticket assignment
* **Ticket Comment** — Comments and replies on tickets
* **Ticket Field** — Custom and system ticket fields
* **Ticket Form** — Ticket submission forms
* **View** — Saved ticket views and filters
* **Macro** — Predefined ticket responses and actions
* **Tag** — Tags for categorizing tickets
* **Satisfaction Rating** — Customer satisfaction survey responses
## Authentication
Connect securely via OAuth. Authorize Humm to access your Zendesk account.
# Zoom (Data Sync)
Source: https://docs.heyhumm.ai/integrations/zoom-sync
Sync Zoom meeting and webinar data into your warehouse.
Humm syncs your Zoom data into your warehouse via Airbyte, then queries the synced copy through your warehouse integration. This is useful for analyzing customer calls, webinars, and meeting participation with the rest of your business data.
## Source Type
Humm copies Zoom data into your warehouse on a schedule. Humm then queries the synced tables rather than calling Zoom live.
See [Choosing a Source Type](/integrations/overview#choosing-a-source-type) for help deciding.
## What Gets Synced
Zoom sync can include:
* Users
* Meetings and meeting registrants
* Meeting polls and poll results
* Webinar registrants, panelists, and absentees
* Webinar polls, Q\&A results, and tracking sources
* Meeting and webinar participant reports
## Credentials
Connect using your Zoom Server-to-Server OAuth app credentials:
* **Account ID**
* **Client ID**
* **Client Secret**
## Best For
* Joining meeting and webinar activity with account, product, or pipeline data
* Reporting on participation and attendance trends in your warehouse
* Analyzing customer-facing meeting history alongside other sources