# Retrieve access token Source: https://docs.hotglue.com/api-reference/access-tokens/retrieve-access-token get /{env_id}/{flow_id}/{tenant}/connectors/{connector_id}/accesstoken Uses the tenant's linked credentials to retrieve a new access token for a given connector. Only supported on select connectors. Requires a secret API key, or a public API key with a tenant JWT passed via the `token` query parameter. # Authentication Source: https://docs.hotglue.com/api-reference/authentication ## API Keys All API requests require authentication using an API key. API keys are passed via the `x-api-key` header in your requests. ```shell theme={null} curl --request GET \ --url 'https://api.hotglue.com/...' \ --header 'x-api-key: your-api-key' ``` There are three types of API keys in hotglue: ### 1. Environment API Key The Environment API Key has global permissions on your environment. Only owners and admins have access to view and manage this key. ### 2. Personal API Key Personal API Keys are tied to individual users and have permissions based on your role in a given environment. The available roles are: * **Admin** - Full permissions across all resources * **Developer** - Read and Write access to most resources * **Viewer** - Read-only access. Cannot read non-sensitive resources Personal API Keys are useful for programmatic access when you need permissions scoped to your user account. ### 3. Public API Key Public API Keys are used in your widget to request public resources. These keys are designed to be used in client-side applications and have limited permissions. ## JWT Authentication for Widgets In addition to using a Public API Key, you should configure your widget with a JWT and enable the "Require JWT to authenticate tenant requests" settings in the hotglue dashboard (**Settings > Widget**). When enabled, the Public API Key alone cannot be used to perform tenant-specific tasks --- a valid JWT must also be provided. ### Generate a Private Signing Key To generate your private signing key, head to the environment settings page and press **Generate private key** under the API Keys section: **Do not share this private signing key!** For security purposes, hotglue does not store your private signing key. Keys are unique to every hotglue environment and can only be generated by an admin. Store this private signing key securely in your backend environment variables. ### Creating a JWT Once you have a private signing key, you can generate a JWT from your backend to make secure requests to the hotglue API. In JavaScript, you can do this with: ```javascript theme={null} const jsonwebtoken = require('jsonwebtoken'); const currentTime = Math.floor(Date.now() / 1000); const tenantId = "unique-tenant-identifier"; const token = jsonwebtoken.sign( { sub: tenantId, iat: currentTime, exp: currentTime + (60 * 60), // 1 hour from now }, Buffer.from(process.env['HOTGLUE_SIGNING_KEY'], "base64").toString("utf8"), { algorithm: "RS256", } ); ``` ### Using the JWT in Widget V2 When launching the widget, you can pass the JWT using the [options parameter](https://docs.hotglue.com/docs/embed-hotglue-javascript-reference#options): ```javascript theme={null} // Generate the JWT in your backend using the signing key const jwt = getJwt(); // Launch the widget HotGlue.open("tenant-id", { jwtToken: jwt }); ``` ### Using the JWT in Widget V3 When using Widget V3 with React, you can pass the JWT directly to the `useHotglue` hook: ```jsx theme={null} import { useHotglue, Widget } from "@hotglue/widget"; export default function WidgetLauncher() { const tenantId = "MY-TENANT-ID"; // Generate the JWT in your backend using the signing key const jwt = getJwt(); const { openWidget } = useHotglue({ tenantId, environmentId: process.env.NEXT_PUBLIC_HOTGLUE_ENV_ID, apiKey: process.env.NEXT_PUBLIC_HOTGLUE_PUBLIC_KEY, jwtToken: '' }); return (
); } ``` For vanilla JavaScript, you can pass the JWT when initializing the `Hotglue` instance: ```javascript theme={null} // Generate the JWT in your backend using the signing key const jwt = getJwt(); const hotglue = new Hotglue({ tenantId: 'tenant-123', environmentId: '', apiKey: '', jwtToken: '' }); ``` ### Using the JWT in API Requests Sensitive API endpoints allow you to pass the JWT as a query parameter to access sensitive data on behalf of a tenant while using your Public API Key: ```shell theme={null} curl --request GET \ --url 'https://api.hotglue.com/env_id/flow_id/tenant_id/linkedSources?token=jwt' \ --header 'Accept: application/json' \ --header 'x-api-key: public_api_key' ``` # Create linked flows Source: https://docs.hotglue.com/api-reference/flows/create-linked-flows post /{env_id}/flows/linked Link a flow for a specific tenant # Retrieve linked flows Source: https://docs.hotglue.com/api-reference/flows/retrieve-linked-flows get /{env_id}/flows/linked Returns the flows that are currently linked for a specific tenant # Retrieve supported flows Source: https://docs.hotglue.com/api-reference/flows/retrieve-supported-flows get /{env_id}/flows/supported Returns all flows in an environment and their connectors # Cancel queued job Source: https://docs.hotglue.com/api-reference/jobs/cancel-queued-job delete /{env_id}/{flow}/{user_id}/jobs/queued/{queued_job_id} Cancels a queued job. # Fetch environment queued jobs Source: https://docs.hotglue.com/api-reference/jobs/fetch-environment-queued-jobs get /{env_id}/jobs/queued Returns queued jobs for an environment across flows/users. # Fetch job zip Source: https://docs.hotglue.com/api-reference/jobs/fetch-job-zip get /{env_id}/{flow_id}/{tenant}/jobs/zip Jobs Download # Fetch jobs Source: https://docs.hotglue.com/api-reference/jobs/fetch-jobs get /{env_id}/{flow_id}/{tenant}/jobs Returns a list of job details for a specified tenant. Note that this endpoint does not return raw data fetched in jobs. # Fetch queued jobs Source: https://docs.hotglue.com/api-reference/jobs/fetch-queued-jobs get /{env_id}/{flow}/{user_id}/jobs/queued Returns queued jobs for a specific environment, flow, and user/tenant. # Stage data for write jobs Source: https://docs.hotglue.com/api-reference/jobs/generate-upload-url post /{env_id}/{flow}/{user_id}/connectors/api/uploads/url Generates a presigned URL for uploading a JSON file to a connector's uploads directory. Upload the file to the returned URL, then trigger a write job to process it. Instead of uploading your records in the POST job requests (which is subject to payload size limits), you can use this endpoint to stage records of arbitrary size. After generating your presigned url, you can upload json records: ```bash theme={null} # Upload your data curl --request PUT \ --url "$PRESIGNED_URL" \ --header 'Content-Type: application/json' \ --data '{ "Contacts": [ { "email": "testemail@hg.io", "id": "5634", "name": "John Doe" }, { "email": "testemailtwo@hg.io", "id": "6634", "name": "Jane Doe" } ] }' # Trigger a write job (no state body — the job reads the staged file) curl --request POST \ --url 'https://api.hotglue.com/v2/{env_id}/{flow_id}/{tenant}/jobs' \ --header 'content-type: application/json' \ --header 'x-api-key: ' \ --data '{ "connector_id": "hubspot", "job_type": "write", }' ``` # Get latest job Source: https://docs.hotglue.com/api-reference/jobs/get-latest-job get /{env_id}/{flow_id}/{tenant}/jobs/latest Fetch the most recent job for a given tenant in a given flow # Kill job Source: https://docs.hotglue.com/api-reference/jobs/kill-job post /{env_id}/{flow_id}/{tenant}/jobs/kill End any running processes for a job # Poll job status Source: https://docs.hotglue.com/api-reference/jobs/poll-job-status get /{env_id}/{flow_id}/{tenant}/jobs/status Check on the status of a job, using the `job_root` returned by your initial Run Job call. Read about the possible job statuses [here](/key-concepts/jobs/life-cycle). # Retrigger a job Source: https://docs.hotglue.com/api-reference/jobs/retrigger-job post /{env_id}/{flow}/{tenant_id}/jobs/retrigger Retriggers a job based on the provided job_root and parameters. Returns the job details for the retriggered job. # Rollback job Source: https://docs.hotglue.com/api-reference/jobs/rollback-job post /{env_id}/{flow_id}/{tenant}/jobs/rollback Reset the the configuration to the state before a given job ran. This affects the `source state` (bookmarks) and the `snapshots`. # Trigger download Source: https://docs.hotglue.com/api-reference/jobs/trigger-download get /{env_id}/{flow_id}/{tenant}/jobs/download Jobs Download # Create a Magic Link Source: https://docs.hotglue.com/api-reference/manage-tenants/create-magic-link post /{env_id}/magicLink Create a Magic Link to allow tenants to link an integration. # Delete a tenant Source: https://docs.hotglue.com/api-reference/manage-tenants/delete-a-tenant delete /tenant/{env_id}/{tenant} Delete all of a tenants data and optionally revoke OAuth connections # Delete Snapshot Source: https://docs.hotglue.com/api-reference/manage-tenants/delete-snapshot delete /tenant/{env_id}/{tenant}/snapshots Delete all existing snapshots for a particular tenant Learn more about snapshots [here](/transformation/snapshots). # Get Snapshots Source: https://docs.hotglue.com/api-reference/manage-tenants/get-snapshot get /tenant/{env_id}/{tenant}/snapshots Retrieve either a list of snapshot files or a specific snapshot file for a tenant. Learn more about snapshots [here](/transformation/snapshots). # Get tenant config Source: https://docs.hotglue.com/api-reference/manage-tenants/get-tenant-config get /tenant/{env_id}/{tenant}/config Gets the `tenant-config.json` from snapshots # Get tenant mapping Source: https://docs.hotglue.com/api-reference/manage-tenants/get-tenant-mapping get /tenant/{env_id}/{tenant}/mapping Gets the mapping object from the `tenant-config.json`, if present # Retrieve tenants Source: https://docs.hotglue.com/api-reference/manage-tenants/retrieve-tenants get /tenants/{env_id} Returns a list of tenants that exist in an environment # Set tenant config Source: https://docs.hotglue.com/api-reference/manage-tenants/set-tenant-config put /tenant/{env_id}/{tenant}/config Creates a `tenant-config.json` that you can use to store custom settings, credentials, and metadata # Set tenant mapping Source: https://docs.hotglue.com/api-reference/manage-tenants/set-tenant-mapping put /tenant/{env_id}/{tenant}/mapping Adds a mapping object to the `tenant-config.json`. You can use the **Set Tenant Mapping** endpoint to apply a mapping without using the mapping widget. If the **Update Fields on Mapping** widget setting is enabled, the optional `entityType`, `entityId`, and `flow` params are required. Below is an example body: ```json theme={null} { "config": { "mapping": { "": { "/": { "": "" } } } }, "entityType": "taps", // optional - `taps` or `connectors` "entityId": "salesforce", // optional "flow": "FElWoODnU" // optional } ``` # Set tenant metadata Source: https://docs.hotglue.com/api-reference/manage-tenants/set-tenant-metadata put /tenant/{env_id}/{tenant}/metadata Add metadata to your [Tenant Metadata](/key-concepts/tenants/metadata) object # Toggle schedule Source: https://docs.hotglue.com/api-reference/manage-tenants/toggle-schedule put /tenants/{env_id}/schedule Disable, enable, and manage schedules across tenants in your environment # Update tenant config Source: https://docs.hotglue.com/api-reference/manage-tenants/update-tenant-config patch /tenant/{env_id}/{tenant}/config Update an existing tenant config # Generate MCP token Source: https://docs.hotglue.com/api-reference/mcp/generate-mcp-token get /{env_id}/{flow_id}/{tenant}/mcpToken Generates a per-tenant bearer token for authenticating to hotglue's Composite MCP server (`https://mcp.hotglue.com/mcp`). The token scopes tool discovery and tool calls to the specified tenant's linked connectors. # Overview Source: https://docs.hotglue.com/api-reference/overview Start making requests to the hotglue API! To start using the hotglue API, make sure you have the following handy ## Environment ID ### (env\_id) This is the ID of your hotglue environment. It can be found in the hotglue panel, under the settings page. ## API Key ### (x-api-key) This is your public or private API key, depending on the sensitivity of your request. It can be found in the hotglue panel, under the settings page. By default, this is global to all your hotglue environments. [Learn more](/api-reference/authentication) about authenticating to the hotglue API. ## Flow ID ### (flow\_id) If you're working with a specific flow, you will need to know its ID. This is available in the URL when you're in a specific flow, or can be requested via API. # Poll write request Source: https://docs.hotglue.com/api-reference/real-time/status get /{env_id}/{flow_id}/{tenant}/connectors/status If a real-time write request returns async: true, you can use this endpoint to get the result of the request. # Write to a connector Source: https://docs.hotglue.com/api-reference/real-time/write post /{env_id}/{flow_id}/{tenant}/connectors/{connector_id}/{stream} Write data directly to integrations in real-time. Note: this feature is in beta with limited support. # Create jobs schedule Source: https://docs.hotglue.com/api-reference/schedule-jobs/create-jobs-schedule put /{env_id}/{flow_id}/{tenant}/jobs/schedule Create a new schedule for a tenant # Delete jobs schedule Source: https://docs.hotglue.com/api-reference/schedule-jobs/delete-jobs-schedule delete /{env_id}/{flow_id}/{tenant}/jobs/schedule Delete or disable a schedule for a tenant **Hard delete is only supported for the default tenant.** When `hard_delete=true` and `tenant` is `default`, the schedule is permanently removed. For any other tenant, the same request only disables the schedule — it does not delete it. See [Deleting or disabling schedules via API](/key-concepts/jobs/scheduling#deleting-or-disabling-schedules-via-api) for details. # Retrieve jobs schedule Source: https://docs.hotglue.com/api-reference/schedule-jobs/retrieve-jobs-schedule get /{env_id}/{flow_id}/{tenant}/jobs/schedule Fetch the schedule for a tenant # Delete Connector Selected Filters Source: https://docs.hotglue.com/api-reference/stream-filters/delete-selected-filters delete /{env_id}/{flow_id}/{tenant}/connectors/{connector_id}/selectedFilters Delete the Connector Selected Filters configuration # Retrieve Connector Available Filters Source: https://docs.hotglue.com/api-reference/stream-filters/get-available-filters get /{env_id}/{flow_id}/{tenant}/connectors/{connector_id}/availableFilters Fetch the Available Filters configuration for a connector # Retrieve Connector Selected Filters Source: https://docs.hotglue.com/api-reference/stream-filters/get-selected-filters get /{env_id}/{flow_id}/{tenant}/connectors/{connector_id}/selectedFilters Fetch the Connector Selected Filters configuration # Save Connector Selected Filters Source: https://docs.hotglue.com/api-reference/stream-filters/put-selected-filters put /{env_id}/{flow_id}/{tenant}/connectors/{connector_id}/selectedFilters Save the Connector Selected Filters configuration # Introduction Source: https://docs.hotglue.com/api-reference/v1/introduction The following endpoints apply for V1, one-way flows Flows define a group of integrations that your customers can connect to. There are three types of flows that you can enable in hotglue: ## V1 - One-way flows ### Source flow This is the simplest way to use hotglue, and the default flow type when you toggle off **bidirectional flows**. With a source flow, your customer connects the `source` or `tap`, and you read data in from those linked sources into your own default target. ### Target flow This can be enabled in the **General** tab of a V1 flow. This is the inverse of a source flow, where your customer links an integration that you write data out to, but cannot read data in from. ## V2 - bidirectional flows If you need to read and write data to the same integration, you can use a bidirectional flow to use the same connection for both. There are two main differences between API calls for V1 and V2 flows: * V2 flows include a `/v2` in API calls. * V2 flows do not have a concept of `taps` and `targets`. From the perspective of a V2 flow, everything is a `connector`. # Run a V1 job Source: https://docs.hotglue.com/api-reference/v1/jobs/run-job post /{env_id}/{flow_id}/{tenant}/jobs Kicks off a job for a given tenant. When using the API tap, you can pass a payload in the `state` object to be written to the target. When `queue_if_active_job` is set to true in the request body, hotglue queues the job if another job is already running for the same tenant or flow. # Delete source state Source: https://docs.hotglue.com/api-reference/v1/linked-sources-state/delete-source-state delete /{env_id}/{flow_id}/{tenant}/linkedSources/state Clearing the source state means that the next job will be a full sync # Retrieve source state Source: https://docs.hotglue.com/api-reference/v1/linked-sources-state/retrieve-source-state get /{env_id}/{flow_id}/{tenant}/linkedSources/state Fetch the current bookmarks for your tenant's linked source # Set source state Source: https://docs.hotglue.com/api-reference/v1/linked-sources-state/set-source-state put /{env_id}/{flow_id}/{tenant}/linkedSources/state Overwrite the source state with your own bookmarks to re-sync or ignore data # Kill discover Source: https://docs.hotglue.com/api-reference/v1/linked-sources/kill-discover get /{env_id}/{flow_id}/{tenant}/linkedConnectors/discover/kill # Link a source Source: https://docs.hotglue.com/api-reference/v1/linked-sources/link-a-source post /{env_id}/{flow_id}/{tenant}/linkedSources Create a new connection for a tenant by passing a config object, along with an optional schedule or field_map # Poll Discover Source: https://docs.hotglue.com/api-reference/v1/linked-sources/poll-discover get /{env_id}/{flow_id}/{tenant}/linkedSources/discover/poll Check the status of a running discover. If empty, no discover is currently running. # Retrieve linked source Source: https://docs.hotglue.com/api-reference/v1/linked-sources/retrieve-linked-source get /{env_id}/{flow_id}/{tenant}/linkedSources Fetch the linked source for a tenant. This can be useful for fetching credentials and flags, and to confirm that a user is properly connected. # Run Discover Source: https://docs.hotglue.com/api-reference/v1/linked-sources/run-discover get /{env_id}/{flow_id}/{tenant}/linkedSources/discover Run a discover to generate a `catalog` of available tables and fields # Unlink a source Source: https://docs.hotglue.com/api-reference/v1/linked-sources/unlink-a-source delete /{env_id}/{flow_id}/{tenant}/linkedSources Permanently delete your tenant's connection. This cannot be undone. # Update linked sources Source: https://docs.hotglue.com/api-reference/v1/linked-sources/update-linked-sources patch /{env_id}/{flow_id}/{tenant}/linkedSources Modify the field map or change the config for a linked source # Link a target Source: https://docs.hotglue.com/api-reference/v1/linked-targets/link-a-target post /{env_id}/{flow_id}/{tenant}/linkedTargets Link one of your tenants to a target # Retrieve linked target Source: https://docs.hotglue.com/api-reference/v1/linked-targets/retrieve-linked-target get /{env_id}/{flow_id}/{tenant}/linkedTargets Fetch metadata about your tenant's linked target # Run Discover Source: https://docs.hotglue.com/api-reference/v1/linked-targets/run-discover get /{env_id}/{flow_id}/{tenant}/linkedTargets/discover Run a discover for a linked target # Unlink a target Source: https://docs.hotglue.com/api-reference/v1/linked-targets/unlink-a-target delete /{env_id}/{flow_id}/{tenant}/linkedTargets Clears the configuration for a tenant's linked target. This cannot be undone. # Update a linked target Source: https://docs.hotglue.com/api-reference/v1/linked-targets/update-linked-target patch /{env_id}/{flow_id}/{tenant}/linkedTargets Modify the config object on a linkedTarget # Available sources Source: https://docs.hotglue.com/api-reference/v1/source-metadata/available-sources get /{env_id}/availableSources Returns details for every source that you can enable in your environment # Supported sources Source: https://docs.hotglue.com/api-reference/v1/source-metadata/supported-sources get /{env_id}/{flow_id}/supportedSources Returns all of the sources that are enabled in a particular flow # Available targets Source: https://docs.hotglue.com/api-reference/v1/target-metadata/available-targets get /{env_id}/availableTargets Returns details for every target that you can enable in your environment # Supported targets Source: https://docs.hotglue.com/api-reference/v1/target-metadata/supported-targets get /{env_id}/{flow_id}/supportedTargets Returns all of the targets that are enabled in a particular flow # Retrieve available connectors Source: https://docs.hotglue.com/api-reference/v2/connector-metadata/retrieve-available-connectors get /v2/{env_id}/availableConnectors Returns details for every connector that you can enable in your environment # Retrieve supported connectors Source: https://docs.hotglue.com/api-reference/v2/connector-metadata/retrieve-supported-connectors get /v2/{env_id}/{flow_id}/supportedConnectors Returns details for connectors that have been enabled in a given flow # Introduction Source: https://docs.hotglue.com/api-reference/v2/introduction The following section applies to V2 bidirectional flows. Flows define a group of integrations that your customers can connect to. There are three types of flows that you can enable in hotglue: ## V1 - One-way flows ### Source flow This is the simplest way to use hotglue, and the default flow type when you toggle off **bidirectional flows**. With a source flow, your customer connects the `source` or `tap`, and you read data in from those linked sources into your own default target. ### Target flow This can be enabled in the **General** tab of a V1 flow. This is the inverse of a source flow, where your customer links an integration that you write data out to, but cannot read data in from. ## V2 - bidirectional flows If you need to read and write data to the same integration, you can use a bidirectional flow to use the same connection for both. There are two main differences between API calls for V1 and V2 flows: * V2 flows include a `/v2` in API calls. * V2 flows do not have a concept of `taps` and `targets`. From the perspective of a V2 flow, everything is a `connector`. # Run a V2 Job Source: https://docs.hotglue.com/api-reference/v2/jobs/create post /v2/{env_id}/{flow_id}/{tenant}/jobs Kicks off a job for a given tenant. Can be used to write data in target flows by passing a payload in the state object. When `queue_if_active_job` is set to true in the request body, hotglue queues the job if another job is already running for the same tenant or flow. # Delete connector state Source: https://docs.hotglue.com/api-reference/v2/linked-connectors-state/delete-connector-state delete /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors/state Clearing the connector state means that the next job will be a full sync # Retrieve connector state Source: https://docs.hotglue.com/api-reference/v2/linked-connectors-state/retrieve-connector-state get /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors/state Fetch the current bookmarks for your tenant's linked connector # Set connector state Source: https://docs.hotglue.com/api-reference/v2/linked-connectors-state/set-connector-state put /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors/state Overwrite the connector state with your own bookmarks to re-sync or ignore data # Link a connector Source: https://docs.hotglue.com/api-reference/v2/linked-connectors/create post /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors Create a new connection for your tenant, along with an optional schedule and field map, without using the embedded widget. # Unlink connector Source: https://docs.hotglue.com/api-reference/v2/linked-connectors/delete delete /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors Clear the credentials and configuration for a tenant's linked integration. This cannot be undone. # Retrieve linked connector Source: https://docs.hotglue.com/api-reference/v2/linked-connectors/get get /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors Fetch the configuration details for a linked connector # Poll Discover Source: https://docs.hotglue.com/api-reference/v2/linked-connectors/poll-discover-status get /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors/discover/poll Check the status of a running discover. If empty, no discover is currently running. # Run Discover Source: https://docs.hotglue.com/api-reference/v2/linked-connectors/trigger-discover get /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors/discover Run a discover to generate a `catalog` of available tables and fields # Update linked connectors Source: https://docs.hotglue.com/api-reference/v2/linked-connectors/update patch /v2/{env_id}/{flow_id}/{tenant}/linkedConnectors Modify the field map or change the config for a linked connector # Unlink a source Source: https://docs.hotglue.com/api-reference/v2/linked-sources/delete delete /v2/{env_id}/{flow_id}/{tenant}/linkedSources Permanently delete your tenant's linked source connection. This will revoke OAuth credentials and remove the source configuration. This cannot be undone. # Get linked sources Source: https://docs.hotglue.com/api-reference/v2/linked-sources/get get /v2/{env_id}/{flow_id}/{tenant}/linkedSources Get a linked source's configuration, catalog, secrets, and trigger mapping for a V2 flow # Update linked source Source: https://docs.hotglue.com/api-reference/v2/linked-sources/update patch /v2/{env_id}/{flow_id}/{tenant}/linkedSources Update a linked source # Unlink a target Source: https://docs.hotglue.com/api-reference/v2/linked-targets/delete delete /v2/{env_id}/{flow_id}/{tenant}/linkedTargets Permanently delete your tenant's linked target connection. This will revoke OAuth credentials and remove the target configuration. This cannot be undone. # Get linked targets Source: https://docs.hotglue.com/api-reference/v2/linked-targets/get get /v2/{env_id}/{flow_id}/{tenant}/linkedTargets Returns the targets linked by a user_id in this env_id # Update linked target Source: https://docs.hotglue.com/api-reference/v2/linked-targets/update patch /v2/{env_id}/{flow_id}/{tenant}/linkedTargets Update a linked target # Configuration Source: https://docs.hotglue.com/cli/configuration The hotglue CLI derives its configuration from two places: the **Profile config** and the **Project config**. ## Profile config The Profile config is stored in a `config.yaml` file located at `$HOME/.hotglue/`. At the moment, it is only used to store your `apikey`. ## Project config The Project config is stored in a hotglue rc-like file and can be created anywhere in your project's folder structure. A Project settings file can hold any of the CLI's parameters (including overriding the apikey, although this is not recommended) and is used to define configuration values specific for that context. The configuration files can use any of the following names: `hotglue.yaml`, `.hotglue.yaml`, `.hotgluerc.yaml`, `.hotgluerc.yml`, `.hotgluerc`, `.hotgluerc.json`, `.hotgluerc.js` As the extensions suggest, the files support either yaml, json or js syntax (in case of JS, the config object has to be exported). However, we recommend using the yaml format. ## Configure your environment [](https://docs.hotglue.com/docs/cli-configuration#configure-your-environment) ### Set API Key [](https://docs.hotglue.com/docs/cli-configuration#set-api-key) To start, you'll need to get your **Personal API Key** from \_**[Account](https://hotglue.xyz/app/settings%5D) > Login & Security > Personal API Key\***, as shown below: ![3068](https://files.readme.io/906edaa-Hotglue_personal_settings.png) ### Personal API Key Once you have this, you can save the API Key to your **Profile config** `$ hotglue config set apikey ` ### Project settings [](https://docs.hotglue.com/docs/cli-configuration#project-settings) Once you have this done, you can create your Project config. For this example, I'll use the yaml syntax and a file named `.hotgluerc`. This config can include the following parameters: | Option | Description | | -------- | --------------------------------------------------------------------------------------------- | | `env` | Specify your hotglue **environment id** (ie. `dev.hotglue.acme.com`) | | `flow` | Specify your hotglue **flow id** (ie. `MDKdfumqM`) | | `tap` | Specify the **tap** to use for the hotglue commands. (ie. `salesforce`) | | `tenant` | Optional. The **tenant id** to use for the commands. Defaults to `default`, the admin config. | Here's a sample config based on the examples listed above: ```shell .hotgluerc theme={null} env: dev.hotglue.acme.com flow: MDKdfumqM tap: salesforce ``` You can now verify your config was created successfully using the `hotglue config` command: ```shell theme={null} $ hotglue config ┌─────────┬───────────────────────────┬─────────────────────────────────────────┬─────────┐ │ Setting │ Value │ Config File │ Type │ ├─────────┼───────────────────────────┼─────────────────────────────────────────┼─────────┤ │ apikey │ ************************ │ /.hotglue/config.yaml │ Profile │ ├─────────┼───────────────────────────┼─────────────────────────────────────────┼─────────┤ │ env │ dev.hotglue.acme.com │ .hotgluerc │ Project │ ├─────────┼───────────────────────────┼─────────────────────────────────────────┼─────────┤ │ flow │ MDKdfumqM │ .hotgluerc │ Project │ ├─────────┼───────────────────────────┼─────────────────────────────────────────┼─────────┤ │ tap │ salesforce │ .hotgluerc │ Project │ ├─────────┼───────────────────────────┼─────────────────────────────────────────┼─────────┤ │ tenant │ default │ .hotgluerc │ Project │ └─────────┴───────────────────────────┴─────────────────────────────────────────┴─────────┘ ``` ## Project structure [](https://docs.hotglue.com/docs/cli-configuration#project-structure) When developing transformation scripts, we recommend a project structure similar to the following, so you can easily deploy scripts for multiple sources with ease. Note that each folder contains a unique `.hotgluerc` which reference different sources (and can even reference different flows). ``` ├── salesforce │ ├── etl.ipynb │ └── .hotgluerc ├── hubspot │ ├── etl.ipynb │ └── .hotgluerc ├── pipedrive │ ├── etl.ipynb │ └── .hotgluerc ``` # Env Source: https://docs.hotglue.com/cli/env List environments and manage environment settings with the hotglue CLI Use the `env` commands to list accessible environments and manage environment settings. Environment settings include `requirements.txt`, `availableSources.json`, `availableTargets.json`, `availableConnectors.json`, and `customTaps.json`. # Env List ## Description Lists the environments available to your Personal API Key. Configure the key with `hotglue config set apikey ` or pass it with `--apikey`. Unlike other environment commands, `env list` does not require `--env`. ## Sample ```shell theme={null} hotglue env list hotglue env list --json ``` Environment API keys are omitted by default. Use `--include-secrets` to include them in the output. ```shell theme={null} hotglue env list --include-secrets ``` Secret-enabled output uses these field names: * `publicApiKey`: the environment's public API key * `personalApiKey`: your Personal API Key * `environmentApiKey`: the environment API key, when authorized `--include-secrets` may print your Personal API Key. Do not expose its output in logs, CI output, or shared terminals. ## Parameters | Option | Default | Description | | ------------------- | -------------- | -------------------------------------------------- | | `--apikey`, `-k` | Profile config | Personal API Key used to authenticate the request. | | `--json` | `false` | Return machine-readable JSON output. | | `--include-secrets` | `false` | Include sensitive API key fields in the output. | # Available environment settings | File | Description | | -------------------------- | ---------------------------------------------------------- | | `requirements.txt` | Default Python dependencies to be used in ETL Scripts | | `availableSources.json` | List of customized sources available in V1 Flows | | `availableTargets.json` | List of customized targets available in V1 Flows | | `availableConnectors.json` | List of customized connectors available in V2 Flows | | `customTaps.json` | List of custom taps built with Hotglue's Connector Builder | # Env Download ## Description Clones the remote env settings saved in Hotglue to your local machine. ## Sample ```shell theme={null} $ hotglue env download [--downloadTo] ✔ Finished: Verifying user and authorizing. ✔ Finished: Scanning environment dev.hotglue.acme.com. ℹ Info: Downloading to ./projects/cin7. ✔ Finished: Downloading file: requirements.txt. ┌──────────────────┬────────────┐ │ File │ Status │ ├──────────────────┼────────────┤ │ requirements.txt │ Downloaded │ └──────────────────┴────────────┘ ``` ## Parameters | Option | Default | Description | | -------------- | ------- | ------------------------------------------------------------------------ | | `--downloadTo` | | | | `-d` | `.` | The directory to download the files to. Defaults to the local directory. | # Env Deploy ## Description Deploys your environment settings ## Sample ```shell theme={null} $ hotglue env deploy [--sourceFolder] ✔ Finished: Scanning ./projects/cin7 for deployable files. ✔ Finished: Verifying user and authorizing. ℹ Info: Deploying environment files. ✔ Finished: Pushing file: requirements.txt. ┌──────────────────┬──────────┐ │ File │ Status │ ├──────────────────┼──────────┤ │ requirements.txt │ Deployed │ └──────────────────┴──────────┘ ``` ## Parameters | Option | Default | Description | | ---------------- | ------- | ------------------------------------------------------------------------ | | `--sourceFolder` | | | | `-s` | `.` | The directory to upload the files from. Defaults to the local directory. | # ETL Source: https://docs.hotglue.com/cli/etl hotglue CLI commands for ETL Programmatically manage your transformation scripts using the `etl` commands below. # ETL Download ### Description Clones the remote ETL script saved in hotglue to your local machine. ### Sample ```shell theme={null} $ hotglue etl download [--overwrite] [--downloadTo] ✔ Finished: Verifying user and authorizing. ✔ Finished: Scanning for downloadable files. ℹ Info: Downloading script files to ./scripts/tap. ✔ Finished: Downloading file: etl.ipynb. ┌───────────┬────────────┐ │ File │ Status │ ├───────────┼────────────┤ │ etl.ipynb │ Downloaded │ └───────────┴────────────┘ ``` ### Parameters | Option | Default | Description | | -------------- | ------- | ------------------------------------------------------------------------------------------- | | `--overwrite` | | | | `-o` | `false` | When enabled, overwrites any files that already exist locally in the download to directory. | | `--downloadTo` | | | | `-d` | `.` | The directory to download the ETL to. Defaults to the local directory. | # ETL Deploy ### Description Deploys the local ETL script to hotglue. ### Sample [](https://docs.hotglue.com/docs/cli-etl#sample-1) ``` $ hotglue etl deploy [--sourceFolder] ✔ Finished: Verifying user and authorizing. ✔ Finished: Validating flow and tap location. ✔ Finished: Preparing deployment target. ℹ Info: Deploying ETL scripts. ✔ Finished: Pushing file: default/flows/bTHIweD0W/taps/cin7/etl/etl.ipynb. ┌─────────────────────────────────────────────────┬──────────┐ │ File │ Status │ ├─────────────────────────────────────────────────┼──────────┤ │ default/flows/bTHIweD0W/taps/cin7/etl/etl.ipynb │ Deleted │ ├─────────────────────────────────────────────────┼──────────┤ │ default/flows/bTHIweD0W/taps/cin7/etl/etl.ipynb │ Deployed │ └─────────────────────────────────────────────────┴──────────┘ ``` ### Parameters | Option | Default | Description | | ---------------- | ------- | ----------------------------------------------------------------------------- | | `--sourceFolder` | | | | `-s` | `.` | The directory to upload the ETL script from. Defaults to the local directory. | # ETL Delete ### Description Deletes a deployed ETL script on hotglue. ### Sample ```shell theme={null} $ hotglue etl delete ℹ Info: Deleting ETL scripts for Tenant tenantId Flow flowId and Tap tapId to envId. ✔ Finished: Verifying user and authorizing. ✔ Finished: Deleting ETL scripts. ┌───────────┬─────────┐ │ File │ Status │ ├───────────┼─────────┤ │ etl.ipynb │ Deleted │ └───────────┴─────────┘ ``` # ETL Set up Local Job Data ### Description Clones hotglue job data to your local machine and creates a `.env` file with the job's environment variables. The file structure and content is identical to the file system your ETL script ran in. The downloaded `etl-output` folder will be renamed to `etl-output-reference`\ and the `snapshots` folder will be renamed to `snapshots-reference`. We recommend using this command to reproduce ETL failures or back test again successful jobs. ### Sample ```shell theme={null} $ hotglue etl setup-local-run tenant123/flows/At_kHalC/jobs/2026/02/09/05/7Y6iUA [--include-configs] [--overwrite] [--downloadTo] ✔ Finished: Verifying user and authorizing. ✔ Finished: Scanning for downloadable files. ┌───────────────────────────────┬─────┬──────────────┐ │ File │ Size │ LastModified │ ├───────────────────────────────┼─────┼──────────────┤ │ catalog.json │ 571 │ 1/9/2026, 6:29:30 PM │ ├───────────────────────────────┼─────┼──────────────┤ │ sync-output/products-20220209T222727.csv │ 3226419 │ 1/9/2026, 5:27:34 PM │ └───────────────────────────────┴─────┴──────────────┘ ℹ Info: Downloading files to `.` ✔ Finished: Downloading file: catalog.json ✔ Finished: Downloading file: sync-output/products-20220209T222727.csv ``` ### Parameters | Option | Default | Description | | ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | `--include-configs` | `false` | When enabled, also downloads `target-config.json`, `source-config.json`, `tenant-config.json` and sets the `API_KEY` environment variable. | | `--overwrite` | | | | `-o` | `false` | When enabled, overwrites any files that already exist locally in the download to directory. | | `--downloadTo` | | | | `-d` | `.` | The directory to download the job data to. Defaults to the local directory. | ### Running the ETL with the jobs environment variables After running the `setup-local-run` command a `.env` file will be created containing the same environment variables that were available when the job ran in the hotglue environment.\ In order to run the ETL with those same environment variables use one of the following methods: #### For VSCode and it's variants Open the launcher file `{project_folder}/.vscode/launch.json` and add the `envFile` entry for launch configuration: ```json theme={null} { "version": "0.2.0", "configurations": [ ..., { "name": "Run ETL script", "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/etl.py", "console": "integratedTerminal", "cwd": "${workspaceFolder}", "python": "${workspaceFolder}/.venv/bin/python", "envFile": "${workspaceFolder}/.env" } ] } ``` #### For Linux/macOS/Git bash/WSL terminal Run the following: ```shell theme={null} source .env python etl.py ``` # ETL Local Run ### Description Runs the ETL locally replicating the Hotglue environment and compares the `etl-output` files with `etl-output-reference` (the one from the job). The comparator check for extra or missing files in the `etl-output` folder and also compares the matching `.csv` and `.singer` files, if they are not the same an error will be shown. In order to use it you first need to download the Transformation script using the `etl download` command and the job data using the `etl setup-local-run` command. We recommend using this command to reproduce ETL failures or back test again successful jobs. ### Sample where the output matches the output from the job ```shell theme={null} $ hotglue etl local-run ✔ Finished: Building Docker image. With code 0 2026-05-06 13:28:15,194 - ETL Local Run - INFO - Installing dependencies... 2026-05-06 13:28:17,316 - ETL Local Run - INFO - Dependencies installed successfully. 2026-05-06 13:28:17,317 - ETL Local Run - INFO - ######################################################### ################# Running ETL ########################### ######################################################### 2026-05-06 13:28:17,707 - ETL Local Run - INFO - ETL run successfully completed. 2026-05-06 13:28:17,707 - ETL Local Run - INFO - ######################################################### ################# Comparing ETL output ################## ######################################################### 2026-05-06 13:28:17,708 - ETL Local Run - INFO - Comparing file: users.csv 2026-05-06 13:28:17,709 - ETL Local Run - INFO - No differences found in users.csv 2026-05-06 13:28:17,709 - ETL Local Run - INFO - ############################################################## ################ ETL output comparator result ################ ############################################################## 2026-05-06 13:28:17,709 - ETL Local Run - INFO - NOTE: Only files with ('.csv', '.singer') extension are compared. 2026-05-06 13:28:17,709 - ETL Local Run - INFO - Files compared: 2026-05-06 13:28:17,710 - ETL Local Run - INFO - - users.csv 2026-05-06 13:28:17,710 - ETL Local Run - INFO - No differences found in the ETL output! ✔ Finished: Running ETL locally. With code 0 ``` ### Sample where the output doesn't match the output from the job ```shell theme={null} $ hotglue etl local-run ✔ Finished: Building Docker image. With code 0 Docker run failed with code 1. 2026-05-06 14:02:43,905 - ETL Local Run - INFO - Installing dependencies... 2026-05-06 14:02:46,200 - ETL Local Run - INFO - Dependencies installed successfully. 2026-05-06 14:02:46,204 - ETL Local Run - INFO - ######################################################### ################# Running ETL ########################### ######################################################### 2026-05-06 14:02:46,579 - ETL Local Run - INFO - ETL run successfully completed. 2026-05-06 14:02:46,579 - ETL Local Run - INFO - ######################################################### ################# Comparing ETL output ################## ######################################################### 2026-05-06 14:02:46,584 - ETL Local Run - ERROR - Extra files in etl-output: {'customers.csv'} 2026-05-06 14:02:46,584 - ETL Local Run - INFO - Comparing file: users.csv 2026-05-06 14:02:46,585 - ETL Local Run - INFO - No differences found in users.csv 2026-05-06 14:02:46,585 - ETL Local Run - INFO - ############################################################## ################ ETL output comparator result ################ ############################################################## 2026-05-06 14:02:46,585 - ETL Local Run - INFO - NOTE: Only files with ('.csv', '.singer') extension are compared. 2026-05-06 14:02:46,585 - ETL Local Run - INFO - Files compared: 2026-05-06 14:02:46,585 - ETL Local Run - INFO - - users.csv 2026-05-06 14:02:46,585 - ETL Local Run - ERROR - Found differences in the ETL output: Extra files in etl-output: {'customers.csv'} ✖ Error: Running ETL locally. ``` ### Parameters | Option | Default | Description | | ------------------- | ------- | -------------------------------------------------------------------------------------------------------------- | | `--etlScriptFolder` | `.` | ETL script folder (downloaded using `etl download`) | | `--jobDataFolder` | `.` | Job data folder (downloaded using `etl setup-local-run`) | | `--dockerPlatform` | ` ` | Docker platform (linux/amd64, linux/arm64, etc.), leave empty to use the default platform of the docker daemon | ### Output comparator options The ETL file comparator has some options that can be set by creating a `test-config.json` file in the Script folder. The options are listed below. #### 1. **`sort_config`** Specifies how rows in a stream and nested fields within rows should be sorted. Supports flat fields, nested fields, and lists of scalars. * **Flat Field Sorting**: Specifies the column used to sort the rows of a stream. * **Nested Field Sorting**: Uses dot notation to sort lists of dictionaries within a row. * **List of Scalars Sorting**: Uses a trailing `.` to sort lists of scalars within a row. **Example Configuration**: ```json theme={null} "sort_config": { "products": [ "id", // Sort rows by "id" "images.id", // Sort "images" (list of dictionaries) by "id" "tags." // Sort "tags" (list of scalars) alphabetically ] } ``` #### 2. **`ignore_columns`** Specifies fields to ignore during the comparison. Supports flat fields and nested fields using dot notation. * **Flat Fields**: Directly removes the specified field from rows. * **Nested Fields**: Removes specified fields within nested structures using dot notation. **Example Configuration**: ```json theme={null} "ignore_columns": { "products": [ "body_html", // Ignore "body_html" column "images.alt" // Ignore "alt" field in "images" (list of dictionaries) ] } ``` #### 3. **`rename_config`** Specifies fields to rename in the etl-output only. Supports flat and nested fields using dot notation. * **Flat Fields**: Renames top-level fields in rows. * **Nested Fields**: Renames fields within nested structures using dot notation. **Example Configuration**: ```json theme={null} "rename_config": { "products": { "created_at": "c_at", // Rename "created_at" to "c_at" "images.created_at": "c_at" // Rename "created_at" to "c_at" within "images" (list of dictionaries) } } ``` # Flows Source: https://docs.hotglue.com/cli/flows hotglue CLI commands for flows Manage flows directly from the CLI. # Flows Create ## Description Creates a new v2 (bidirectional) flow in the hotglue environment. A unique flow ID is generated automatically. ## Sample ```shell theme={null} $ hotglue flows create --env prod.acme.com --name "My Flow" ``` ## Parameters | Option | Default | Description | | --------------- | ------- | ---------------------------------------- | | `--env` | | | | `-e` | | Environment ID to create the flow in. | | `--name` | | **Required.** Display name for the flow. | | `--description` | | Optional flow description. | | `--flow-icon` | | Flow icon URL or base64 string. | # Flows List ## Description Lists the flows in the hotglue environment. ## Sample ```shell theme={null} $ hotglue flows list ┌───────────┬────────────────────┬────────┬──────────────────────────┬──────────────────┐ │ ID │ Name │ isPush │ Taps │ Targets │ ├───────────┼────────────────────┼────────┼──────────────────────────┼──────────────────┤ │ RYiRJ3OQM │ Shopify │ false │ [ 'shopify' ] │ [] │ ├───────────┼────────────────────┼────────┼──────────────────────────┼──────────────────┤ │ MDKdfumqM │ Klaviyo │ false │ [ 'klaviyo' ] │ [ 's3' ] │ └───────────┴────────────────────┴────────┴──────────────────────────┴──────────────────┘ ``` ## Parameters | Option | Default | Description | | ------- | ------- | ---------------------------------- | | `--env` | | | | `-e` | | Environment Id to query flows for. | # Jobs Source: https://docs.hotglue.com/cli/jobs hotglue CLI commands for jobs Programmatically view, clone, and manage jobs using the commands below. # Jobs Download ### Description Clones a remote job to your local machine, under a new directory with the name of the `job_id`. ### Sample ```shell theme={null} $ hotglue jobs download ✔ Finished: Verifying user and authorizing. ✔ Finished: Scanning for downloadable files. ┌─────────────────────────────────────────────────┬─────────┬──────────────────────┐ │ File │ Size │ LastModified │ ├─────────────────────────────────────────────────┼─────────┼──────────────────────┤ │ job-details.json │ 571 │ 2/9/2022, 6:29:30 PM │ ├─────────────────────────────────────────────────┼─────────┼──────────────────────┤ │ sync-output/products-20220209T222727.csv │ 3226419 │ 2/9/2022, 5:27:34 PM │ └─────────────────────────────────────────────────┴─────────┴──────────────────────┘ ✔ Finished: Downloading file: default/flows/bTHIweD0W/jobs/2022/02/2/09/22/KfKW1X/job-details.json. ✔ Finished: Downloading file: default/flows/bTHIweD0W/jobs/2022/02/2/09/22/KfKW1X/sync-output/products-20220209T222727.csv. ``` ### Parameters | Option | Description | | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | `job_root` | The `s3_root` (known as the job root) of the job to clone. Can be found in [Job Details](/key-concepts/jobs/details) or in the URL of the hotglue job page. | > The job root is of the form: `tenant_id/flows/flow_id/jobs/2025/01/1/01/01/job_id` # Jobs List ### Description Lists jobs across the hotglue environment. You can filter the results by tenant, connector, status, and date range. ### Sample ``` $ hotglue jobs list --tenant default --status JOB_COMPLETED --count 5 ✔ Finished: List jobs. ┌────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ name │ details │ ├────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ test:H3XnhScoo │ { │ │ │ "job_id": "KfKW1X", │ │ │ "env_id": "dev.hotglue.acme.com", │ │ │ "flow_id": "bTHIweD0W", │ │ │ "job_name": "test:H3XnhScoo", │ │ │ "tenant": "default", │ │ │ "started_by": "default", │ │ │ "s3_root": "default/flows/bTHIweD0W/jobs/2022/02/2/09/22/KfKW1X", │ │ │ "start_time": "2022-02-09T22:22:19.173879+00:00", │ │ │ "state": {}, │ │ │ "tap": "cin7", │ │ │ "status": "JOB_COMPLETED", │ │ │ "scheduled_job": false, │ │ │ "message": "Status for Job (KfKW1X) was updated to JobStatus.JOB_COMPLETED; (flow: bTHIweD0W) ", │ │ │ "task_id": "864256547fa34584aa61d46eac0d08c5", │ │ │ "last_updated": "2022-02-09T23:29:29.791107+00:00", │ │ │ "processed_rows": 0 │ │ │ } │ ├────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤ ``` ### Parameters | Option | Default | Description | | ----------- | ------- | --------------------------------------------------------------------------- | | `--count` | `10` | Number of jobs to return, from 1-100. | | `--page` | `1` | Page of results to return. | | `--status` | | Job status to filter on. Supports multiple comma-separated statuses. | | `--tenant` | | | | `-u` | | Tenant ID to filter on. | | `--taps` | | One or more taps to filter on. Multiple taps must be comma-separated. | | `--targets` | | One or more targets to filter on. Multiple targets must be comma-separated. | | `--from` | | Start date for the query, formatted as `YYYY-MM-DD`. | | `--to` | | End date for the query, formatted as `YYYY-MM-DD`. | | `--env` | | | | `-e` | | Environment ID to query jobs for. | # Jobs Status ### Description Polls the status of a job using its job root. ### Sample ```shell theme={null} $ hotglue jobs status --flow bTHIweD0W --tenant default --job-root default/flows/bTHIweD0W/jobs/2025/01/1/01/01/KfKW1X ✔ Finished: Poll job status. { "job_id": "KfKW1X", "env_id": "dev.hotglue.acme.com", "flow": "bTHIweD0W", "tenant": "default", "s3_root": "default/flows/bTHIweD0W/jobs/2025/01/1/01/01/KfKW1X", "status": "JOB_COMPLETED" } ``` ### Parameters | Option | Default | Description | | ------------ | --------- | ----------------------------------------- | | `--job-root` | | **Required.** S3 root of the job to poll. | | `--flow` | | | | `-f` | | Flow ID for the job. | | `--tenant` | | | | `-u` | `default` | Tenant ID for the job. | | `--env` | | | | `-e` | | Environment ID for the job. | # Jobs Logs ### Description Gets a page of logs for a job. By default, logs are displayed in a table with timestamp and message columns. Use `--json` to include pagination tokens in the output. ### Sample ```shell theme={null} $ hotglue jobs logs --flow bTHIweD0W --tenant default --job-root default/flows/bTHIweD0W/jobs/2025/01/1/01/01/KfKW1X ✔ Finished: Get job logs. ┌──────────────────────────┬────────────────┐ │ timestamp │ message │ ├──────────────────────────┼────────────────┤ │ 2025-01-01T01:02:03.000Z │ Task completed │ └──────────────────────────┴────────────────┘ ``` ### Parameters | Option | Default | Description | | ------------------- | --------- | ----------------------------------------------------- | | `--job-root` | | **Required.** S3 root of the job. | | `--flow` | | | | `-f` | | **Required.** Flow ID for the job. | | `--tenant` | | | | `-u` | `default` | Tenant ID for the job. | | `--env` | | | | `-e` | | Environment ID for the job. | | `--limit` | | Maximum number of log events to return. | | `--next-token` | | Pagination token returned by a previous request. | | `--start-time` | | Earliest event timestamp in epoch milliseconds. | | `--end-time` | | Latest event timestamp in epoch milliseconds. | | `--start-from-head` | `false` | Return the earliest events first. | | `--task-id` | | Get logs for a specific task associated with the job. | For logs, pass `nextForwardToken` back with `--start-from-head` to continue forward, or pass `nextBackwardToken` without it to continue backward. Stop when the API returns the same token again. # Jobs Run ### Description Runs a V1 or V2 job for a tenant. ### Sample ```shell theme={null} $ hotglue jobs run --flow bTHIweD0W --tenant default --tap salesforce --job-name manual-sync ✔ Finished: Run a job. { "job_id": "KfKW1X", "status": "JOB_STARTED", "s3_root": "default/flows/bTHIweD0W/jobs/2025/01/1/01/01/KfKW1X" } ``` To run a V2 job, add `--v2` with `--connector-id` and `--job-type`: ```shell theme={null} $ hotglue jobs run --v2 --flow bTHIweD0W --tenant default --connector-id salesforce --job-type read ✔ Finished: Run a job. { "job_id": "KfKW1X", "status": "JOB_STARTED", "s3_root": "default/flows/bTHIweD0W/jobs/2025/01/1/01/01/KfKW1X" } ``` ### Parameters Options that accept objects should be passed as JSON strings. | Option | Default | Description | | ----------------------------- | --------- | ------------------------------------------------------------- | | `--flow` | | | | `-f` | | Flow ID to run the job for. | | `--tenant` | | | | `-u` | `default` | Tenant ID to run the job for. | | `--env` | | | | `-e` | | Environment ID to run the job for. | | `--v2` | `false` | Run a V2 job. Requires `--connector-id` and `--job-type`. | | `--tap` | | Source of the V1 job. | | `--connector-id` | | Connector ID to run for V2 jobs. | | `--job-type` | | V2 job type. Must be `read` or `write`. | | `--job-name` | | Name for the job. | | `--state` | | JSON object with extra context to use in the job. | | `--override-start-date` | | Date to start syncing data from. | | `--override-end-date` | | Date to sync data until. | | `--reset-source-state` | `false` | Run the job as a full sync. | | `--streaming-job` | `false` | Run in streaming mode. | | `--override-selected-tables` | | JSON object with a temporary unified schema object selection. | | `--override-field-map` | | JSON object with a temporary field map. | | `--override-source-config` | | JSON object with a temporary source config override. | | `--override-target-config` | | JSON object with a temporary target config override. | | `--override-connector-config` | | JSON object with a temporary connector config override. | | `--environment-variables` | | JSON object with job environment variable overrides. | # Jobs Bulk Run ### Description Runs multiple jobs in bulk from a JSON file. The command reads a JSON file containing an array of job configurations, validates each job, checks flow versions, and runs all jobs in parallel. Results are displayed in a table format with a summary of successes and failures. ### Sample ```shell theme={null} $ hotglue jobs bulk-run --file ./jobs.json ✔ Finished: Reading jobs file: ./jobs.json. ✔ Finished: Checking flow versions.... ✔ Finished: Running 3 job(s).... ┌───────┬──────────┬─────────┬─────────┬────────────────────────────────────────────────────────────┐ │ Index │ Flow │ Tenant │ Status │ Response/Error │ ├───────┼──────────┼─────────┼─────────┼────────────────────────────────────────────────────────────┤ │ 0 │ bTHIweD0W│ default │ SUCCESS │ { │ │ │ │ │ │ "job_id": "KfKW1X", │ │ │ │ │ │ "status": "JOB_STARTED" │ │ │ │ │ │ } │ ├───────┼──────────┼─────────┼─────────┼────────────────────────────────────────────────────────────┤ │ 1 │ cXYZ1234 │ default │ SUCCESS │ { │ │ │ │ │ │ "job_id": "AbC123", │ │ │ │ │ │ "status": "JOB_STARTED" │ │ │ │ │ │ } │ ├───────┼──────────┼─────────┼─────────┼────────────────────────────────────────────────────────────┤ │ 2 │ dEFG5678 │ tenant1 │ FAILED │ { │ │ │ │ │ │ "statusCode": 404, │ │ │ │ │ │ "statusText": "Not Found", │ │ │ │ │ │ "message": "Flow not found" │ │ │ │ │ │ } │ └───────┴──────────┴─────────┴─────────┴────────────────────────────────────────────────────────────┘ Summary: 2 succeeded, 1 failed out of 3 total. ``` Example JSON file format (`jobs.json`): ```json theme={null} [ { "flow": "bTHIweD0W", "tenant": "tenant1", "tap": "salesforce" }, { "flow": "cXYZ1234", "tenant": "tenant2", "tap": "salesforce", "override_start_date": "2023-11-07T05:31:56Z" }, { "flow": "dEFG5678", "tenant": "tenant3", "tap": "quickbooks", "job_name": "test-job" } ] ``` ### Parameters | Option | Description | | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--file` `-f` | **Required.** Path to JSON file containing an array of job objects to run. Each job object must include `flow` and `tenant` fields. Additional job arguments can be included and will be passed to the body of the job trigger endpoint. | # Jobs Bulk Kill ### Description Kills multiple running jobs in bulk. The command fetches jobs from the last month with statuses `JOB_CREATED`, `SYNC_STARTED`, `SYNC_SUCCESS`, `ETL_STARTED`, `ETL_SUCCESS`, or `EXPORT_STARTED`, optionally filters them by tenant IDs and/or flow IDs, and kills all matching jobs in parallel. Results are displayed in a table format with a summary of successes and failures. ### Sample ```shell theme={null} $ hotglue jobs bulk-kill --tenant-ids tenant1,tenant2 --flow-ids bTHIweD0W --reason "Maintenance" ✔ Found 5 job(s) with specified status. ✔ Finished: Killing 5 job(s).... ┌───────┬──────────┬─────────┬──────────────────────────────────────────────────────┬─────────┬────────────────────────────────────────────────────────────┐ │ Index │ Flow │ Tenant │ Job Root │ Status │ Response/Error │ ├───────┼──────────┼─────────┼──────────────────────────────────────────────────────┼─────────┼────────────────────────────────────────────────────────────┤ │ 0 │ bTHIweD0W│ tenant1 │ tenant1/flows/bTHIweD0W/jobs/2025/01/1/01/01/KfKW1X │ SUCCESS │ { │ │ │ │ │ │ │ "status": "JOB_KILLED" │ │ │ │ │ │ │ } │ ├───────┼──────────┼─────────┼──────────────────────────────────────────────────────┼─────────┼────────────────────────────────────────────────────────────┤ │ 1 │ bTHIweD0W│ tenant2 │ tenant2/flows/bTHIweD0W/jobs/2025/01/1/01/02/AbC123 │ SUCCESS │ { │ │ │ │ │ │ │ "status": "JOB_KILLED" │ │ │ │ │ │ │ } │ ├───────┼──────────┼─────────┼──────────────────────────────────────────────────────┼─────────┼────────────────────────────────────────────────────────────┤ │ 2 │ bTHIweD0W│ tenant1 │ tenant1/flows/bTHIweD0W/jobs/2025/01/1/01/03/dEF567 │ FAILED │ { │ │ │ │ │ │ │ "statusCode": 404, │ │ │ │ │ │ │ "statusText": "Not Found", │ │ │ │ │ │ │ "message": "Job not found" │ │ │ │ │ │ │ } │ └───────┴──────────┴─────────┴──────────────────────────────────────────────────────┴─────────┴────────────────────────────────────────────────────────────┘ Summary: 2 succeeded, 1 failed out of 3 total. ``` ### Parameters | Option | Description | | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--tenant-ids` `--tenants` | Comma-separated list of tenant IDs to filter jobs by. Only jobs belonging to these tenants will be killed. If not provided, all matching jobs will be considered. | | `--flow-ids` | | | `--flows` | Comma-separated list of flow IDs to filter jobs by. Only jobs for these flows will be killed. If not provided, all matching jobs will be considered. | | `--reason` | Optional reason for killing the jobs. This reason will be included in the kill request for all jobs. | # Jobs Bulk Retrigger ### Description Retriggers multiple jobs in bulk from a JSON file containing job roots. The command reads a JSON file containing an array of job root strings, groups them by tenant and flow, and retriggers jobs with parallel processing across groups and sequential processing within each group. For each group, the command waits for a job to complete before retriggering the next job in that group. Results are displayed in a table format with a summary of successes and failures. ### Sample ```shell theme={null} $ hotglue jobs bulk-retrigger --file ./jobRoots.json ✔ Finished: Reading jobRoots file: ./jobRoots.json. Found 5 jobRoot(s) grouped into 2 tenant/flow group(s). ✔ Finished: Retriggering 5 job(s) across 2 group(s).... ┌─────────┬──────────┬──────────────────────────────────────────────────────┬─────────┬────────────────────────────────────────────────────────────┐ │ Tenant │ Flow │ Job Root │ Status │ Response/Error │ ├─────────┼──────────┼──────────────────────────────────────────────────────┼─────────┼────────────────────────────────────────────────────────────┤ │ tenant1 │ bTHIweD0W│ tenant1/flows/bTHIweD0W/jobs/2025/01/1/01/01/KfKW1X│ SUCCESS │ { │ │ │ │ │ │ "job_id": "KfKW1X", │ │ │ │ │ │ "status": "JOB_STARTED" │ │ │ │ │ │ } │ ├─────────┼──────────┼──────────────────────────────────────────────────────┼─────────┼────────────────────────────────────────────────────────────┤ │ tenant1 │ bTHIweD0W│ tenant1/flows/bTHIweD0W/jobs/2025/01/1/01/02/AbC123 │ SUCCESS │ { │ │ │ │ │ │ "job_id": "AbC123", │ │ │ │ │ │ "status": "JOB_STARTED" │ │ │ │ │ │ } │ ├─────────┼──────────┼──────────────────────────────────────────────────────┼─────────┼────────────────────────────────────────────────────────────┤ │ tenant2 │ cXYZ1234 │ tenant2/flows/cXYZ1234/jobs/2025/01/1/01/03/dEF567 │ FAILED │ { │ │ │ │ │ │ "statusCode": 404, │ │ │ │ │ │ "statusText": "Not Found", │ │ │ │ │ │ "message": "Job not found" │ │ │ │ │ │ } │ └─────────┴──────────┴──────────────────────────────────────────────────────┴─────────┴────────────────────────────────────────────────────────────┘ Summary: 2 succeeded, 1 failed out of 3 total. ``` Example JSON file format (`jobRoots.json`): ```json theme={null} [ "tenant1/flows/bTHIweD0W/jobs/2025/01/1/01/01/KfKW1X", "tenant1/flows/bTHIweD0W/jobs/2025/01/1/01/02/AbC123", "tenant2/flows/cXYZ1234/jobs/2025/01/1/01/03/dEF567" ] ``` ### Parameters | Option | Description | | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--file` `-f` | **Required.** Path to JSON file containing an array of job root strings to retrigger. Each job root must follow the format: `{tenantId}/flows/{flowId}/jobs/...`. Jobs are automatically grouped by tenant and flow, and processed sequentially within each group (waiting for completion) while groups are processed in parallel. | # Linked Entities Source: https://docs.hotglue.com/cli/linked-entities Link connectors, sources, and targets to tenants with the hotglue CLI Use the `linked-entities` commands to link connectors, sources, and targets to a tenant on a flow. These are the entities that a tenant has connected for a given flow. Use `supported-entities get` first to discover the connection parameters a connector expects before linking it. # Linked Entities Create ## Description Links an entity to a tenant on a flow. By default, the command links a v2 connector. ## Samples Link a v2 connector: ```shell theme={null} hotglue linked-entities create --env prod.acme.com --flow bTHIweD0W --tenant acme --id shopify ``` Pass the connector configuration as a shell-quoted JSON object: ```shell theme={null} hotglue linked-entities create \ --env prod.acme.com \ --flow bTHIweD0W \ --tenant acme \ --id s3 \ --config '{"bucket":"my-bucket"}' ``` Use `--entity-type` and `--flow-version` to link another entity type: ```shell theme={null} # v2 source hotglue linked-entities create --env prod.acme.com --flow bTHIweD0W --tenant acme --id shopify --entity-type source # v2 target with configuration hotglue linked-entities create --env prod.acme.com --flow bTHIweD0W --tenant acme --id s3 --entity-type target --config '{"bucket":"my-bucket"}' # v1 source hotglue linked-entities create --env prod.acme.com --flow bTHIweD0W --tenant acme --id shopify --entity-type source --flow-version v1 # v1 target hotglue linked-entities create --env prod.acme.com --flow bTHIweD0W --tenant acme --id s3 --entity-type target --flow-version v1 ``` V1 flows support sources and targets, but not connectors. Return machine-readable output for programmatic use: ```shell theme={null} hotglue linked-entities create --env prod.acme.com --flow bTHIweD0W --tenant acme --id s3 --json ``` ## Parameters | Option | Default | Description | | ---------------- | -------------- | -------------------------------------------------------------- | | `--apikey`, `-k` | Profile config | Personal API Key used to authenticate the request. | | `--env`, `-e` | | **Required.** Environment containing the flow. | | `--flow`, `-f` | | **Required.** Flow to link the entity to. | | `--tenant`, `-u` | | **Required.** Tenant to link the entity to. | | `--id` | | **Required.** ID of an available connector, source, or target. | | `--config` | `{}` | Shell-quoted JSON object containing the entity configuration. | | `--entity-type` | `connector` | Entity type. Must be `connector`, `source`, or `target`. | | `--flow-version` | `v2` | Flow version. Must be `v1` or `v2`. | | `--json` | `false` | Return machine-readable output. | # Overview Source: https://docs.hotglue.com/cli/overview A brief overview of the hotglue CLI and installation options ## What is the hotglue CLI? [](https://docs.hotglue.com/docs/cli-overview#what-is-the-hotglue-cli) Rather than manage your hotglue configuration entirely through the UI, hotglue offers a CLI that makes it possible to manage your configuration programmatically. This way, you can check things like your transformation scripts into source control and deploy them via a CI pipeline following best development practices. The CLI also contains several utility functions to make working with hotglue easier. You can list tenants, flows, jobs, and even download jobs locally for debugging and testing. ## Installation You can install the hotglue CLI directly from [npm](https://www.npmjs.com/package/@hotglue/cli). ### Global (recommended) [](https://docs.hotglue.com/docs/cli-overview#global-recommended) We recommend installing the hotglue CLI globally, as shown below: ```shell theme={null} npm install -g @hotglue/cli ``` And then you can run it from anywhere using ```shell theme={null} hotglue --help ``` ### Project Folder [](https://docs.hotglue.com/docs/cli-overview#project-folder) Alternatively, you may install the hotglue CLI locally in a project folder using ```shell theme={null} npm install --save-dev @hotglue/cli ``` And then you can run the local installation from within that folder using ```shell theme={null} npx hotglue ``` # Schedules Source: https://docs.hotglue.com/cli/schedules hotglue CLI commands for flow job schedules Manage a flow's job schedule for a tenant. # Schedules Get ### Description Fetches the current schedule for a tenant and flow. ### Sample ```shell theme={null} hotglue schedules get --tenant tenant123 --flow d2dzyCFnS --json ``` ### Parameters | Option | Default | Description | | ------------ | ------- | --------------------------- | | `--tenant` | | Tenant ID | | `--flow` | | Flow ID | | `--env` `-e` | | Environment ID | | `--job-type` | | Job type: `read` or `write` | | `--json` | | Output as JSON | # Schedules Put ### Description Creates or replaces a schedule for a tenant and flow. Defaults `state` to `ENABLED`. ### Sample ```shell theme={null} hotglue schedules put --tenant tenant123 --flow d2dzyCFnS --schedule-expression 'cron(0 5 * * *)' ``` ### Parameters | Option | Default | Description | | --------------------------- | --------- | -------------------------------------------------------------------- | | `--tenant` | | Tenant ID | | `--flow` | | Flow ID | | `--schedule-expression` | | Cron expression, e.g. `cron(0 5 * * *)` | | `--env` `-e` | | Environment ID | | `--job-type` | | Job type: `read` or `write` | | `--state` | `ENABLED` | Schedule state: `ENABLED` or `DISABLED` | | `--schedule-jitter-minutes` | | Jitter in minutes (1–720). Only allowed when `--tenant` is `default` | # Schedules Disable ### Description Disables the current schedule for a tenant and flow. ### Sample ```shell theme={null} hotglue schedules disable --tenant tenant123 --flow d2dzyCFnS ``` ### Parameters | Option | Default | Description | | ------------ | ------- | --------------------------- | | `--tenant` | | Tenant ID | | `--flow` | | Flow ID | | `--env` `-e` | | Environment ID | | `--job-type` | | Job type: `read` or `write` | # Singer Utils Source: https://docs.hotglue.com/cli/singer hotglue CLI utils for developing Singer tap and targets Develop Singer taps and targets. ## `hotglue singer validate` Validate a Singer file. It ensures that the data conforms to the expected schema and checks for any discrepancies or errors in the data records. ### Sample ```bash theme={null} hotglue singer validate --dataFilePath data.txt 🎉🎉🎉 Singer validation passed 🎉🎉🎉 -------------------------------------- 2 streams validated Record count by stream: contacts: 2500 companies: 513 ``` ### Options * `--dataFilePath`: The path to the data file that needs to be validated. Defaults to **data.singer** * `--allowDuplicateRecords`: A boolean flag to allow duplicate records in the data. Defaults to `false`. The `key_properties` field on SCHEMA messages is used to determine uniqueness for a stream. * `--allowFuzzyTypes`: A boolean flag to allow fields to allow multiple types for a field. Defaults to `false`. * `--json`: Outputs the validation result in JSON format. ## `hotglue singer create-tap` Scaffold a new Singer tap from the [hotglue-tap-cookiecutter](https://github.com/hotgluexyz/hotglue-tap-cookiecutter) template. The generated project uses [HotglueSingerSDK](https://pypi.org/project/hotglue-singer-sdk/). The command uses [cookiecutter](https://cookiecutter.readthedocs.io/). Cookiecutter must be installed and available on your `PATH`: ```bash theme={null} uv tool install cookiecutter ``` If cookiecutter is missing, the command exits with: ``` cookiecutter was not found. Install it with: uv tool install cookiecutter ``` ### Sample #### Interactive: ```bash theme={null} hotglue singer create-tap ``` #### Non-interactive: Pass `-y` or `--yes` to skip cookiecutter prompts and use the flags you provide. Omitted flags fall back to the template defaults. ```bash theme={null} hotglue singer create-tap \ --source-name Stripe \ --admin-name "Hotglue" \ --tap-id tap-stripe \ --library-name tap_stripe \ --stream-type REST \ --stream-names customers,invoices \ --api-base-url https://api.stripe.com \ --auth-method "API Key" \ --include-agent-instructions AGENTS.md \ --license MIT \ --yes ``` #### Options * `-y`, `--yes`: Skip cookiecutter prompts and use the provided flags. Defaults to `false`. * `--source-name`: Source name in CamelCase (for example, `Stripe`). * `--admin-name`: Author full name. * `--tap-id`: Tap ID in kebab-case (for example, `tap-stripe`). * `--library-name`: Python package name in snake\_case (for example, `tap_stripe`). If omitted and `--tap-id` is set, this is derived by replacing hyphens with underscores. * `--stream-type`: Stream type the source provides. One of `REST`, `GraphQL`, `Other`. * `--stream-names`: Comma-separated stream labels (for example, `users,groups`). * `--api-base-url`: API base URL used as `url_base` in `client.py`. * `--auth-method`: Authentication method for REST and GraphQL sources. One of `API Key`, `Bearer Token`, `Basic Auth`, `OAuth2`, `JWT`, `Custom or N/A`. For not interactive mode quote values that contain spaces. * `--include-agent-instructions`: Agent instructions file to include. One of `AGENTS.md`, `CLAUDE.md`, `None`. * `--license`: License for the generated project. One of `MIT`, `Apache-2.0`, `None`.
After scaffolding, see [Running taps](/custom-connectors/taps) for local discover, stream selection, and sync. # Snapshots Source: https://docs.hotglue.com/cli/snapshots Download and deploy snapshots for a tenant ## Overview The snapshots commands allow you to deploy and download snapshots across different environments and tenants. ## Commands ### deploy Deploy snapshots to a target environment and tenant. #### Usage ```bash theme={null} hotglue snapshots deploy --sourceFolder ``` #### Options | Option | Type | Required | Default | Description | | ---------------- | ------ | -------- | --------- | -------------------------------------------------------- | | `--sourceFolder` | string | Yes | - | Path to the source folder containing snapshots to deploy | | `--tenant` | string | Yes | `default` | Target tenant for deployment | #### Examples ```bash theme={null} # Deploy snapshots to default tenant hotglue snapshots deploy --sourceFolder ./snapshots # Deploy snapshots to specific tenant hotglue snapshots deploy --sourceFolder ./snapshots --tenant abc123 ``` *** ### download Download snapshots from a source environment or tenant. #### Usage ```bash theme={null} hotglue snapshots download --downloadTo --overwrite ``` #### Options | Option | Type | Required | Default | Description | | -------------- | ------- | -------- | --------- | ------------------------------------------------------ | | `--downloadTo` | string | Yes | - | Destination path where snapshots will be downloaded | | `--overwrite` | boolean | No | - | Whether to overwrite existing files at the destination | | `--tenant` | string | Yes | `default` | Source tenant to download snapshots from | #### Examples ```bash theme={null} # Download snapshots to local directory hotglue snapshots download --downloadTo ./local-snapshots --overwrite true # Download snapshots from specific tenant hotglue snapshots download --downloadTo ./backup --overwrite false --tenant abc1234 ``` # Supported Entities Source: https://docs.hotglue.com/cli/supported-entities Add supported connectors, sources, and targets to flows with the hotglue CLI Use the `supported-entities` commands to manage the connectors that tenants can link to a flow. The entity must already be available in the environment before it can be added to a flow. # Supported Entities Get ## Description Gets a supported entity and returns its connection parameters (`connect_ui_params`). Use this to discover the expected configuration before linking the entity to a tenant. ## Samples Get a v2 connector and its connection parameters: ```shell theme={null} hotglue supported-entities get --env prod.acme.com --flow bTHIweD0W --id shopify ``` Use `--entity-type` and `--flow-version` to get another supported entity type: ```shell theme={null} # v2 source hotglue supported-entities get --env prod.acme.com --flow bTHIweD0W --id shopify --entity-type source # v1 source hotglue supported-entities get --env prod.acme.com --flow bTHIweD0W --id shopify --entity-type source --flow-version v1 ``` Return machine-readable output for programmatic inspection: ```shell theme={null} hotglue supported-entities get --env prod.acme.com --flow bTHIweD0W --id s3 --json ``` ## Parameters | Option | Default | Description | | ---------------- | -------------- | -------------------------------------------------------------- | | `--apikey`, `-k` | Profile config | Personal API Key used to authenticate the request. | | `--env`, `-e` | | **Required.** Environment containing the flow. | | `--flow`, `-f` | | **Required.** Flow to get the supported entity from. | | `--id` | | **Required.** ID of an available connector, source, or target. | | `--entity-type` | `connector` | Entity type. Must be `connector`, `source`, or `target`. | | `--flow-version` | `v2` | Flow version. Must be `v1` or `v2`. | | `--json` | `false` | Return machine-readable output. | # Supported Entities Create ## Description Adds a supported entity to a flow. By default, the command adds a v2 connector. After creation, the command returns the created entity together with its connection parameters (`connect_ui_params`). ## Samples Add a v2 connector: ```shell theme={null} hotglue supported-entities create --env prod.acme.com --flow bTHIweD0W --id shopify ``` Pass connector configuration as a shell-quoted JSON object: ```shell theme={null} hotglue supported-entities create \ --env prod.acme.com \ --flow bTHIweD0W \ --id shopify \ --body '{"client_id":"client-id","client_secret":"client-secret"}' ``` Use `--entity-type` and `--flow-version` to add another supported entity type: ```shell theme={null} # v2 source hotglue supported-entities create --env prod.acme.com --flow bTHIweD0W --id shopify --entity-type source # v2 target with configuration hotglue supported-entities create --env prod.acme.com --flow bTHIweD0W --id s3 --entity-type target --body '{"config":{"bucket":"my-bucket"}}' # v1 source hotglue supported-entities create --env prod.acme.com --flow bTHIweD0W --id shopify --entity-type source --flow-version v1 # v1 target hotglue supported-entities create --env prod.acme.com --flow bTHIweD0W --id s3 --entity-type target --flow-version v1 ``` V1 flows support sources and targets, but not connectors. ## Parameters | Option | Default | Description | | ---------------- | -------------- | -------------------------------------------------------------------------------------------------------------------- | | `--apikey`, `-k` | Profile config | Personal API Key used to authenticate the request. | | `--env`, `-e` | | **Required.** Environment containing the flow. | | `--flow`, `-f` | | **Required.** Flow to add the supported entity to. | | `--id` | | **Required.** ID of an available connector, source, or target. | | `--body` | `{}` | Shell-quoted JSON object containing entity configuration. `--id` takes precedence over an identifier in this object. | | `--entity-type` | `connector` | Entity type. Must be `connector`, `source`, or `target`. | | `--flow-version` | `v2` | Flow version. Must be `v1` or `v2`. | | `--json` | `false` | Return machine-readable output. | # Tenants Source: https://docs.hotglue.com/cli/tenants hotglue CLI commands for tenants View tenants directly from the CLI. # Tenants List ### Description Lists the tenants in the hotglue environment. ### Sample ```shell theme={null} $ hotglue tenants list ``` # Tenants Delete ### Description Deletes a tenant from hotglue (including scheduled jobs and any related jobs history/config files). ### Sample ```shell theme={null} $ hotglue tenants delete -e prod.acme.com -u test-user ✔ Finished: Deleting tenant test-user schedules. ✔ Finished: Verifying user and authorizing. ✔ Finished: Deleting tenant test-user for environment prod.acme.com. ┌─────────────┐ │ Tenant ID │ ├─────────────┤ │ test-user │ └─────────────┘ ``` # Tenants Update Config ### Description Bulk updates the configs of all tenants. This will update the passed JSON into the tenants' configs, not completely overwrite the tenants' configs. ### Sample ```shell theme={null} hotglue tenants update-config ✔ Finished: Retrieving tenants for environment dev.hotglue.testcompany.com. ✔ Finished: Updating config for connector salesforce and flow abc123. ┌─────────────┐ │ Tenant ID │ ├─────────────┤ │ test-user │ └─────────────┘ ``` ### Parameters | Option | Default | Description | | ------------------ | --------------- | ---------------------------------------------------------------------- | | `--flow` | | The flow to update linked sources/connectors for | | `--connector` | | The connector id to update | | `--configFilePath` | `./config.json` | The relative path to a JSON file containing the desired config updates | # Tenants Custom ETL ### Description Lists all tenants with custom ETL Scripts ### Sample ```shell theme={null} hotglue tenants custom-etl ✔ Finished: Retrieving tenants for environment dev.hotglue.test.com. ✔ Finished: Querying for custom ETL scripts for flow ABC123. ┌─────────────┐ │ Tenant ID │ ├─────────────┤ │ test-user │ └─────────────┘ ``` ### Parameters | Option | Default | Description | | ------------- | ------- | -------------------------------------------- | | `--flow` | | The flow to check for forked scripts | | `--connector` | | The connector ID to check for forked scripts | # Tenants Custom Field Map ### Description Lists all tenants with a custom Field Map ### Sample ```shell theme={null} hotglue tenants custom-field-map ✔ Finished: Retrieving tenants for environment dev.hotglue.testcompany.com. ✔ Finished: Querying for custom field maps for flow KeJ5dstJ2. ┌──────────────┬──────────┐ │ Tenant ID │ Connector IDs │ ├──────────────┼──────────┤ │ anonymous-user-5 │ intacct │ └──────────────┴──────────┘ ``` ### Parameters | Option | Default | Description | | ------------- | ------- | ----------------------------------------------- | | `--flow` | | The flow to check for forked field maps | | `--connector` | | The connector ID to check for forked field maps | # Tenants Custom Catalog ### Description Lists all tenants with a custom catalog ### Sample ```shell theme={null} hotglue tenants custom-catalog ✔ Finished: Retrieving tenants for environment dev.hotglue.test.com. ✔ Finished: Querying for custom catalogs for flow abc123. ┌───────┬────────────┐ │ Tenant ID │ Connector IDs │ ├───────┼────────────┤ │ qb-user │ quickbooks:sandbox │ ├───────┼───────────┤ │ abc31 │ stripe-v2 │ └────────────────────┘ ``` ### Parameters | Option | Default | Description | | ------------- | ------- | --------------------------------------------- | | `--flow` | | The flow to check for forked catalogs | | `--connector` | | The connector ID to check for forked catalogs | # Tenants Tenant Config Get ### Description Gets the current tenant config stored in hotglue. ### Sample ```shell theme={null} hotglue tenants tenant-config get --tenant tenant123 ``` ### Parameters | Option | Default | Description | | ------------ | ------- | -------------- | | `--tenant` | | Tenant ID | | `--env` `-e` | | Environment ID | # Tenants Tenant Config Put ### Description Sets or replaces the tenant config. The payload must be a JSON object. ### Sample ```shell theme={null} hotglue tenants tenant-config put '{"hi":"world","bye":5}' --tenant tenant123 ``` ### Parameters | Option | Default | Description | | ------------ | ------- | ----------------------------------------- | | `json` | | JSON object to store as the tenant config | | `--tenant` | | Tenant ID | | `--env` `-e` | | Environment ID | # Tenants Tenant Config Patch ### Description Merges updates into the existing tenant config. The payload must be a JSON object. ### Sample ```shell theme={null} hotglue tenants tenant-config patch '{"hi":"world","byetwo":5}' --tenant tenant123 ``` ### Parameters | Option | Default | Description | | ------------ | ------- | ------------------------------------------------------- | | `json` | | JSON object with fields to merge into the tenant config | | `--tenant` | | Tenant ID | | `--env` `-e` | | Environment ID | # Composite MCP Source: https://docs.hotglue.com/composite-mcp/overview One authenticated MCP endpoint for every connector your tenants link through Hotglue **Composite MCP** is a single authenticated MCP endpoint that exposes tools from the connectors each tenant has linked in Hotglue. Instead of wiring every third-party MCP into your AI client separately, you connect once and get a unified, tenant-scoped tool surface. The live endpoint is: ``` https://mcp.hotglue.com/mcp ``` Composite MCP handles three things for you: 1. **Authentication** — validates a per-tenant bearer token issued by Hotglue 2. **Tool discovery** — surfaces available tools from linked connectors that have an MCP backend 3. **Routing** — proxies tool calls to the underlying MCP (an official provider like Notion or Atlassian, or a custom MCP built by Hotglue) # Why a composite MCP? MCP clients typically need a separate server configuration per provider — each with its own auth flow, token refresh, and tool namespace. That breaks down when you ship integrations to many customers: * Each tenant links different connectors * Credentials live in Hotglue, not in the AI client * You want one MCP URL in Cursor, Claude, or any MCP-compatible agent A **composite MCP server** sits in front of those upstream MCPs. With one connection and one bearer token, your agent sees every tool the tenant is allowed to use — namespaced by connector (for example `notion.search`, `jira.createJiraIssue`). That means you keep using Hotglue's existing connection UX, while AI agents get a single, secure gateway into customer systems. # Demo